import { Selector } from "testcafe"; import testcafeconfig from "../acceptance/testcafeconfig"; import Page from "../acceptance/page-model"; fixture`Test authentication`.page`${testcafeconfig.url}`; const page = new Page(); test.meta("testID", "authentication-001")("Login and Logout", async (t) => { await t.navigateTo("/browse"); await t .expect(Selector(".input-name input").visible) .ok() .expect(Selector(".input-search input").visible) .notOk() .typeText(Selector(".input-name input"), "admin", { replace: true }) .expect(Selector(".action-confirm").hasAttribute("disabled", "disabled")) .ok() .typeText(Selector(".input-password input"), "photoprism", { replace: true }) .expect(Selector(".input-password input").hasAttribute("type", "password")) .ok() .click(Selector(".v-input__icon--append")) .expect(Selector(".input-password input").hasAttribute("type", "text")) .ok() .click(Selector(".v-input__icon--append")) .expect(Selector(".input-password input").hasAttribute("type", "password")) .ok() .click(Selector(".action-confirm")) .expect(Selector(".input-search input", { timeout: 7000 }).visible) .ok(); await page.openNav(); await t .click(Selector(".nav-logout")) .expect(Selector(".input-name input").visible) .ok() .expect(Selector(".input-search input").visible) .notOk(); await t.navigateTo("/settings"); await t .expect(Selector(".input-name input").visible) .ok() .expect(Selector(".input-search input").visible) .notOk(); }); //TODO test all pages not accessible while logged out test.meta("testID", "authentication-002")("Login with wrong credentials", async (t) => { await page.login("wrong", "photoprism"); await t .expect(Selector(".v-snack__content").withText("Invalid credentials").visible, { timeout: 7000, }) .ok() .navigateTo("/favorites") .expect(Selector(".input-name input").visible) .ok() .expect(Selector(".input-search input").visible) .notOk(); await page.login("admin", "abcdefg"); await t .navigateTo("/archive") .expect(Selector(".input-name input").visible) .ok() .expect(Selector(".input-search input").visible) .notOk(); }); test.meta("testID", "authentication-003")("Change password", async (t) => { await page.login("admin", "photoprism"); await t.expect(Selector(".input-search input").visible).ok(); await page.openNav(); await t .click(Selector(".nav-settings")) .click(Selector("#tab-settings-account")) .typeText(Selector(".input-current-password input"), "wrong", { replace: true }) .typeText(Selector(".input-new-password input"), "photoprism", { replace: true }) .expect(Selector(".action-confirm").hasAttribute("disabled", "disabled")) .ok() .typeText(Selector(".input-retype-password input"), "photoprism", { replace: true }) .expect(Selector(".action-confirm").hasAttribute("disabled", "disabled")) .notOk() .click(".action-confirm") .expect(Selector(".v-snack__content").withText("Invalid password, please try again").visible, { timeout: 7000, }) .ok() .typeText(Selector(".input-current-password input"), "photoprism", { replace: true }) .typeText(Selector(".input-new-password input"), "photoprism123", { replace: true }) .expect(Selector(".action-confirm").hasAttribute("disabled", "disabled")) .ok() .typeText(Selector(".input-retype-password input"), "photoprism123", { replace: true }) .expect(Selector(".action-confirm").hasAttribute("disabled", "disabled")) .notOk() .click(".action-confirm"); await page.openNav(); await t.click(Selector(".nav-logout")); await page.login("admin", "photoprism"); await t .navigateTo("/archive") .expect(Selector(".input-name input").visible) .ok() .expect(Selector(".input-search input").visible) .notOk(); await page.login("admin", "photoprism123"); await t.expect(Selector(".input-search input").visible).ok(); await page.openNav(); await t .click(Selector(".nav-settings", { timeout: 7000 })) .click(Selector("#tab-settings-account")) .typeText(Selector(".input-current-password input"), "photoprism123", { replace: true }) .typeText(Selector(".input-new-password input"), "photoprism", { replace: true }) .typeText(Selector(".input-retype-password input"), "photoprism", { replace: true }) .click(".action-confirm"); await page.openNav(); await t.click(Selector(".nav-logout")); await page.login("admin", "photoprism"); await t.expect(Selector(".input-search input").visible).ok(); await page.openNav(); await t.click(Selector(".nav-logout")); });