Tests: Refactor acceptance-private tests

This commit is contained in:
theresa 2022-01-21 17:55:59 +01:00
parent 2c0fdf89d6
commit ff31f401be
4 changed files with 171 additions and 200 deletions

View file

@ -1,7 +1,6 @@
import { Selector } from "testcafe";
import { ClientFunction } from "testcafe";
import testcafeconfig from "../acceptance/testcafeconfig";
import Page from "../acceptance/page-model";
import Menu from "../page-model/menu";
import Photo from "../page-model/photo";
import Toolbar from "../page-model/toolbar";
@ -10,10 +9,10 @@ import PhotoViews from "../page-model/photo-views";
import Label from "../page-model/label";
import Album from "../page-model/album";
import Subject from "../page-model/subject";
import NewPage from "../page-model/page";
fixture`Test admin role`.page`${testcafeconfig.url}`;
const page = new Page();
const menu = new Menu();
const photo = new Photo();
const toolbar = new Toolbar();
@ -22,6 +21,7 @@ const photoviews = new PhotoViews();
const label = new Label();
const album = new Album();
const subject = new Subject();
const newpage = new NewPage();
const getLocation = ClientFunction(() => document.location.href);
@ -33,7 +33,7 @@ test.meta("testID", "authentication-000")(
);
test.meta("testID", "admin-role-001")("Access to settings", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.checkMenuItemAvailability("settings", true);
await t.navigateTo("/settings");
await t
@ -60,7 +60,7 @@ test.meta("testID", "admin-role-001")("Access to settings", async (t) => {
});
test.meta("testID", "admin-role-002")("Access to archive", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
const PhotoCountBrowse = await photo.getPhotoCount("all");
await menu.checkMenuItemAvailability("archive", true);
await t.navigateTo("/archive");
@ -70,7 +70,7 @@ test.meta("testID", "admin-role-002")("Access to archive", async (t) => {
});
test.meta("testID", "admin-role-003")("Access to review", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
const PhotoCountBrowse = await photo.getPhotoCount("all");
await menu.checkMenuItemAvailability("review", true);
await t.navigateTo("/review");
@ -80,7 +80,7 @@ test.meta("testID", "admin-role-003")("Access to review", async (t) => {
});
test.meta("testID", "admin-role-004")("Access to private", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
const PhotoCountBrowse = await photo.getPhotoCount("all");
await menu.checkMenuItemAvailability("private", true);
await t.navigateTo("/private");
@ -90,7 +90,7 @@ test.meta("testID", "admin-role-004")("Access to private", async (t) => {
});
test.meta("testID", "admin-role-005")("Access to library", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
const PhotoCountBrowse = await photo.getPhotoCount("all");
await menu.checkMenuItemAvailability("library", true);
await t.navigateTo("/library");
@ -130,7 +130,7 @@ test.meta("testID", "admin-role-005")("Access to library", async (t) => {
});
test.meta("testID", "admin-role-006")("private/archived photos in search results", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
const PhotoCountBrowse = await photo.getPhotoCount("all");
await toolbar.search("private:true");
const PhotoCountPrivate = await photo.getPhotoCount("all");
@ -180,7 +180,7 @@ test.meta("testID", "admin-role-006")("private/archived photos in search results
});
test.meta("testID", "admin-role-007")("Upload functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await toolbar.checkToolbarActionAvailability("upload", true);
await menu.openPage("albums");
await toolbar.checkToolbarActionAvailability("upload", true);
@ -211,7 +211,7 @@ test.meta("testID", "admin-role-007")("Upload functionality", async (t) => {
test.meta("testID", "admin-role-008")(
"Admin can private, archive, share, add/remove to album",
async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
const FirstPhoto = await photo.getNthPhotoUid("image", 0);
await photo.selectPhotoFromUID(FirstPhoto);
await contextmenu.checkContextMenuActionAvailability("private", true);
@ -236,7 +236,7 @@ test.meta("testID", "admin-role-008")(
);
test.meta("testID", "admin-role-009")("Admin can approve low quality photos", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await toolbar.search('quality:0 name:"photos-013_1"');
await photo.toggleSelectNthPhoto(0, "all");
await contextmenu.triggerContextMenuAction("edit", "", "");
@ -244,7 +244,7 @@ test.meta("testID", "admin-role-009")("Admin can approve low quality photos", as
});
test.meta("testID", "admin-role-010")("Edit dialog is not read only for admin", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await toolbar.search("faces:new");
//details
const FirstPhoto = await photo.getNthPhotoUid("image", 0);
@ -339,7 +339,7 @@ test.meta("testID", "admin-role-010")("Edit dialog is not read only for admin",
});
test.meta("testID", "admin-role-011")("Edit labels functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("labels");
const FirstLabel = await label.getNthLabeltUid(0);
await label.checkHoverActionState("uid", FirstLabel, "favorite", false);
@ -357,7 +357,7 @@ test.meta("testID", "admin-role-011")("Edit labels functionality", async (t) =>
});
test.meta("testID", "admin-role-012")("Edit album functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("albums");
await toolbar.checkToolbarActionAvailability("add", true);
await t.expect(Selector("a.is-album button.action-share").visible).ok();
@ -370,7 +370,7 @@ test.meta("testID", "admin-role-012")("Edit album functionality", async (t) => {
await contextmenu.checkContextMenuActionAvailability("delete", true);
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.ok()
.click(Selector("button.action-cancel"));
@ -399,7 +399,7 @@ test.meta("testID", "admin-role-012")("Edit album functionality", async (t) => {
});
test.meta("testID", "admin-role-013")("Edit moment functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("moments");
await t.expect(Selector("a.is-album button.action-share").visible).ok();
const FirstAlbum = await album.getNthAlbumUid("moment", 0);
@ -412,7 +412,7 @@ test.meta("testID", "admin-role-013")("Edit moment functionality", async (t) =>
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.ok()
.click(Selector("button.action-cancel"));
@ -441,7 +441,7 @@ test.meta("testID", "admin-role-013")("Edit moment functionality", async (t) =>
});
test.meta("testID", "admin-role-014")("Edit state functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("states");
await t.expect(Selector("a.is-album button.action-share").visible).ok();
const FirstAlbum = await album.getNthAlbumUid("state", 0);
@ -453,7 +453,7 @@ test.meta("testID", "admin-role-014")("Edit state functionality", async (t) => {
await contextmenu.checkContextMenuActionAvailability("delete", true);
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.ok()
.click(Selector("button.action-cancel"));
@ -482,7 +482,7 @@ test.meta("testID", "admin-role-014")("Edit state functionality", async (t) => {
});
test.meta("testID", "admin-role-015")("Edit calendar functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("calendar");
await t.expect(Selector("a.is-album button.action-share").visible).ok();
const FirstAlbum = await album.getNthAlbumUid("month", 0);
@ -494,7 +494,7 @@ test.meta("testID", "admin-role-015")("Edit calendar functionality", async (t) =
await contextmenu.checkContextMenuActionAvailability("delete", false);
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.ok()
.click(Selector("button.action-cancel"));
@ -522,7 +522,7 @@ test.meta("testID", "admin-role-015")("Edit calendar functionality", async (t) =
});
test.meta("testID", "admin-role-016")("Edit folder functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("folders");
await t.expect(Selector("a.is-album button.action-share").visible).ok();
const FirstAlbum = await album.getNthAlbumUid("folder", 0);
@ -534,7 +534,7 @@ test.meta("testID", "admin-role-016")("Edit folder functionality", async (t) =>
await contextmenu.checkContextMenuActionAvailability("delete", false);
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.ok()
.click(Selector("button.action-cancel"));
@ -562,15 +562,15 @@ test.meta("testID", "admin-role-016")("Edit folder functionality", async (t) =>
});
test.meta("testID", "admin-role-017")("Edit people functionality", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await menu.openPage("people");
await toolbar.checkToolbarActionAvailability("show-hidden", true);
await t.expect(Selector("#tab-people_faces > a").exists).ok();
await subject.checkSubjectVisibility("Otto Visible", true);
await subject.checkSubjectVisibility("Monika Hide", false);
await subject.checkSubjectVisibility("name", "Otto Visible", true);
await subject.checkSubjectVisibility("name", "Monika Hide", false);
await toolbar.triggerToolbarAction("show-hidden", "");
await subject.checkSubjectVisibility("Otto Visible", true);
await subject.checkSubjectVisibility("Monika Hide", true);
await subject.checkSubjectVisibility("name", "Otto Visible", true);
await subject.checkSubjectVisibility("name", "Monika Hide", true);
await t
.click(Selector("a div.v-card__title").nth(0))
.expect(Selector("div.input-rename input").visible)

View file

@ -1,10 +1,13 @@
import { Selector } from "testcafe";
import testcafeconfig from "../acceptance/testcafeconfig";
import Page from "../acceptance/page-model";
import NewPage from "../page-model/page";
import Menu from "../page-model/menu";
fixture`Test authentication`.page`${testcafeconfig.url}`;
const page = new Page();
const newpage = new NewPage();
const menu = new Menu();
test.meta("testID", "authentication-000")(
"Time to start instance (will be marked as unstable)",
async (t) => {
@ -34,7 +37,7 @@ test.meta("testID", "authentication-001")("Login and Logout", async (t) => {
.click(Selector(".action-confirm"))
.expect(Selector(".input-search input", { timeout: 7000 }).visible)
.ok();
await page.openNav();
await menu.openNav();
await t
.click(Selector('div[title="Logout"]'))
.expect(Selector(".input-name input").visible)
@ -52,14 +55,14 @@ test.meta("testID", "authentication-001")("Login and Logout", async (t) => {
//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 newpage.login("wrong", "photoprism");
await t
.navigateTo("/favorites")
.expect(Selector(".input-name input").visible)
.ok()
.expect(Selector(".input-search input").visible)
.notOk();
await page.login("admin", "abcdefg");
await newpage.login("admin", "abcdefg");
await t
.navigateTo("/archive")
.expect(Selector(".input-name input").visible)
@ -69,7 +72,7 @@ test.meta("testID", "authentication-002")("Login with wrong credentials", async
});
test.meta("testID", "authentication-003")("Change password", async (t) => {
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await t.expect(Selector(".input-search input").visible).ok();
await page.openNav();
await t
@ -95,14 +98,14 @@ test.meta("testID", "authentication-003")("Change password", async (t) => {
if (t.browser.platform === "mobile") {
await t.wait(7000);
}
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await t
.navigateTo("/archive")
.expect(Selector(".input-name input", { timeout: 7000 }).visible)
.ok()
.expect(Selector(".input-search input").visible)
.notOk();
await page.login("admin", "photoprism123");
await newpage.login("admin", "photoprism123");
await t.expect(Selector(".input-search input").visible).ok();
await page.openNav();
await t
@ -113,7 +116,7 @@ test.meta("testID", "authentication-003")("Change password", async (t) => {
.click(".action-confirm");
await page.openNav();
await t.click(Selector('div[title="Logout"]'));
await page.login("admin", "photoprism");
await newpage.login("admin", "photoprism");
await t.expect(Selector(".input-search input").visible).ok();
await page.openNav();
await t.click(Selector('div[title="Logout"]'));

View file

@ -1,6 +1,5 @@
import { Selector } from "testcafe";
import testcafeconfig from "../acceptance/testcafeconfig";
import Page from "../acceptance/page-model";
import { ClientFunction } from "testcafe";
import Menu from "../page-model/menu";
import Photo from "../page-model/photo";
@ -12,10 +11,10 @@ import Album from "../page-model/album";
import Subject from "../page-model/subject";
import PhotoViewer from "../page-model/photoviewer";
import PhotoEdit from "../page-model/photo-edit";
import NewPage from "../page-model/page";
fixture`Test member role`.page`${testcafeconfig.url}`;
const page = new Page();
const menu = new Menu();
const photo = new Photo();
const toolbar = new Toolbar();
@ -26,10 +25,11 @@ const album = new Album();
const subject = new Subject();
const photoviewer = new PhotoViewer();
const photoedit = new PhotoEdit();
const newpage = new NewPage();
const getLocation = ClientFunction(() => document.location.href);
test.meta("testID", "member-role-001")("No access to settings", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.checkMenuItemAvailability("settings", false);
await t.navigateTo("/settings");
await t
@ -55,7 +55,7 @@ test.meta("testID", "member-role-001")("No access to settings", async (t) => {
});
test.meta("testID", "member-role-002")("No access to archive", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
@ -71,7 +71,7 @@ test.meta("testID", "member-role-002")("No access to archive", async (t) => {
});
test.meta("testID", "member-role-003")("No access to review", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
@ -87,7 +87,7 @@ test.meta("testID", "member-role-003")("No access to review", async (t) => {
});
test.meta("testID", "member-role-004")("No access to private", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
@ -103,7 +103,7 @@ test.meta("testID", "member-role-004")("No access to private", async (t) => {
});
test.meta("testID", "member-role-005")("No access to library", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
@ -151,7 +151,7 @@ test.meta("testID", "member-role-005")("No access to library", async (t) => {
test.meta("testID", "member-role-006")(
"No private/archived photos in search results",
async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
if (t.browser.platform === "mobile") {
await t.wait(5000);
}
@ -208,7 +208,7 @@ test.meta("testID", "member-role-006")(
);
test.meta("testID", "member-role-007")("No upload functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await toolbar.checkToolbarActionAvailability("upload", false);
await menu.openPage("albums");
await toolbar.checkToolbarActionAvailability("upload", false);
@ -239,7 +239,7 @@ test.meta("testID", "member-role-007")("No upload functionality", async (t) => {
});
test.meta("testID", "member-role-008")("Member cannot like photos", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await t.wait(5000);
const FirstPhoto = await photo.getNthPhotoUid("image", 0);
const SecondPhoto = await photo.getNthPhotoUid("all", 1);
@ -281,7 +281,7 @@ test.meta("testID", "member-role-008")("Member cannot like photos", async (t) =>
await photoviews.checkHoverActionState("uid", FirstPhoto, "favorite", false);
await toolbar.setFilter("view", "List");
await photoviews.checkListViewActionAvailability("like", true);
await photoviews.triggerListViewActions(0, "like");
await photoviews.triggerListViewActions("nth", 0, "like");
await toolbar.setFilter("view", "Cards");
await photoviews.checkHoverActionState("uid", FirstPhoto, "favorite", false);
await menu.openPage("albums");
@ -296,7 +296,7 @@ test.meta("testID", "member-role-008")("Member cannot like photos", async (t) =>
test.meta("testID", "member-role-009")(
"Member cannot private, archive, share, add/remove to album",
async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
const FirstPhoto = await photo.getNthPhotoUid("image", 0);
await photo.selectPhotoFromUID(FirstPhoto);
await contextmenu.checkContextMenuActionAvailability("private", false);
@ -326,7 +326,7 @@ test.meta("testID", "member-role-009")(
);
test.meta("testID", "member-role-010")("Member cannot approve low quality photos", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await toolbar.search('quality:0 name:"photos-013_1"');
await photo.toggleSelectNthPhoto(0, "all");
await contextmenu.triggerContextMenuAction("edit", "", "");
@ -334,7 +334,7 @@ test.meta("testID", "member-role-010")("Member cannot approve low quality photos
});
test.meta("testID", "member-role-011")("Edit dialog is read only for member", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await toolbar.search("faces:new");
//details
const FirstPhoto = await photo.getNthPhotoUid("image", 0);
@ -429,7 +429,7 @@ test.meta("testID", "member-role-011")("Edit dialog is read only for member", as
});
test.meta("testID", "member-role-012")("No edit album functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("albums");
await toolbar.checkToolbarActionAvailability("add", false);
await t.expect(Selector("a.is-album button.action-share").visible).notOk();
@ -443,7 +443,7 @@ test.meta("testID", "member-role-012")("No edit album functionality", async (t)
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.notOk();
if (await Selector(`a.uid-${FirstAlbum}`).hasClass("is-favorite")) {
@ -467,7 +467,7 @@ test.meta("testID", "member-role-012")("No edit album functionality", async (t)
});
test.meta("testID", "member-role-013")("No edit moment functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("moments");
await t.expect(Selector("a.is-album button.action-share").visible).notOk();
const FirstAlbum = await album.getNthAlbumUid("all", 0);
@ -480,7 +480,7 @@ test.meta("testID", "member-role-013")("No edit moment functionality", async (t)
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.notOk();
if (await Selector(`a.uid-${FirstAlbum}`).hasClass("is-favorite")) {
@ -504,7 +504,7 @@ test.meta("testID", "member-role-013")("No edit moment functionality", async (t)
});
test.meta("testID", "member-role-014")("No edit state functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("states");
await t.expect(Selector("a.is-album button.action-share").visible).notOk();
const FirstAlbum = await album.getNthAlbumUid("all", 0);
@ -517,7 +517,7 @@ test.meta("testID", "member-role-014")("No edit state functionality", async (t)
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.notOk();
if (await Selector(`a.uid-${FirstAlbum}`).hasClass("is-favorite")) {
@ -541,7 +541,7 @@ test.meta("testID", "member-role-014")("No edit state functionality", async (t)
});
test.meta("testID", "member-role-015")("No edit calendar functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("calendar");
await t.expect(Selector("a.is-album button.action-share").visible).notOk();
const FirstAlbum = await album.getNthAlbumUid("all", 0);
@ -554,7 +554,7 @@ test.meta("testID", "member-role-015")("No edit calendar functionality", async (
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.notOk();
if (await Selector(`a.uid-${FirstAlbum}`).hasClass("is-favorite")) {
@ -578,7 +578,7 @@ test.meta("testID", "member-role-015")("No edit calendar functionality", async (
});
test.meta("testID", "member-role-016")("No edit folder functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("folders");
await t.expect(Selector("a.is-album button.action-share").visible).notOk();
const FirstAlbum = await album.getNthAlbumUid("all", 0);
@ -591,7 +591,7 @@ test.meta("testID", "member-role-016")("No edit folder functionality", async (t)
await contextmenu.clearSelection();
await t
.click(Selector("button.action-title-edit"))
.click(newpage.cardTitle)
.expect(Selector(".input-description textarea").visible)
.notOk();
if (await Selector(`a.uid-${FirstAlbum}`).hasClass("is-favorite")) {
@ -615,7 +615,7 @@ test.meta("testID", "member-role-016")("No edit folder functionality", async (t)
});
test.meta("testID", "member-role-017")("No edit labels functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("labels");
const FirstLabel = await label.getNthLabeltUid(0);
await label.checkHoverActionState("uid", FirstLabel, "favorite", false);
@ -631,7 +631,7 @@ test.meta("testID", "member-role-017")("No edit labels functionality", async (t)
});
test.meta("testID", "member-role-018")("No unstack, change primary actions", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await toolbar.search("stack:true");
//details
const FirstPhoto = await photo.getNthPhotoUid("image", 0);
@ -657,12 +657,12 @@ test.meta("testID", "member-role-018")("No unstack, change primary actions", asy
});
test.meta("testID", "member-role-019")("No edit people functionality", async (t) => {
await page.login("member", "passwdmember");
await newpage.login("member", "passwdmember");
await menu.openPage("people");
await toolbar.checkToolbarActionAvailability("show-hidden", false);
await toolbar.checkToolbarActionAvailability("upload", false);
await subject.checkSubjectVisibility("Otto Visible", true);
await subject.checkSubjectVisibility("Monika Hide", false);
await subject.checkSubjectVisibility("name", "Otto Visible", true);
await subject.checkSubjectVisibility("name", "Monika Hide", false);
await t
.expect(Selector("#tab-people_faces > a").exists)
.notOk()

View file

@ -1,194 +1,162 @@
import { Selector } from "testcafe";
import { Role } from "testcafe";
import testcafeconfig from "../acceptance/testcafeconfig";
import Page from "../acceptance/page-model";
import NewPage from "../page-model/page";
import Menu from "../page-model/menu";
import Toolbar from "../page-model/toolbar";
import ContextMenu from "../page-model/context-menu";
import PhotoViews from "../page-model/photo-views";
import Album from "../page-model/album";
import PhotoViewer from "../page-model/photoviewer";
import ShareDialog from "../page-model/dialog-share";
fixture`Test link sharing`.page`${testcafeconfig.url}`;
fixture`Test link sharing`.page`${testcafeconfig.url}`.skip("Urls are not working anymore");
const page = new Page();
const newpage = new NewPage();
const menu = new Menu();
const toolbar = new Toolbar();
const contextmenu = new ContextMenu();
const photoviews = new PhotoViews();
const album = new Album();
const photoviewer = new PhotoViewer();
const sharedialog = new ShareDialog();
test.meta("testID", "authentication-000")(
//TODO merge with other sharing test
test.skip.meta("testID", "authentication-000")(
"Time to start instance (will be marked as unstable)",
async (t) => {
await t.wait(5000);
}
);
test.meta("testID", "sharing-001")("View shared albums", async (t) => {
await page.login("admin", "photoprism");
await page.openNav();
await t.click(Selector(".nav-albums"));
const FirstAlbum = await Selector("a.is-album").nth(0).getAttribute("data-uid");
await page.selectFromUID(FirstAlbum);
const clipboardCount = await Selector("span.count-clipboard");
test.skip.meta("testID", "sharing-001")("View shared albums", async (t) => {
await newpage.login("admin", "photoprism");
await menu.openPage("albums");
const FirstAlbum = await album.getNthAlbumUid("all", 0);
await album.triggerHoverAction("uid", FirstAlbum, "select");
await contextmenu.checkContextMenuCount("1");
await contextmenu.triggerContextMenuAction("share", "", "");
await t.click(sharedialog.expandLink.nth(0));
await t
.expect(clipboardCount.textContent)
.eql("1")
.click(Selector("button.action-menu"))
.click(Selector("button.action-share"))
.click(Selector("div.v-expansion-panel__header__icon").nth(0));
await t
.typeText(Selector(".input-secret input"), "secretForTesting", { replace: true })
.click(Selector(".input-expires input"))
.typeText(sharedialog.linkSecretInput, "secretForTesting", { replace: true })
.click(sharedialog.linkExpireInput)
.click(Selector("div").withText("After 1 day").parent('div[role="listitem"]'))
.click(Selector("button.action-save"));
const Url = await Selector("div.input-url input").value;
.click(sharedialog.dialogSave);
const Url = await sharedialog.linkUrl.value;
const Expire = await Selector("div.v-select__selections").innerText;
await t.expect(Url).contains("secretfortesting").expect(Expire).contains("After 1 day");
let url = Url.replace("2342", "2343");
await t.click(Selector("button.action-close"));
await page.clearSelection();
await t.click(sharedialog.dialogClose);
await contextmenu.clearSelection();
await t.click(Selector(".nav-folders"));
const FirstFolder = await Selector("a.is-album").nth(0).getAttribute("data-uid");
await page.selectFromUID(FirstFolder);
const FirstFolder = await album.getNthAlbumUid("all", 0);
await album.triggerHoverAction("uid", FirstFolder, "select");
await contextmenu.checkContextMenuCount("1");
await contextmenu.triggerContextMenuAction("share", "", "");
await t.click(sharedialog.expandLink.nth(0));
await t
.click(Selector("button.action-menu"))
.click(Selector("button.action-share"))
.click(Selector("div.v-expansion-panel__header__icon").nth(0));
await t
.typeText(Selector(".input-secret input"), "secretForTesting", { replace: true })
.click(Selector(".input-expires input"))
.typeText(sharedialog.linkSecretInput, "secretForTesting", { replace: true })
.click(sharedialog.linkExpireInput)
.click(Selector("div").withText("After 1 day").parent('div[role="listitem"]'))
.click(Selector("button.action-save"))
.click(Selector("button.action-close"));
await page.clearSelection();
.click(sharedialog.dialogSave)
.click(sharedialog.dialogSave);
await contextmenu.clearSelection();
await t.navigateTo(url);
await t
.expect(Selector("div.v-toolbar__title").withText("Christmas").visible)
.expect(toolbar.toolbarTitle.withText("Christmas").visible)
.ok()
.click(Selector("button").withText("@photoprism_app"))
.expect(Selector("div.v-toolbar__title").withText("Albums").visible)
.expect(toolbar.toolbarTitle.withText("Albums").visible)
.ok();
const countAlbums = await Selector("a.is-album").count;
const countAlbums = await album.getAlbumCount("all");
await t.expect(countAlbums).gte(40).useRole(Role.anonymous());
await t.navigateTo(url);
await t
.expect(Selector("div.v-toolbar__title").withText("Christmas").visible)
.expect(toolbar.toolbarTitle.withText("Christmas").visible)
.ok()
.click(Selector("button").withText("@photoprism_app"))
.expect(Selector("div.v-toolbar__title").withText("Albums").visible)
.expect(toolbar.toolbarTitle.withText("Albums").visible)
.ok();
const countAlbumsAnonymous = await Selector("a.is-album").count;
await t.expect(countAlbumsAnonymous).eql(2);
await t.navigateTo("http://localhost:2343/browse");
await page.login("admin", "photoprism");
await page.openNav();
await newpage.login("admin", "photoprism");
await menu.openPage("albums");
await album.openAlbumWithUid(FirstAlbum);
await toolbar.triggerToolbarAction("share", "");
await t
.click(Selector(".nav-albums"))
.click(Selector("a.is-album").withAttribute("data-uid", FirstAlbum))
.click(Selector("button.action-share"))
.click(Selector("div.v-expansion-panel__header__icon").nth(0))
.click(Selector(".action-delete"))
.click(sharedialog.expandLink.nth(0))
.click(sharedialog.deleteLink)
.useRole(Role.anonymous())
.expect(Selector(".input-name input").visible)
.ok();
await t.navigateTo("http://localhost:2343/s/secretfortesting");
await t.expect(Selector("div.v-toolbar__title").withText("Albums").visible).ok();
const countAlbumsAnonymousAfterDelete = await Selector("a.is-album").count;
await t.expect(toolbar.toolbarTitle.withText("Albums").visible).ok();
const countAlbumsAnonymousAfterDelete = await album.getAlbumCount("all");
await t.expect(countAlbumsAnonymousAfterDelete).eql(1);
await t.navigateTo("http://localhost:2343/browse");
await page.login("admin", "photoprism");
await page.openNav();
await newpage.login("admin", "photoprism");
await menu.openPage("folders");
await album.openAlbumWithUid(FirstFolder);
await toolbar.triggerToolbarAction("share", "");
await t
.click(Selector(".nav-folders"))
.click(Selector("a.is-album").withAttribute("data-uid", FirstFolder))
.click(Selector("button.action-share"))
.click(Selector("div.v-expansion-panel__header__icon").nth(0))
.click(Selector(".action-delete"))
.click(sharedialog.expandLink.nth(0))
.click(sharedialog.deleteLink)
.useRole(Role.anonymous())
.expect(Selector(".input-name input").visible)
.ok();
await t.navigateTo("http://localhost:2343/s/secretfortesting");
await t
.expect(Selector("div.v-toolbar__title").withText("Christmas").visible)
.expect(toolbar.toolbarTitle.withText("Christmas").visible)
.notOk()
.expect(Selector("div.v-toolbar__title").withText("Albums").visible)
.expect(toolbar.toolbarTitle.withText("Albums").visible)
.notOk()
.expect(Selector(".input-name input").visible)
.ok();
});
test.meta("testID", "sharing-002")("Verify anonymous user has limited options", async (t) => {
test.skip.meta("testID", "sharing-002")("Verify anonymous user has limited options", async (t) => {
await t.navigateTo("http://localhost:2343/s/jxoux5ub1e/british-columbia-canada");
// check album toolbar
await t.expect(toolbar.toolbarTitle.withText("British Columbia").visible).ok();
await toolbar.checkToolbarActionAvailability("edit", false);
await toolbar.checkToolbarActionAvailability("share", false);
await toolbar.checkToolbarActionAvailability("upload", false);
await toolbar.checkToolbarActionAvailability("reload", true);
await toolbar.checkToolbarActionAvailability("download", true);
await photoviews.triggerHoverAction("nth", 0, "select");
await contextmenu.checkContextMenuActionAvailability("download", true);
await contextmenu.checkContextMenuActionAvailability("archive", false);
await contextmenu.checkContextMenuActionAvailability("private", false);
await contextmenu.checkContextMenuActionAvailability("edit", false);
await contextmenu.checkContextMenuActionAvailability("share", false);
await contextmenu.checkContextMenuActionAvailability("album", false);
await contextmenu.clearSelection();
await t.expect(newpage.cardTitle.visible).notOk();
await photoviewer.openPhotoViewer("nth", 0);
await photoviewer.checkPhotoViewerActionAvailability("download", true);
await photoviewer.checkPhotoViewerActionAvailability("select", true);
await photoviewer.checkPhotoViewerActionAvailability("fullscreen", true);
await photoviewer.checkPhotoViewerActionAvailability("slideshow", true);
await photoviewer.checkPhotoViewerActionAvailability("like", false);
await photoviewer.checkPhotoViewerActionAvailability("edit", false);
await photoviewer.triggerPhotoViewerAction("close");
await photoviews.checkHoverActionAvailability("nth", 0, "favorite", false);
await photoviews.checkHoverActionAvailability("nth", 0, "select", true);
await toolbar.triggerToolbarAction("view-list", "");
await t
.expect(Selector("div.v-toolbar__title").withText("British Columbia").visible)
.ok()
.expect(Selector("button.action-edit").visible)
.expect(Selector(`td button.input-private`).visible)
.notOk()
.expect(Selector("button.action-share").visible)
.expect(Selector(`td button.input-favorite`).visible)
.notOk()
.expect(Selector("button.action-upload").visible)
.notOk()
.expect(Selector("button.action-reload").visible)
.ok()
.expect(Selector("button.action-download").visible)
.ok();
//check photo context menu
await page.toggleSelectNthPhoto(0);
await t
.click("button.action-menu")
.expect(Selector("div.v-speed-dial__list button.action-download").visible)
.ok()
.expect(Selector("div.v-speed-dial__list button.action-archive").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-album").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-private").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-edit").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-share").visible)
.notOk();
await page.clearSelection();
await t.expect(Selector("button.action-title-edit").visible).notOk();
//check fullscreen actions
await t
.click(Selector('h3[title="Cape / Bowen Island / 2019"]'))
.expect(Selector("#photo-viewer").visible)
.ok()
.expect(Selector("img.pswp__img").visible)
.ok()
.expect(Selector("button.action-select").visible)
.ok()
.expect(Selector('button[title="Start/Stop Slideshow"]').visible)
.ok()
.expect(Selector('button[title="Fullscreen"]').visible)
.ok()
.expect(Selector('button[title="Start/Stop Slideshow"]').visible)
.ok()
.expect(Selector('button[title="Download"]').visible)
.ok()
.expect(Selector('button[title="Like"]').visible)
.notOk()
.expect(Selector('button[title="Edit"]').visible)
.notOk()
.click(Selector('button[title="Close"]'))
//check hover like actions card and mosaic
.expect(Selector("button.input-favorite").visible)
.notOk()
//check list view actions
//hover on mosaic
//action-menu albums
.click(Selector("button").withText("@photoprism_app"))
.expect(Selector("div.v-toolbar__title").withText("Albums").visible)
.expect(toolbar.toolbarTitle.withText("Albums").visible)
.ok();
//album edit dialog
const AlbumUid = await Selector("a.is-album", { timeout: 55000 }).nth(0).getAttribute("data-uid");
await page.selectFromUID(AlbumUid);
await t
.click(Selector("button.action-menu"))
.expect(Selector("div.v-speed-dial__list button.action-download").visible)
.ok()
.expect(Selector("div.v-speed-dial__list button.action-delete").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-album").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-edit").visible)
.notOk()
.expect(Selector("div.v-speed-dial__list button.action-share").visible)
.notOk();
await page.clearSelection();
await t.expect(Selector("button.action-title-edit").visible).notOk();
//TODO control + page model
const AlbumUid = await album.getNthAlbumUid("all", 0);
await album.triggerHoverAction("uid", AlbumUid, "select");
await contextmenu.checkContextMenuActionAvailability("download", true);
await contextmenu.checkContextMenuActionAvailability("delete", false);
await contextmenu.checkContextMenuActionAvailability("album", false);
await contextmenu.checkContextMenuActionAvailability("edit", false);
await contextmenu.checkContextMenuActionAvailability("share", false);
await contextmenu.clearSelection();
});