photoprism/frontend/tests/acceptance/photos-upload-delete.js

232 lines
9.3 KiB
JavaScript

import { Selector } from "testcafe";
import testcafeconfig from "./testcafeconfig";
import Page from "./page-model";
import { ClientFunction } from "testcafe";
import fs from "fs";
fixture`Test photos upload and delete`.page`${testcafeconfig.url}`;
const page = new Page();
test.meta("testID", "photos-upload-delete-001")("Upload + Delete jpg/json", async (t) => {
await t.expect(fs.existsSync("../storage/acceptance/originals/2020/10")).notOk();
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("digikam");
const PhotoCount = await Selector("div.is-photo").count;
await t
.expect(PhotoCount)
.eql(0)
.click(Selector(".action-upload"))
.setFilesToUpload(Selector(".input-upload"), [
"./upload-files/digikam.jpg",
"./upload-files/digikam.json",
])
.wait(15000);
const PhotoCountAfterUpload = await Selector("div.is-photo").count;
await t.expect(PhotoCountAfterUpload).eql(1);
const UploadedPhoto = await Selector("div.is-photo").nth(0).getAttribute("data-uid");
await t.navigateTo("/library/files/2020/10");
const FileCount = await Selector("div.is-file").count;
await t.expect(FileCount).eql(2);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("digikam");
await page.selectPhotoFromUID(UploadedPhoto);
await page.editSelected();
await t
.click("#tab-files")
.expect(Selector("div.caption").withText(".json").visible)
.ok()
.expect(Selector("div.caption").withText(".jpg").visible)
.ok()
.click(Selector(".action-close"));
await page.clearSelection();
await t.expect(fs.existsSync("../storage/acceptance/originals/2020/10")).ok();
const originalsLength = fs.readdirSync("../storage/acceptance/originals/2020/10").length;
await t.expect(originalsLength).eql(2);
await page.deletePhotoFromUID(UploadedPhoto);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("digikam");
await t
.expect(Selector("div").withAttribute("data-uid", UploadedPhoto).exists, { timeout: 5000 })
.notOk()
.navigateTo("/library/files/2020/10");
const FileCountAfterDelete = await Selector("div.is-file").count;
await t.expect(FileCountAfterDelete).eql(0);
const originalsLengthAfterDelete = fs.readdirSync("../storage/acceptance/originals/2020/10")
.length;
await t.expect(originalsLengthAfterDelete).eql(0);
});
test.meta("testID", "photos-upload-delete-002")("Upload + Delete video", async (t) => {
await t.expect(fs.existsSync("../storage/acceptance/originals/2020/06")).notOk();
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("korn");
const PhotoCount = await Selector("div.is-photo").count;
await t
.expect(PhotoCount)
.eql(0)
.click(Selector(".action-upload"))
.setFilesToUpload(Selector(".input-upload"), [
"./upload-files/korn.mp4",
])
.wait(15000);
const PhotoCountAfterUpload = await Selector("div.is-photo").count;
await t.expect(PhotoCountAfterUpload).eql(1);
const UploadedPhoto = await Selector("div.is-photo").nth(0).getAttribute("data-uid");
await t.navigateTo("/library/files/2020/06");
const FileCount = await Selector("div.is-file").count;
await t.expect(FileCount).eql(1);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("korn");
await page.selectPhotoFromUID(UploadedPhoto);
await page.editSelected();
await t
.click("#tab-files")
.expect(Selector("div.caption").withText(".mp4").visible)
.ok()
.expect(Selector("div.caption").withText(".jpg").visible)
.ok()
.click(Selector(".action-close"));
await page.clearSelection();
await t.expect(fs.existsSync("../storage/acceptance/originals/2020/06")).ok();
const originalsLength = fs.readdirSync("../storage/acceptance/originals/2020/06").length;
await t.expect(originalsLength).eql(1);
const sidecarLength = fs.readdirSync("../storage/acceptance/originals/2020/06").length;
await t.expect(sidecarLength).eql(1);
await page.deletePhotoFromUID(UploadedPhoto);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("korn");
await t
.expect(Selector("div").withAttribute("data-uid", UploadedPhoto).exists, { timeout: 5000 })
.notOk()
.navigateTo("/library/files/2020/06");
const FileCountAfterDelete = await Selector("div.is-file").count;
await t.expect(FileCountAfterDelete).eql(0);
const originalsLengthAfterDelete = fs.readdirSync("../storage/acceptance/originals/2020/06")
.length;
await t.expect(originalsLengthAfterDelete).eql(0);
const sidecarLengthAfterDelete = fs.readdirSync("../storage/acceptance/originals/2020/06").length;
await t.expect(sidecarLengthAfterDelete).eql(0);
});
test.meta("testID", "photos-upload-delete-003")("Upload to existing Album + Delete", async (t) => {
await page.openNav();
await t.click(Selector(".nav-albums"));
await page.search("Christmas");
const AlbumUid = await Selector("a.is-album").nth(0).getAttribute("data-uid");
await t.click(Selector("a.is-album").withAttribute("data-uid", AlbumUid));
const PhotoCount = await Selector("div.is-photo").count;
await t
.click(Selector(".action-upload"))
.click(Selector(".input-albums"))
.click(Selector("div.v-list__tile__title").withText("Christmas"))
.setFilesToUpload(Selector(".input-upload"), ["./upload-files/ladybug.jpg"])
.wait(15000);
const PhotoCountAfterUpload = await Selector("div.is-photo").count;
await t.expect(PhotoCountAfterUpload).eql(PhotoCount + 1);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("ladybug");
const UploadedPhoto = await Selector("div.is-photo").nth(0).getAttribute("data-uid");
await page.deletePhotoFromUID(UploadedPhoto);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("ladybug");
await t
.expect(Selector("div").withAttribute("data-uid", UploadedPhoto).exists, { timeout: 5000 })
.notOk();
await page.openNav();
await t.click(Selector(".nav-albums"));
await t
.click(Selector("a.is-album").withAttribute("data-uid", AlbumUid))
.expect(Selector("div").withAttribute("data-uid", UploadedPhoto).exists, { timeout: 5000 })
.notOk();
const PhotoCountAfterDelete = await Selector("div.is-photo").count;
await t.expect(PhotoCountAfterDelete).eql(PhotoCount);
});
test.meta("testID", "photos-upload-delete-004")("Upload jpg to new Album + Delete", async (t) => {
await page.openNav();
await t.click(Selector(".nav-albums"));
const AlbumCount = await Selector("a.is-album").count;
await t
.click(Selector(".action-upload", { timeout: 5000 }))
.click(Selector(".input-albums"))
.typeText(Selector(".input-albums input"), "NewCreatedAlbum")
.pressKey("enter")
.setFilesToUpload(Selector(".input-upload"), ["./upload-files/digikam.jpg"])
.wait(15000);
if (t.browser.platform === "mobile") {
await t.eval(() => location.reload());
} else {
await t.click(Selector("button.action-reload"));
}
const AlbumCountAfterUpload = await Selector("a.is-album").count;
await t.expect(AlbumCountAfterUpload).eql(AlbumCount + 1);
await page.search("NewCreatedAlbum");
await t.click(Selector("a.is-album").nth(0));
const PhotoCount = await Selector("div.is-photo").count;
await t.expect(PhotoCount).eql(1);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("digikam");
const UploadedPhoto = await Selector("div.is-photo").nth(0).getAttribute("data-uid");
await page.deletePhotoFromUID(UploadedPhoto);
await page.openNav();
await t.click(Selector(".nav-browse"));
await page.search("digikam");
await t
.expect(Selector("div").withAttribute("data-uid", UploadedPhoto).exists, { timeout: 5000 })
.notOk();
await page.openNav();
await t.click(Selector(".nav-albums"));
await page.search("NewCreatedAlbum");
await t
.click(Selector("a.is-album").nth(0))
.expect(Selector("div").withAttribute("data-uid", UploadedPhoto).exists, { timeout: 5000 })
.notOk();
const PhotoCountAfterDelete = await Selector("div.is-photo").count;
await t.expect(PhotoCountAfterDelete).eql(0);
await page.openNav();
await t.click(Selector(".nav-albums"));
await page.search("NewCreatedAlbum");
await t.hover(Selector("a.is-album").nth(0)).click(Selector("a.is-album .input-select").nth(0));
await page.deleteSelected();
});
test.meta("testID", "photos-upload-delete-005")("Try uploading nsfw file", async (t) => {
await page.openNav();
await t.click(Selector(".nav-browse"));
await t
.click(Selector(".action-upload"))
.setFilesToUpload(Selector(".input-upload"), ["./upload-files/hentai_2.jpg"])
.wait(15000);
await page.openNav();
await t
.click(Selector(".nav-library"))
.click(Selector("#tab-library-logs"))
.expect(Selector("p").withText("hentai_2.jpg might be offensive").visible)
.ok();
});
test.meta("testID", "photos-upload-delete-006")("Try uploading txt file", async (t) => {
await page.openNav();
await t.click(Selector(".nav-browse"));
await t
.click(Selector(".action-upload"))
.setFilesToUpload(Selector(".input-upload"), ["./upload-files/foo.txt"])
.wait(15000);
await page.openNav();
await t
.click(Selector(".nav-library"))
.click(Selector("#tab-library-logs"))
.expect(Selector("p").withText(" foo.txt is not a jpeg file").visible)
.ok();
});