photoprism/frontend/tests/acceptance/photos.js

498 lines
19 KiB
JavaScript
Raw Normal View History

2019-05-21 17:00:46 +02:00
import { Selector } from 'testcafe';
import testcafeconfig from './testcafeconfig';
import Page from "./page-model";
import { RequestLogger } from 'testcafe';
2019-05-21 17:00:46 +02:00
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/photos*/ , {
logResponseHeaders: true,
logResponseBody: true
});
fixture `Test photos`
.page`${testcafeconfig.url}`
.requestHooks(logger);
2019-05-21 17:00:46 +02:00
const page = new Page();
//?search + filters --> oder search js
// raw file icon? live photo icon? - search for type look for icon --> do it in search test
//?views including fullscreen--> oder view js
//?upload + Later: delete--> oder nur in library?
//scroll to top
//download
//clipboard --> extra test needed or include in other tests done for privat, archive
//review - approve photo
test('#8 approve photo', async t => {
await page.openNav();
await t
.click(Selector('div.p-navigation-photos + div'))
.click(Selector('.p-navigation-review'));
logger.clear();
await page.search('type:image');
const request1 = await logger.requests[0].response.body;
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
await page.selectPhotoFromUID(FirstPhoto);
await page.editSelectedPhotos();
logger.clear();
await t
.click(Selector('button.p-photo-dialog-close'));
await t
.click(Selector('button.action-reload'));
const request12 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).visible).ok();
await page.editSelectedPhotos();
const request2 = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('button.action-approve'))
.click(Selector('button.action-ok'));
const request3 = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('button.action-reload'));
const request4 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists).notOk()
.click(Selector('.p-navigation-photos'));
const request5 = await logger.requests[0].response.body;
logger.clear();
await page.search('type:image');
const request6 = await logger.requests[0].response.body;
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).visible).ok();
});
//review - add/remove date to photo so that it appears in photos
//review - for videos
//videos - play video
/*test('#1 like/dislike photo', async t => {
await t.click(Selector('.p-navigation-favorites'));
const PhotosCountInFavorites = await Selector('.t-like.t-on').count;
await t.click(Selector('.p-navigation-photos'));
const FavoritesCountInPhotos = await Selector('.t-like.t-on').count;
logger.clear();
await page.search('favorite:false');
await page.likePhoto(1);
const request = await logger.requests[0].response.body;
logger.clear();
2019-05-21 17:00:46 +02:00
await t
.click(Selector('.action-reload'));
const FavoritesCountInPhotosAfterLike = await Selector('.t-like.t-on').count;
logger.clear();
await t
.expect(FavoritesCountInPhotosAfterLike).eql(FavoritesCountInPhotos + 1)
.click(Selector('.p-navigation-favorites'));
const request2 = await logger.requests[0].response.body;
logger.clear();
const PhotosCountInFavoritesAfterLike = await Selector('.t-like.t-on').count;
await t
.expect(PhotosCountInFavoritesAfterLike).eql(PhotosCountInFavorites + 1)
.expect(Selector('div.v-image__image').visible).ok()
.click(Selector('.t-like.t-on'));
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const PhotosCountInFavoritesAfterDislike = await Selector('.t-like.t-on').count;
await t
.expect(PhotosCountInFavoritesAfterDislike).eql(PhotosCountInFavoritesAfterLike - 1);
});
test('#2 like/dislike video', async t => {
await t.click(Selector('.p-navigation-favorites'));
const VideoCountInFavorites = await Selector('.t-like.t-on').count;
await t.click(Selector('.p-navigation-video'));
const FavoritesCountInVideos = await Selector('.t-like.t-on').count;
logger.clear();
await page.search('favorite:false');
await page.likePhoto(0);
const request = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.action-reload'));
const FavoritesCountInVideosAfterLike = await Selector('.t-like.t-on').count;
logger.clear();
2019-05-21 17:00:46 +02:00
await t
.expect(FavoritesCountInVideosAfterLike).eql(FavoritesCountInVideos + 1)
.click(Selector('.p-navigation-favorites'));
const request2 = await logger.requests[0].response.body;
logger.clear();
const VideoCountInFavoritesAfterLike = await Selector('.t-like.t-on').count;
await t
.expect(VideoCountInFavoritesAfterLike).eql(VideoCountInFavorites + 1);
await page.search('type:video');
await t
.expect(Selector('div.v-image__image').visible).ok()
.click(Selector('.t-like.t-on'));
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const VideoCountInFavoritesAfterDislike = await Selector('.t-like.t-on').count;
await t
.expect(VideoCountInFavoritesAfterDislike).eql(VideoCountInFavoritesAfterLike - 1);
});
test('#5 private/unprivate photo from list view', async t => {
logger.clear();
await t.click(Selector('.p-navigation-private'));
const CountInPrivate = await Selector('.p-photo-private').count;
await t
.click(Selector('.p-navigation-photos'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Liste');
const request01 = await logger.requests[0].response.body;
const PhotoCountInPhotos = await Selector('div.v-responsive__content').count;
logger.clear();
await t.click(Selector('.p-photo-private').nth(0));
const request1 = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.action-reload'));
const request12 = await logger.requests[0].response.body;
const PhotoCountInPhotosAfterPrivate = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.expect(PhotoCountInPhotosAfterPrivate).eql(PhotoCountInPhotos - 1)
.click(Selector('.p-navigation-private'));
const request2 = await logger.requests[0].response.body;
logger.clear();
const CountInPrivateAfterPrivate = await Selector('.p-photo-private').count;
await t
.expect(CountInPrivateAfterPrivate).eql(CountInPrivate + 1);
await t
.expect(Selector('div.v-image__image').visible).ok()
.click(Selector('.p-photo-private').nth(0));
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const CountInPrivateAfterUnprivate = await Selector('.p-photo-private').count;
logger.clear();
await t
.expect(CountInPrivateAfterUnprivate).eql(CountInPrivateAfterPrivate - 1)
.click(Selector('.p-navigation-photos'));
const request4 = await logger.requests[0].response.body;
logger.clear();
const PhotoCountInPhotosAfterUnprivate = await Selector('div.v-responsive__content').count;
await t
.expect(PhotoCountInPhotosAfterUnprivate).eql(PhotoCountInPhotosAfterPrivate + 1);
});
test('#6 private/unprivate photo using clipboard', async t => {
logger.clear();
await t.click(Selector('.p-navigation-private'));
const request = await logger.requests[0].response.body;
const CountInPrivate = await Selector('.p-photo-private').count;
await t
.click(Selector('.p-navigation-photos'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Mosaik');
const request01 = await logger.requests[0].response.body;
const PhotoCountInPhotos = await Selector('div.v-responsive__content').count;
logger.clear();
await page.selectNthPhoto(0);
await page.selectNthPhoto(1);
await t
.click(Selector('button.p-photo-clipboard-menu'))
.click(Selector('button.p-photo-clipboard-private'));
logger.clear();
await t
.click(Selector('.action-reload'));
const request12 = await logger.requests[0].response.body;
const PhotoCountInPhotosAfterPrivate = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.expect(PhotoCountInPhotosAfterPrivate).eql(PhotoCountInPhotos - 2)
.click(Selector('.p-navigation-private'));
const request2 = await logger.requests[0].response.body;
logger.clear();
const CountInPrivateAfterPrivate = await Selector('.p-photo-private').count;
await t
.expect(CountInPrivateAfterPrivate).eql(CountInPrivate + 2);
await t
.expect(Selector('div.v-image__image').visible).ok();
await page.selectNthPhoto(0);
await page.selectNthPhoto(1);
await t
.click(Selector('button.p-photo-clipboard-menu'))
.click(Selector('button.p-photo-clipboard-private'));
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const CountInPrivateAfterUnprivate = await Selector('.p-photo-private').count;
logger.clear();
await t
.expect(CountInPrivateAfterUnprivate).eql(CountInPrivateAfterPrivate - 2)
.click(Selector('.p-navigation-photos'));
const request4 = await logger.requests[0].response.body;
logger.clear();
const PhotoCountInPhotosAfterUnprivate = await Selector('div.v-responsive__content').count;
await t
.expect(PhotoCountInPhotosAfterUnprivate).eql(PhotoCountInPhotosAfterPrivate + 2);
});
test('#3 private/unprivate video from list view', async t => {
logger.clear();
await t.click(Selector('.p-navigation-private'));
await page.search('type:video');
const request = await logger.requests[0].response.body;
const VideoCountInPrivate = await Selector('.p-photo-private').count;
await t
.click(Selector('.p-navigation-video'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Liste');
const request01 = await logger.requests[0].response.body;
const VideoCountInVideo = await Selector('button.p-photo-play').count;
logger.clear();
await t.click(Selector('.p-photo-private').nth(0));
const request1 = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.action-reload'));
const request12 = await logger.requests[0].response.body;
const VideoCountInVideoAfterPrivate = await Selector('button.p-photo-play').count;
logger.clear();
await t
.expect(VideoCountInVideoAfterPrivate).eql(VideoCountInVideo - 1)
.click(Selector('.p-navigation-private'));
await page.search('type:video');
const request2 = await logger.requests[0].response.body;
logger.clear();
const VideoCountInPrivateAfterPrivate = await Selector('.p-photo-private').count;
await t
.expect(VideoCountInPrivateAfterPrivate).eql(VideoCountInPrivate + 1);
await t
.expect(Selector('div.v-image__image').visible).ok()
.click(Selector('.p-photo-private').nth(0));
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const VideoCountInPrivateAfterUnprivate = await Selector('.p-photo-private').count;
logger.clear();
await t
.expect(VideoCountInPrivateAfterUnprivate).eql(VideoCountInPrivateAfterPrivate - 1)
.click(Selector('.p-navigation-video'));
const request4 = await logger.requests[0].response.body;
logger.clear();
const VideoCountInVideoAfterUnprivate = await Selector('button.p-photo-play').count;
await t
.expect(VideoCountInVideoAfterUnprivate).eql(VideoCountInVideoAfterPrivate + 1);
});
test('#4 private/unprivate video using clipboard', async t => {
logger.clear();
await t.click(Selector('.p-navigation-private'));
await page.search('type:video');
const request = await logger.requests[0].response.body;
const VideoCountInPrivate = await Selector('.p-photo-private').count;
await t
.click(Selector('.p-navigation-video'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Mosaik');
const request01 = await logger.requests[0].response.body;
const VideoCountInVideo = await Selector('button.p-photo-play').count;
logger.clear();
await page.selectNthPhoto(0);
await page.selectNthPhoto(1);
await t
.click(Selector('button.p-photo-clipboard-menu'))
.click(Selector('button.p-photo-clipboard-private'));
logger.clear();
await t
.click(Selector('.action-reload'));
const request12 = await logger.requests[0].response.body;
const VideoCountInVideoAfterPrivate = await Selector('button.p-photo-play').count;
logger.clear();
await t
.expect(VideoCountInVideoAfterPrivate).eql(VideoCountInVideo - 2)
.click(Selector('.p-navigation-private'));
await page.search('type:video');
const request2 = await logger.requests[0].response.body;
logger.clear();
const VideoCountInPrivateAfterPrivate = await Selector('.p-photo-private').count;
await t
.expect(VideoCountInPrivateAfterPrivate).eql(VideoCountInPrivate + 2);
await t
.expect(Selector('div.v-image__image').visible).ok();
await page.selectNthPhoto(0);
await page.selectNthPhoto(1);
await t
.click(Selector('button.p-photo-clipboard-menu'))
.click(Selector('button.p-photo-clipboard-private'));
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const VideoCountInPrivateAfterUnprivate = await Selector('.p-photo-private').count;
logger.clear();
await t
.expect(VideoCountInPrivateAfterUnprivate).eql(VideoCountInPrivateAfterPrivate - 2)
.click(Selector('.p-navigation-video'));
const request4 = await logger.requests[0].response.body;
logger.clear();
const VideoCountInVideoAfterUnprivate = await Selector('button.p-photo-play').count;
await t
.expect(VideoCountInVideoAfterUnprivate).eql(VideoCountInVideoAfterPrivate + 2);
});
//archive - archive + restore from photos from private from review (UPDATE)
//photos
//private photos
//review photos
test('#7 archive/restore video, photos, private photos and review photos using clipboard', async t => {
logger.clear();
await page.openNav();
await t
.click(Selector('div.p-navigation-photos + div'))
.click(Selector('.p-navigation-archive'));
const request = await logger.requests[0].response.body;
const TotalCountInArchive = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.click(Selector('.p-navigation-video'));
const request1 = await logger.requests[0].response.body;
const VideoCountInVideo = await Selector('button.p-photo-play').count;
logger.clear();
await page.selectNthPhoto(0);
await page.archiveSelectedPhotos();
logger.clear();
await t
.click(Selector('.action-reload'));
const request2 = await logger.requests[0].response.body;
const VideoCountInVideoAfterArchive = await Selector('button.p-photo-play').count;
logger.clear();
await t
.expect(VideoCountInVideoAfterArchive).eql(VideoCountInVideo - 1)
.click(Selector('.p-navigation-photos'));
const request3 = await logger.requests[0].response.body;
logger.clear();
const PhotoCountInPhotos = await Selector('div.v-responsive__content').count;
logger.clear();
await page.selectNthPhoto(0);
await page.selectNthPhoto(1);
await page.archiveSelectedPhotos();
logger.clear();
await t
.click(Selector('.action-reload'));
const request4 = await logger.requests[0].response.body;
const PhotoCountInPhotosAfterArchive = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.expect(PhotoCountInPhotosAfterArchive).eql(PhotoCountInPhotos - 2)
.click(Selector('.p-navigation-private'));
const request5 = await logger.requests[0].response.body;
logger.clear();
const PhotoCountInPrivate = await Selector('div.v-responsive__content').count;
logger.clear();
await page.selectNthPhoto(0);
await page.archiveSelectedPhotos();
logger.clear();
await t
.click(Selector('.action-reload'));
const request6 = await logger.requests[0].response.body;
const PhotoCountInPrivateAfterArchive = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.expect(PhotoCountInPrivateAfterArchive).eql(PhotoCountInPrivate - 1)
.click(Selector('.p-navigation-review'));
const request7 = await logger.requests[0].response.body;
logger.clear();
const PhotoCountInReview = await Selector('div.v-responsive__content').count;
logger.clear();
await page.selectNthPhoto(0);
await page.archiveSelectedPhotos();
logger.clear();
await t
.click(Selector('.action-reload'));
const request8 = await logger.requests[0].response.body;
const PhotoCountInReviewAfterArchive = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.expect(PhotoCountInReviewAfterArchive).eql(PhotoCountInReview - 1)
.click(Selector('.p-navigation-archive'));
const request9 = await logger.requests[0].response.body;
logger.clear();
const TotalCountInArchiveAfterArchive = await Selector('div.v-responsive__content').count;
await t
.expect(TotalCountInArchiveAfterArchive).eql(TotalCountInArchive + 5);
await t
.expect(Selector('div.v-image__image').visible).ok();
await page.search('type:video');
await page.selectNthPhoto(0);
await page.search('review:true');
await page.selectNthPhoto(0);
await page.search('review:true');
await page.selectNthPhoto(0);
await page.restoreSelectedPhotos();
logger.clear();
await t.click(Selector('.action-reload'));
const request10 = await logger.requests[0].response.body;
const TotalCountInArchiveAfterRestore = await Selector('div.v-responsive__content').count;
logger.clear();
await t
.expect(TotalCountInArchiveAfterRestore).eql(TotalCountInArchiveAfterArchive - 5)
.click(Selector('.p-navigation-video'));
const request11 = await logger.requests[0].response.body;
logger.clear();
const VideoCountInVideoAfterRestore = await Selector('button.p-photo-play').count;
await t
.expect(VideoCountInVideoAfterRestore).eql(VideoCountInVideoAfterArchive + 1);
});*/
//open photoeditdialogue (multiple ways) + edit photo details
//change primary file
//navigate to places
//Check count in navi gets updated --> gt/lt or matches count of images