My first e2e test and modifications to client to support it

This commit is contained in:
2020-03-31 20:05:27 +00:00
parent 8feb4375f9
commit 2211bf550f
7 changed files with 136 additions and 24 deletions

View File

@@ -0,0 +1,62 @@
// login just once using API
let user;
before(function fetchUser() {
cy.request("POST", "http://localhost:7575/api/v8/Auth", {
username: Cypress.env("adminusername"),
password: Cypress.env("adminpassword")
})
.its("body")
.then(res => {
user = res;
});
});
// but set the user before visiting the page
// so the app thinks it is already authenticated
beforeEach(function setUser() {
cy.visit("/", {
onBeforeLoad(win) {
// and before the page finishes loading
// set the user object in local storage
win.localStorage.setItem("user", JSON.stringify(user));
}
});
// the page should be opened and the user should be logged in
});
describe("The home page", () => {
it("Successfully loads the home page", () => {
cy.visit("/");
});
});
describe("JWT", () => {
it("makes authenticated request", () => {
// we can make authenticated request ourselves
// since we know the token
cy.request({
url: "http://localhost:7575/api/v8/User/1",
auth: {
bearer: user.token
}
})
.its("body")
.should("deep.equal", [
{
id: 1,
username: "test",
firstName: "Test",
lastName: "User"
}
]);
});
it("is logged in", () => {
cy.contains("Hi Test!").should("be.visible");
});
it("shows loaded user", () => {
// this user information came from authenticated XHR call
cy.contains("li", "Test User").should("be.visible");
});
});

View File

@@ -0,0 +1,29 @@
// https://docs.cypress.io/api/introduction/api.html
describe("Login", () => {
it("Successfully logs in navigate and log out", () => {
cy.visit("/login");
cy.get("input[name=username]")
.clear()
.type(Cypress.env("adminusername"));
// {enter} causes the form to submit
cy.get("input[name=password]")
.clear()
.type(`${Cypress.env("adminpassword")}{enter}`);
// we should be redirected to /dashboard
cy.url().should("include", "/home-dashboard");
//navigate and confirm
//open nav and home menu
cy.get("[data-cy=navicon]").click();
cy.get("[data-cy=home]").click();
cy.get("[data-cy='nav/home-user-settings']").click();
cy.url().should("include", "/home-user-settings");
cy.get("[data-cy=contextmenu]").click();
cy.get("[data-cy='app:logout']").click();
cy.url().should("include", "/login");
});
});