Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cypress.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const { defineConfig } = require("cypress");

module.exports = defineConfig({
e2e: {
baseUrl: 'https://frontendbootcamp.proshore.eu/',
setupNodeEvents(on, config) {
// implement node event listeners here
},
Expand Down
5 changes: 5 additions & 0 deletions cypress.env.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"APP_EMAIL": "test@test.com",
"APP_PASSWORD": "test123"
}

118 changes: 118 additions & 0 deletions cypress/e2e/auth/auth.cy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
const { getRandomEmail, getRandomString } = require("../../../utilites/helper");
const forgotPassword_PO = require("../../page_objects/forgotPassword_PO");
const loginPagePO = require("../../page_objects/login_PO");

describe("authentication module", function () {
beforeEach(function () {
loginPagePO.visitLoginPage();
});
it("URL should be https://frontendbootcamp.proshore.eu/accounts/login", function () {
cy.url().should(
"eq",
"https://frontendbootcamp.proshore.eu/accounts/login"
);
});
it("verify valid login", function () {
cy.login();
});

it(" should not be submit with empty details", function () {
loginPagePO.clickOnLoginButton();
loginPagePO.elements.loginBtn().should("be.disabled");
});

it("Verify the validation msg when login is attempted with less than 6 letter password", function () {
const randomGenerateEmail = getRandomEmail();
const randomGenerateName = getRandomString(3);
loginPagePO.typeEmail(randomGenerateEmail);
loginPagePO.typePassword(randomGenerateName);
loginPagePO.clickOnLoginButton();
loginPagePO.verifyPasswordLengthErrorMessage();
});
it("Verify the login process with invalidLogin credentials ", function () {
const randomGenerateEmail = getRandomEmail();
const randomGenerateName = getRandomString(7);
loginPagePO.typeEmail(randomGenerateEmail);
loginPagePO.typePassword(randomGenerateName);
loginPagePO.clickOnLoginButton();
loginPagePO.verifyInvalidCredentialAlertMessage();
});
it("Password should be visible by clicking the toggle_icon eye-slash", function () {
const randomGenerateName = getRandomString(5);
loginPagePO.typePassword(randomGenerateName);
cy.get("#showPassword").click();
cy.get("#password").invoke("attr", "type").should("eq", "text");
});
it("It should not be submit with empty email address", function () {
const randomGenerateName = getRandomString(6);
loginPagePO.typePassword(randomGenerateName);
loginPagePO.clickOnLoginButton();
loginPagePO.elements.loginBtn().should("be.disabled");
});
it("Should not be submit with empty password", function () {
const randomGenerateEmail = getRandomEmail();
loginPagePO.typeEmail(randomGenerateEmail);
loginPagePO.clickOnLoginButton();
loginPagePO.elements.loginBtn().should("be.disabled");
});
it("It should not be submit with correct email address and incorrect password", function () {
const randomGenerateName = getRandomString(7);
loginPagePO.typeEmail(Cypress.env("APP_EMAIL"));
loginPagePO.typePassword(randomGenerateName);
loginPagePO.clickOnLoginButton();
loginPagePO.verifyInvalidCredentialAlertMessage();
});

it("It should not be submit with incorrect email address and correct password", function () {
const randomGenerateEmail = getRandomEmail();
loginPagePO.typeEmail(randomGenerateEmail);
loginPagePO.typePassword(Cypress.env("APP_PASSWORD"));
loginPagePO.clickOnLoginButton();
loginPagePO.verifyInvalidCredentialAlertMessage();
});
it("clicked on forget password redirected to forget password page", function () {
forgotPassword_PO.visitForgotPasswordPage();
});

it(" should be submit with empty emailaddress", function () {
forgotPassword_PO.visitForgotPasswordPage();
forgotPassword_PO.clickOnGetResetLink();
// forgotPassword_PO.verifyEmptyCredentialAlertMessage();

// cy.on(".window:alert", (txt) => {
// expect(txt).to.contains("Please fill out the field");
});

it(" should be submit with incorrect email address in reset password page", function () {
forgotPassword_PO.visitForgotPasswordPage();
const randomGenerateEmail = getRandomEmail();
forgotPassword_PO.typeEmail(randomGenerateEmail);
forgotPassword_PO.clickOnGetResetLink();
forgotPassword_PO.verifyInvalidCredentialAlertMessage();
});
it(" should be submit with correct email address in reset password page", function () {
forgotPassword_PO.visitForgotPasswordPage();
forgotPassword_PO.typeEmail("test@test.com");
forgotPassword_PO.clickOnGetResetLink();
forgotPassword_PO.getResetLink();

// cy.get(".form-heading-title").should("have.text", "Check your mail");
});

it("Access admin portal via url", function () {
cy.url().should(
"eq",
"https://frontendbootcamp.proshore.eu/accounts/login"
);

cy.location("origin").then((URL) => {
expect(URL).to.eq("https://frontendbootcamp.proshore.eu");
cy.visit(URL + "/tracker");
cy.get(".form-heading-title").should("have.text", "Log in");
cy.url().should(
"eq",
"https://frontendbootcamp.proshore.eu/accounts/login?next=/tracker"
);
});
});
});
38 changes: 38 additions & 0 deletions cypress/page_objects/forgotPassword_PO.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
class forgotPassword_PO {
elements = {
emailInput: () => cy.get("#email.form-control"),
getResetLinkButton: () => cy.get('[data-cy="forgetPasswordResetButton"]'),
loginError: () => cy.get(".alert-message"),
getResetLink: () => cy.get(".form-heading-title"),
validationError: () => cy.on(".window:alert"),
};
visitForgotPasswordPage() {
cy.get(".forgot-password").click();
cy.url().should(
"eq",
"https://frontendbootcamp.proshore.eu/accounts/password-forgot"
);
}

typeEmail(email) {
this.elements.emailInput().type(email);
}
clickOnGetResetLink() {
this.elements.getResetLinkButton().click();
}
verifyInvalidCredentialAlertMessage() {
this.elements
.loginError()
.should("have.text", "User with given email address not found");
}
getResetLink() {
this.elements.getResetLink().click();
}
// verifyEmptyCredentialAlertMessage(){
// this.elements.validationError.
// // on(".window:alert", (txt) => {
// should("contains","Please fill out the field");
// }
}

module.exports = new forgotPassword_PO();
39 changes: 39 additions & 0 deletions cypress/page_objects/login_PO.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
class login_PO {
elements = {
emailInput: () => cy.get('[data-cy="emailInputField"]').eq(0),
passwordInput: () => cy.get('[data-cy="emailInputField"]').eq(1),
loginBtn: () => cy.get('[data-cy="loginButton"]'),
loginError: () => cy.get(".alert-message"),
validationError: () => cy.get(".text-danger"),
};
visitLoginPage() {
cy.visit("https://frontendbootcamp.proshore.eu/accounts/login");
cy.url().should(
"eq",
"https://frontendbootcamp.proshore.eu/accounts/login"
);
}

typeEmail(email) {
this.elements.emailInput().type(email);
}
typePassword(password) {
this.elements.passwordInput().type(password);
}
clickOnLoginButton() {
this.elements.loginBtn().click({ force: true });
}

verifyPasswordLengthErrorMessage() {
this.elements
.validationError()
.should("have.text", "Password length must be at least 6 characters.");
}
verifyInvalidCredentialAlertMessage() {
this.elements
.loginError()
.should("have.text", "Please enter valid email or password.");
}
}

module.exports = new login_PO();
11 changes: 10 additions & 1 deletion cypress/support/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,13 @@
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
Cypress.Commands.add('login', () => {
cy.clearCookies()
cy.clearLocalStorage()
cy.get("#email").type(Cypress.env("APP_EMAIL"))
cy.get("#password").type(Cypress.env("APP_PASSWORD"))
.type("{enter}")
cy.url().should("eq","https://frontendbootcamp.proshore.eu/tracker")
})

19 changes: 19 additions & 0 deletions utilites/helper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
function getRandomString(length = 5) {
const characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * characters.length));
}
return result;
}

function getRandomEmail() {
const randomString = getRandomString();
return randomString + "@gmail.com";
}

module.exports = {
getRandomString,
getRandomEmail,
};