Bläddra i källkod

Users: Add acceptance tests for admin role #98

theresa 3 år sedan
förälder
incheckning
dd600aabd5
1 ändrade filer med 213 tillägg och 0 borttagningar
  1. 213 0
      frontend/tests/acceptance-private/admin-role.js

+ 213 - 0
frontend/tests/acceptance-private/admin-role.js

@@ -0,0 +1,213 @@
+import { Selector } from "testcafe";
+import testcafeconfig from "../acceptance/testcafeconfig";
+import Page from "../acceptance/page-model";
+
+fixture`Test admin role`.page`${testcafeconfig.url}`;
+
+const page = new Page();
+test.meta("testID", "authentication-000")(
+  "Time to start instance (will be marked as unstable)",
+  async (t) => {
+    await t.wait(5000);
+  }
+);
+
+test.meta("testID", "admin-role-001")("Access to settings", async (t) => {
+  await page.login("admin", "photoprism");
+  await page.openNav();
+  await t.expect(Selector(".nav-settings").visible).ok();
+  await t
+    .click(Selector(".nav-settings"))
+    .expect(Selector(".input-language input", { timeout: 8000 }).visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .click(Selector("#tab-settings-library"))
+    .expect(Selector("form.p-form-settings").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .click(Selector("#tab-settings-advanced"))
+    .expect(Selector("label").withText("Read-Only Mode").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .click(Selector("#tab-settings-sync"))
+    .expect(Selector("div.p-accounts-list").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk();
+});
+
+test.meta("testID", "admin-role-002")("Access to archive", async (t) => {
+  await page.login("admin", "photoprism");
+  const PhotoCountBrowse = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await page.openNav();
+  await t.click(Selector(".nav-browse + div")).expect(Selector(".nav-archive").visible).ok();
+  await t
+    .click(Selector(".nav-archive"))
+    .expect(Selector("div.is-photo").withAttribute("data-uid", "pqnahct2mvee8sr4").visible)
+    .ok();
+  const PhotoCountArchive = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t.expect(PhotoCountBrowse).gte(PhotoCountArchive);
+});
+
+test.meta("testID", "admin-role-003")("Access to review", async (t) => {
+  await page.login("admin", "photoprism");
+  const PhotoCountBrowse = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await page.openNav();
+  await t.click(Selector(".nav-browse + div")).expect(Selector(".nav-review").visible).ok();
+  await t
+    .click(Selector(".nav-review"))
+    .expect(Selector("div.is-photo").withAttribute("data-uid", "pqzuein2pdcg1kc7").visible)
+    .ok();
+  const PhotoCountReview = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t.expect(PhotoCountBrowse).gte(PhotoCountReview);
+});
+
+test.meta("testID", "admin-role-004")("Access to private", async (t) => {
+  await page.login("admin", "photoprism");
+  const PhotoCountBrowse = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await page.openNav();
+  await t.expect(Selector(".nav-private").visible).ok();
+  await t
+    .click(Selector(".nav-private"))
+    .expect(Selector("div.is-photo").withAttribute("data-uid", "pqmxlquf9tbc8mk2").visible)
+    .ok();
+  const PhotoCountPrivate = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t.expect(PhotoCountBrowse).gte(PhotoCountPrivate);
+});
+
+test.meta("testID", "admin-role-005")("Access to library", async (t) => {
+  await page.login("admin", "photoprism");
+  const PhotoCountBrowse = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await page.openNav();
+  await t.expect(Selector(".nav-library").visible).ok();
+  await t
+    .click(Selector(".nav-library"))
+    .expect(Selector(".input-index-folder input").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .click(Selector("#tab-library-import"))
+    .expect(Selector(".input-import-folder input").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .click(Selector("#tab-library-logs"))
+    .expect(Selector("p.p-log-debug").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .click(Selector(".nav-library + div"))
+    .expect(Selector(".nav-originals").visible)
+    .ok()
+    .click(Selector(".nav-originals"))
+    .expect(Selector("div.p-page-files").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk()
+    .expect(Selector(".nav-hidden").visible)
+    .ok()
+    .click(Selector(".nav-hidden"));
+  const PhotoCountHidden = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t
+    .expect(PhotoCountBrowse)
+    .gte(PhotoCountHidden)
+    .expect(Selector(".nav-errors").visible)
+    .ok()
+    .click(Selector(".nav-errors"))
+    .expect(Selector("div.p-page-errors").visible)
+    .ok()
+    .expect(Selector("div.p-page-photos").visible)
+    .notOk();
+});
+
+test.meta("testID", "admin-role-006")("private/archived photos in search results", async (t) => {
+  await page.login("admin", "photoprism");
+  const PhotoCountBrowse = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await page.search("private:true");
+  const PhotoCountPrivate = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t.expect(PhotoCountPrivate).eql(2);
+  await t
+    .expect(Selector("div.is-photo").withAttribute("data-uid", "pqmxlquf9tbc8mk2").visible)
+    .ok();
+  await page.search("archived:true");
+  const PhotoCountArchive = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t.expect(PhotoCountArchive).eql(3);
+  await t
+    .expect(Selector("div.is-photo").withAttribute("data-uid", "pqnahct2mvee8sr4").visible)
+    .ok();
+  await page.search("quality:0");
+  const PhotoCountReview = await Selector("div.is-photo", { timeout: 5000 }).count;
+  await t.expect(PhotoCountReview).gte(PhotoCountBrowse);
+  await t
+    .expect(Selector("div.is-photo").withAttribute("data-uid", "pqzuein2pdcg1kc7").visible)
+    .ok();
+});
+
+test.meta("testID", "admin-role-007")("Upload functionality", async (t) => {
+  await page.login("admin", "photoprism");
+  await t
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector(".nav-albums"))
+    .expect(Selector("a.is-album").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector("a.is-album").nth(0))
+    .expect(Selector("div.is-photo").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector(".nav-video"))
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector(".nav-favorites"))
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector(".nav-moments"))
+    .expect(Selector("a.is-album").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector("a.is-album").nth(0))
+    .expect(Selector("div.is-photo").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector(".nav-calendar"))
+    .expect(Selector("a.is-album").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector("a.is-album").nth(0))
+    .expect(Selector("div.is-photo").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok();
+  await page.openNav();
+  await t
+    .click(Selector(".nav-places + div"))
+    .click(Selector(".nav-states"))
+    .expect(Selector("a.is-album").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector("a.is-album").nth(0))
+    .expect(Selector("div.is-photo").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector(".nav-folders"))
+    .expect(Selector("a.is-album").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok()
+    .click(Selector("a.is-album").nth(0))
+    .expect(Selector("div.is-photo").visible)
+    .ok()
+    .expect(Selector("button.action-upload").visible)
+    .ok();
+});