UNPKG

dodex-vertx

Version:

A java asynchronous server for Dodex and Dodex-mess

260 lines (231 loc) 10.6 kB
import { login } from "../js/login"; import { useEffect } from "react"; import { act, render, screen } from "@testing-library/react"; export default function (Start, React, LoginC, timer) { /* * Test Form validation and submission. */ function HandleClick(e) { useEffect(() => { if($(".login:first").html() === "Log Out") { login(null, true)(e); } else { Start["div .login click"](e); } }); return <LoginC /> } describe("Popup Login Form", () => { let modal; let closeButton; let nameObject; let pwrdObject; let pwrdObject2; let loginObject; let loginButton; let checkbox; let form; beforeAll(done => { // Making sure there's a clean starting point sessionStorage.removeItem("credentials"); act(() => { render(<HandleClick />); }); loginObject = $("small .login"); loginObject.trigger("click"); Start.base = true; // Note: if page does not refresh, increase the timer time. // Using RxJs instead of Promise. const numbers = timer(100, 50); const observable = numbers.subscribe(timer => { modal = $("#modalTemplate"); form = modal.find("form:first"); if ((modal.length === 1 && form.length === 1) || timer === 100) { nameObject = $("#inputUsername"); pwrdObject = $("#inputPassword"); pwrdObject2 = $("#inputPassword2"); checkbox = $("#newLogin"); observable.unsubscribe(); done(); } }); }); it("Login form - verify modal with login loaded", done => { expect(modal[0]).toBeInDOM(); expect(nameObject[0]).toExist(); closeButton = $(".close-modal:first"); done(); }); it("Login form - verify required fields", done => { expect(nameObject[0].validity.valueMissing).toBe(true); expect(pwrdObject[0].validity.valueMissing).toBe(true); done(); }); it("Login form - verify user name pattern mismatch", done => { nameObject.val("abcd"); // too short expect(nameObject[0].validity.patternMismatch).toBe(true); nameObject.val("1234567890123456789012345"); // too long expect(nameObject[0].validity.patternMismatch).toBe(true); nameObject.val("abcde"); expect(nameObject[0].validity.patternMismatch).toBe(false); done(); }); it("Login form - verify password pattern mismatch", done => { pwrdObject.val("Secret01"); // no special character expect(pwrdObject[0].validity.patternMismatch).toBe(true); pwrdObject.val("Secret1"); // too short expect(pwrdObject[0].validity.patternMismatch).toBe(true); pwrdObject.val("1234567890123456789012341234567890123456789012345"); // too long expect(pwrdObject[0].validity.patternMismatch).toBe(true); pwrdObject.val("secret$1"); expect(pwrdObject[0].validity.patternMismatch).toBe(false); done(); }); /* Testing Java backend can only happen in remote testing */ if(!window._local) { it("Login form - Make sure test user removed", done => { loginButton = $(".modal .submit-login"); if(loginButton.length === 0) { done(); return; } sessionStorage.removeItem("credentials"); sessionStorage.setItem("credentials", `{"name":"abcde", "password":"945973053"}`) login(loginButton, false)("DELETE", loginButton, "/userlogin/unregister").then(data => { const credentials = sessionStorage.getItem("credentials"); expect(data.status > -1).toBe(true); expect(credentials).toBe(null); done(); }); }); it("Login form - verify java vertx backend routing", done => { loginButton.click(); let credentials; let badUser; let isValid; const numbers = timer(75, 50); const observable = numbers.subscribe(timer => { badUser = pwrdObject[0].validity.valueMissing === true; isValid = pwrdObject[0].checkValidity(); credentials = sessionStorage.getItem("credentials"); // Trying to login with invalid user if ((!isValid && !credentials && badUser) || timer === 75) { expect(badUser).toBe(true); expect(credentials).toEqual(null); expect(isValid).toBe(false); observable.unsubscribe(); done(); } }); }); it("Login form - Create New User, click checkbox & fillout form", done => { let numbers = timer(50, 30); let observable = numbers.subscribe(timer => { modal = $("#modalTemplate"); form = modal.find("form:first"); if(form.length === 1 || timer === 50) { checkbox = $("#newLogin"); checkbox.trigger("click"); nameObject = $("#inputUsername"); nameObject.val("abcde"); pwrdObject = $("#inputPassword"); pwrdObject.val("secret$1"); pwrdObject2 = $("#inputPassword2"); pwrdObject2.val(pwrdObject.val()); expect(nameObject.length === 1).toBe(true); expect(checkbox.prop("checked") === true).toBe(true); expect(pwrdObject.val()).toBe(pwrdObject2.val()); observable.unsubscribe(); done(); } }); }); it("Login form - Create New User, submit & verify new user", done => { const badUser = pwrdObject2[0].validity.valueMissing === true; const isValid = pwrdObject2[0].checkValidity(); let returnValue; loginButton.click(); let numbers = timer(100, 50); let observable = numbers.subscribe(timer => { returnValue = sessionStorage.getItem("credentials"); if ((isValid && returnValue !== null && !badUser) || timer === 50) { expect(returnValue).not.toEqual(null); expect(badUser).toBe(false); expect(isValid).toBe(true); loginButton.click(); observable.unsubscribe(); done(); } }); }); it("Login form - Log Out User", done => { act(() => { render(<HandleClick />); }); let html = $("small .login").html(); loginButton.click(); expect(html).toBe("Log Out"); act(() => { screen.getByText("Log Out").click(); }); let numbers = timer(100, 50); let observable = numbers.subscribe(timer => { let credentials = sessionStorage.getItem("credentials"); html = $("small .login").html(); if (html === "Log In" || timer === 50) { expect(html).toBe("Log In"); expect(credentials).toEqual(null); observable.unsubscribe(); done(); } }); }); it("Login form - Reopen Login", done => { act(() => { render(<HandleClick />); }); loginButton.click(); act(() => { const login = screen.getAllByText("Log In"); login[0].click(); }); let numbers = timer(50, 50); let observable = numbers.subscribe(timer => { modal = $("#modalTemplate"); if (modal !== null && (modal.hasClass("show") && timer > 15) || timer === 50) { // Give modal a chance to open expect(modal.hasClass("show")).toBe(true); observable.unsubscribe(); done(); } }); }); it("Login form - verify cancel and removed from DOM", function (done) { expect(modal[0]).toExist(); modal.on("shown.bs.modal", function () { modal.modal("toggle"); }); modal.modal("hide"); const numbers = timer(50, 50); const observable = numbers.subscribe(timer => { if ((modal.hasClass("show") === false && timer > 15) || timer === 50) { // give modal a chance to close expect(modal[0]).not.toBeVisible(); expect(modal[0]).not.toBeInDOM(); observable.unsubscribe(); done(); modal.modal("toggle"); } }); }); it("Login form - Remove added User", done => { // note: unregister is not a component sessionStorage.removeItem("credentials"); sessionStorage.setItem("credentials", `{"name":"abcde", "password":"945973053"}`); login(loginButton, false)("DELETE", loginButton, "/userlogin/unregister").then(data => { const credentials = sessionStorage.getItem("credentials"); expect(data.status > -1).toBe(true); expect(credentials).toBe(null); done(); }); }); } }); }