OWASP/SSO_Project

View on GitHub
cypress/integration/user.js

Summary

Maintainability
A
0 mins
Test Coverage
describe("User Activity", () => {
    beforeEach(() => {
        cy.clearData();
        cy.authenticate();
    });
    
    it("Can log out", () => {
        cy.logout();
    });
    
    it("Can load more audit logs", () => {
        const insertValues = [];
        for(let i=0;i<10;i++) {
            insertValues.push("('8.8.8.8', 'US', 'login', 'password', 1)");
        }
        cy.task("sql", "INSERT INTO audit (ip, country, object, action, user) VALUES "+(insertValues.join(",\n"))+";");
        
        cy.get(".data-logs .accordion-row").should("have.length", 5);
        cy.get("#loadMoreAudit").click();
        cy.get(".data-logs .accordion-row").should("have.length", 10);
        
        cy.get(".data-logs .accordion-row:last").click();
        cy.get(".audit-logs").scrollTo("bottom");
        cy.get(".data-logs .accordion-row:last .collapse.show .card-body").should("be.visible");
        cy.get(".flag.flag-us").should("be.visible");
    });
    
    it("can report suspicious events", () => {
        cy.expectLogIncrease(0);

        cy.get(".data-logs .accordion-row:first").click();
        cy.get(".data-logs .accordion-row:first .report-log").click();
        
        cy.expectLogIncrease(2);
    });
    
    it("Can log out other sessions", () => {
        cy.task("sql", "INSERT INTO userSessions (userId, token) VALUES (1, 'other-token')");
        cy.task("sql", "SELECT * FROM userSessions WHERE userId = 1").should("have.length", 2);
        
        cy.expectLogIncrease(0);
        cy.get("#closeSessions").click();
        
        cy.expectLogIncrease(1);
        cy.task("sql", "SELECT * FROM userSessions WHERE userId = 1").should("have.length", 1);
    });
    
    it("Can log into two accounts and resume a session", () => {
        cy.visit("/");
        cy.get("#resume-session a").should("have.length", 1);
        
        Cypress.env("emailAddress", "2_" + Cypress.env("emailAddress"));
        cy.authenticate();
        
        cy.visit("/");
        cy.get("#resume-session a").should("have.length", 2);
        
        cy.get("#resume-session a:first").click();
        cy.isAuthenticated();
    });
});

function expectLogs(num) {
    cy.get(".data-logs").find(".accordion-row").should("have.length", num);
}