Frontend: Update acceptance tests

This commit is contained in:
Theresa Gresch 2020-06-04 18:25:29 +02:00
parent 15d8e2bb3b
commit e80435a8ec
13 changed files with 129 additions and 226 deletions

View file

@ -17,6 +17,7 @@ const page = new Page();
test('#1 Create/delete album', async t => {
logger.clear();
await t.click(Selector('.p-navigation-albums'));
//TODO fails in container with request but outsides without it
//const request = await logger.requests[0].response.body;
const countAlbums = await Selector('div.p-album').count;
logger.clear();
@ -30,18 +31,15 @@ test('#1 Create/delete album', async t => {
await page.selectFromUID(NewAlbum);
logger.clear();
await page.deleteSelectedAlbum();
const request3 = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
const countAlbumsAfterDelete = await Selector('div.p-album').count;
await t
.expect(countAlbumsAfterDelete).eql(countAlbumsAfterCreate - 1);
});
test('#2 Update album', async t => {
logger.clear();
await t.click(Selector('.p-navigation-albums'));
//const request = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.p-navigation-albums'))
.typeText(Selector('.p-albums-search input'), 'Holiday')
.pressKey('enter');
const AlbumUid = await Selector('div.p-album').nth(0).getAttribute('data-uid');
@ -56,7 +54,7 @@ test('#2 Update album', async t => {
logger.clear();
await t
.click(Selector('div.p-album').nth(0));
const request2 = await logger.requests[0].response.body;
const request1 = await logger.requests[0].response.body;
const PhotoCount = await Selector('div.p-photo').count;
await t
.click(Selector('.p-expand-search'))
@ -68,7 +66,7 @@ test('#2 Update album', async t => {
logger.clear();
await t
.click('.action-reload');
const request3 = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
await t
.click(Selector('.p-expand-search'))
.expect(Selector('.input-description textarea').value).eql('All my animals')
@ -85,17 +83,17 @@ test('#2 Update album', async t => {
await t
.click(Selector('.input-category'))
.click(Selector('div[role="listitem"]').withText('Family'));
const request5 = await logger.requests[0].response.body;
const request3 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div.v-card__actions').nth(0).innerText).contains('Christmas')
.click(Selector('.p-navigation-albums'))
.click(Selector('.input-category'))
.click(Selector('div[role="listitem"]').withText('All Categories'), {timeout: 55000});
const request6 = await logger.requests[0].response.body;
const request4 = await logger.requests[0].response.body;
await t
.click(Selector('div.p-album').withAttribute('data-uid', AlbumUid));
const request4 = await logger.requests[0].response.body;
const request5 = await logger.requests[0].response.body;
const PhotoCountAfterAdd = await Selector('div.p-photo').count;
await t
.expect(PhotoCountAfterAdd).eql(PhotoCount + 2);
@ -122,13 +120,9 @@ test('#2 Update album', async t => {
//TODO test download itself + clipboard count after download
test('#3 Download album', async t => {
logger.clear();
await t.click(Selector('.p-navigation-albums'));
//const request = await logger.requests[0].response.body;
const FirstAlbum = await Selector('div.p-album').nth(0).getAttribute('data-uid');
await page.selectFromUID(FirstAlbum);
const clipboardCount = await Selector('span.t-clipboard-count');
await t
.expect(clipboardCount.textContent).eql("1")
@ -150,6 +144,6 @@ test('#5 View calendar', async t => {
logger.clear();
await t
.click(Selector('.p-navigation-calendar'))
.expect(Selector('a').withText('May 2020').visible).ok()
.expect(Selector('a').withText('May 2019').visible).ok()
.expect(Selector('a').withText('October 2019').visible).ok();
});

View file

@ -1,5 +1,54 @@
//search
import { Selector } from 'testcafe';
import testcafeconfig from './testcafeconfig';
import Page from './page-model';
//filters + switch between pages
fixture`Test components`
.page`${testcafeconfig.url}`;
//switch views
const page = new Page();
/*test('#1 Test filter options', async t => {
await t
.click('button.p-expand-search')
.click(Selector('div.p-countries-select'))
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('object')
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Botswana')
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Animal');
});*/
test('#2 Fullscreen mode', async t => {
await t
.click(Selector('div.v-image__image').nth(0))
.expect(Selector('#p-photo-viewer').visible).ok()
.expect(Selector('img.pswp__img').visible).ok();
});
test('#3 Mosaic view', async t => {
await t
.click('button.p-expand-search');
await page.setFilter('view', 'Mosaic');
await t
.expect(Selector('div.v-image__image').visible).ok()
.expect(Selector('div.p-photo-mosaic').visible).ok()
.expect(Selector('div.p-photo div.caption').exists).notOk()
.expect(Selector('#p-photo-viewer').visible).notOk();
});
test('#4 List view', async t => {
await t
.click('button.p-expand-search');
await page.setFilter('view', 'List');
await t
.expect(Selector('table.v-datatable').visible).ok()
.expect(Selector('div.p-photo-list').visible).ok();
});
test('#5 card view', async t => {
await t
.click('button.p-expand-search');
await page.setFilter('view', 'Cards');
await t
.expect(Selector('div.v-image__image').visible).ok()
.expect(Selector('div.p-photo div.caption').visible).ok()
.expect(Selector('#p-photo-viewer').visible).notOk();
});

View file

@ -1,21 +1,13 @@
import { Selector } from 'testcafe';
import testcafeconfig from './testcafeconfig';
import Page from "./page-model";
import { RequestLogger } from 'testcafe';
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
logResponseHeaders: true,
logResponseBody: true
});
fixture `Test files`
.page`${testcafeconfig.url}`
.requestHooks(logger);
.page`${testcafeconfig.url}`;
const page = new Page();
test('#1 Add files to album', async t => {
logger.clear();
await page.openNav();
await t.click(Selector('.p-navigation-albums'));
await t
@ -23,7 +15,6 @@ test('#1 Add files to album', async t => {
.pressKey('enter');
await t
.expect(Selector('h3').innerText).eql('No albums matched your search');
await t
.click(Selector('div.p-navigation-library + div'))
.click(Selector('.p-navigation-files'));
@ -76,13 +67,10 @@ test('#2 Download files', async t => {
.click(Selector('div.p-navigation-library + div'))
.click(Selector('.p-navigation-files'));
const FirstFile = await Selector('div.p-file').nth(0).getAttribute('data-uid');
await page.selectFromUID(FirstFile);
const clipboardCount = await Selector('span.t-clipboard-count');
await t
.expect(clipboardCount.textContent).eql("1")
.click(Selector('button.p-file-clipboard-menu'))
.expect(Selector('button.p-file-clipboard-download').visible).ok();
});
});

View file

@ -1,24 +0,0 @@
import { Selector } from 'testcafe';
import testcafeconfig from './testcafeconfig';
import Page from './page-model';
import { RequestLogger } from 'testcafe';
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/photos*/ , {
logResponseHeaders: true,
logResponseBody: true
});
fixture`Test filter options`
.page`${testcafeconfig.url}`
.requestHooks(logger);
const page = new Page();
/*test('Test filter options', async t => {
await t
.click('button.p-expand-search')
.click(Selector('div.p-countries-select'))
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('object')
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Botswana')
.expect(Selector('div[role="listitem"]]').nth(0).innerText).notContains('Animal');
});*/

View file

@ -15,11 +15,8 @@ fixture `Test labels`
const page = new Page();
test('#1 Remove/Activate Add/Delete Label', async t => {
logger.clear();
await t.click(Selector('.p-navigation-labels'));
//const request = await logger.requests[0].response.body;
const countImportantLabels = await Selector('div.p-label').count;
logger.clear();
await t
.click(Selector('button.action-show-all'));
const countAllLabels = await Selector('div.p-label').count;
@ -83,9 +80,7 @@ test('#1 Remove/Activate Add/Delete Label', async t => {
//TODO check title of second image after index
test('#2 Rename Label', async t => {
logger.clear();
await t.click(Selector('.p-navigation-labels'));
//const request = await logger.requests[0].response.body;
await page.search('zebra');
const LabelZebra = await Selector('div.p-label').nth(0).getAttribute('data-uid');
await t
@ -130,27 +125,20 @@ test('#2 Rename Label', async t => {
});
test('#3 Add label to album', async t => {
logger.clear();
await t.click(Selector('.p-navigation-albums'));
//const request = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.p-navigation-albums'))
.typeText(Selector('.p-albums-search input'), 'Christmas')
.pressKey('enter');
const AlbumUid = await Selector('div.p-album').nth(0).getAttribute('data-uid');
logger.clear();
await t
.click(Selector('div.p-album').withAttribute('data-uid', AlbumUid));
//const request2 = await logger.requests[0].response.body;
const PhotoCount = await Selector('div.p-photo').count;
await t
.click(Selector('.p-navigation-labels'));
await page.search('landscape');
const LabelLandscape = await Selector('div.p-label').nth(1).getAttribute('data-uid');
logger.clear();
await t
.click(Selector('div.p-label').withAttribute('data-uid', LabelLandscape));
//const request3 = await logger.requests[0].response.body;
const FirstPhotoLandscape = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
const SecondPhotoLandscape = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
await t
@ -167,7 +155,6 @@ test('#3 Add label to album', async t => {
.click(Selector('button.p-photo-dialog-confirm'))
.click(Selector('.p-navigation-albums'))
.click(Selector('div.p-album').withAttribute('data-uid', AlbumUid));
const request4 = await logger.requests[0].response.body;
const PhotoCountAfterAdd = await Selector('div.p-photo').count;
await t
.expect(PhotoCountAfterAdd).eql(PhotoCount + 2);
@ -177,7 +164,6 @@ test('#3 Add label to album', async t => {
await t
.click('.action-reload');
const PhotoCountAfterDelete = await Selector('div.p-photo').count;
logger.clear();
await t
.expect(PhotoCountAfterDelete).eql(PhotoCountAfterAdd - 2);
});

View file

@ -1,19 +1,13 @@
import { Selector } from 'testcafe';
import testcafeconfig from '../testcafeconfig';
import Page from "../page-model";
import { RequestLogger } from 'testcafe';
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
logResponseHeaders: true,
logResponseBody: true
});
fixture `Test import`
.page`${testcafeconfig.url}`
.requestHooks(logger);
fixture `Import file from folder`
.page`${testcafeconfig.url}`;
const page = new Page();
//TODO use upload + delete
//TODO check metadata like camera, keywords, location etc are added
test('#1 Import files from folder using copy', async t => {
await t
.click(Selector('.p-navigation-labels'));
@ -23,7 +17,6 @@ test('#1 Import files from folder using copy', async t => {
await t
.click(Selector('.p-navigation-library'))
.click(Selector('#tab-import'))
.expect(Selector('span').withText('Press button to start copying...').visible, {timeout: 5000}).ok()
.click(Selector('.input-import-folder input'))
.click(Selector('div.v-list__tile__title').withText('/Bäckerei'))
.click(Selector('.action-import'))

View file

@ -1,18 +1,12 @@
import { Selector } from 'testcafe';
import testcafeconfig from '../testcafeconfig';
import Page from "../page-model";
import { RequestLogger } from 'testcafe';
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
logResponseHeaders: true,
logResponseBody: true
});
fixture `Test index`
.page`${testcafeconfig.url}`
.requestHooks(logger);
.page`${testcafeconfig.url}`;
const page = new Page();
//TODO check metadata like camera, keywords, location etc are added
test('#1 Index files from folder', async t => {
await t
.click(Selector('.p-navigation-labels'));

View file

@ -34,10 +34,10 @@ export default class Page {
if (option) {
await t
.click(Selector('div.menuable__content__active div.v-select-list a').withText(option), {timeout: 15000})
.click(Selector('div[role="listitem"]').withText(option), {timeout: 15000})
} else {
await t
.click(Selector('div.menuable__content__active div.v-select-list a').nth(1), {timeout: 15000})
.click(Selector('div[role="listitem"]').nth(1), {timeout: 15000})
}
}

View file

@ -18,19 +18,15 @@ fixture `Test photos`
const page = new Page();
//TODO?search + filters --> oder search js
//TODO raw file icon? live photo icon? - search for type look for icon --> do it in search test
//TODO ?views including fullscreen (next,previous)--> oder view js
//TODO Share + clipboard
//TODO Share photo
//TODO Check count in navi gets updated --> gt/lt or matches count of images
//TODO videos - play video
test('#1 Scroll to top', async t => {
await t
.click(Selector('.p-navigation-photos'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Cards');
await t
.expect(Selector('button.p-photo-scroll-top').exists).notOk()
@ -47,7 +43,6 @@ test('#1 Scroll to top', async t => {
test('#2 Download single photo/video and download zip using clipboard and fullscreen mode', async t => {
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
const SecondPhoto = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
await t
.click(Selector('div').withAttribute('data-uid', SecondPhoto));
await t
@ -55,13 +50,10 @@ test('#2 Download single photo/video and download zip using clipboard and fullsc
.hover(Selector('.action-download'))
.expect(Selector('.action-download').visible).ok()
.click(Selector('.action-close'));
await page.selectFromUID(FirstPhoto);
await t
.click(Selector('.p-navigation-video'));
const FirstVideo = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
await page.selectFromUID(FirstVideo);
const clipboardCount = await Selector('span.t-clipboard-count');
await t
@ -85,13 +77,13 @@ test('#3 Approve photo using approve and by adding location', async t => {
logger.clear();
await t
.click(Selector('.p-navigation-photos'));
const request11 = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk();
logger.clear();
await t.click(Selector('.p-navigation-review'));
const request111 = await logger.requests[0].response.body;
const request3 = await logger.requests[0].response.body;
await page.selectFromUID(FirstPhoto);
await page.editSelected();
@ -100,17 +92,17 @@ test('#3 Approve photo using approve and by adding location', async t => {
.click(Selector('button.p-photo-dialog-close'));
await t
.click(Selector('button.action-reload'));
const request12 = await logger.requests[0].response.body;
const request4 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).visible, {timeout: 5000}).ok();
await page.editSelected();
const request2 = await logger.requests[0].response.body;
const request5 = 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;
const request6 = await logger.requests[0].response.body;
logger.clear();
await page.unselectFromUID(FirstPhoto);
@ -121,20 +113,20 @@ test('#3 Approve photo using approve and by adding location', async t => {
.typeText(Selector('input[aria-label="Latitude"]'), '9.999')
.typeText(Selector('input[aria-label="Longitude"]'), '9.999')
.click(Selector('button.action-ok'));
const request31 = await logger.requests[0].response.body;
const request7 = await logger.requests[0].response.body;
await t
.click(Selector('button.action-reload'));
const request4 = await logger.requests[0].response.body;
const request8 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-photos'));
const request5 = await logger.requests[0].response.body;
const request9 = await logger.requests[0].response.body;
logger.clear();
await page.search('type:image');
const request6 = await logger.requests[0].response.body;
const request10 = await logger.requests[0].response.body;
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).visible).ok()
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).visible).ok();
@ -146,7 +138,7 @@ test('#4 Like/dislike photo/video', async t => {
const FirstPhoto = await Selector('.t-off').nth(0).getAttribute('data-uid');
await t.click(Selector('.p-navigation-video'));
const request0 = await logger.requests[0].response.body;
const request1 = await logger.requests[0].response.body;
const FirstVideo = await Selector('.t-off').nth(0).getAttribute('data-uid');
await t.click(Selector('.p-navigation-favorites'));
@ -157,7 +149,7 @@ test('#4 Like/dislike photo/video', async t => {
logger.clear();
await page.likePhoto(FirstPhoto);
const request = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.action-reload'))
@ -166,7 +158,7 @@ test('#4 Like/dislike photo/video', async t => {
await t.click(Selector('.p-navigation-video'));
await page.likePhoto(FirstVideo);
const request1 = await logger.requests[0].response.body;
const request3 = await logger.requests[0].response.body;
logger.clear();
await t
.click(Selector('.action-reload'))
@ -175,19 +167,19 @@ test('#4 Like/dislike photo/video', async t => {
await t
.click(Selector('.p-navigation-favorites'));
const request2 = await logger.requests[0].response.body;
const request4 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).ok()
.expect(Selector('div.v-image__image').visible).ok();
await page.dislikePhoto(FirstVideo);
const request21 = await logger.requests[0].response.body;
const request5 = await logger.requests[0].response.body;
logger.clear();
await page.dislikePhoto(FirstPhoto);
logger.clear();
await t.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const request6 = await logger.requests[0].response.body;
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk();
@ -195,26 +187,24 @@ test('#4 Like/dislike photo/video', async t => {
//TODO Check private photos do not appear in labels, places, albums, moments...
test('#5 Private/unprivate photo/video using clipboard and list', async t => {
logger.clear();
await t
.click(Selector('.p-navigation-photos'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Mosaic');
const request0 = await logger.requests[0].response.body;
const request1 = await logger.requests[0].response.body;
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
const SecondPhoto = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
const ThirdPhoto = await Selector('div.p-photo').nth(2).getAttribute('data-uid');
await t
.click(Selector('.p-navigation-video'));
const request = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
const FirstVideo = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
const SecondVideo = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
await t.click(Selector('.p-navigation-private'));
const request1 = await logger.requests[0].response.body;
const request3 = await logger.requests[0].response.body;
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
@ -222,8 +212,6 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondVideo).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-photos'));
logger.clear();
await page.selectFromUID(FirstPhoto);
await page.selectFromUID(SecondPhoto);
const clipboardCount = await Selector('span.t-clipboard-count');
@ -234,14 +222,13 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk();
logger.clear();
await page.setFilter('view', 'List');
const request12 = await logger.requests[0].response.body;
const request4 = await logger.requests[0].response.body;
await t
.click(Selector('button.p-photo-private').withAttribute('data-uid', ThirdPhoto));
logger.clear();
await t
.click(Selector('.action-reload'));
const request2 = await logger.requests[0].response.body;
const request5 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('td').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
@ -253,7 +240,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
await t
.click(Selector('button.p-photo-private').withAttribute('data-uid', SecondVideo));
await page.setFilter('view', 'Mosaic');
const request13 = await logger.requests[0].response.body;
const request6 = await logger.requests[0].response.body;
logger.clear();
await page.selectFromUID(FirstVideo);
@ -266,14 +253,14 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
logger.clear();
await t
.click(Selector('.action-reload'));
const request3 = await logger.requests[0].response.body;
const request7 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondVideo).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-private'));
const request4 = await logger.requests[0].response.body;
const request8 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
@ -293,7 +280,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
await page.setFilter('view', 'Mosaic');
logger.clear();
await t.click(Selector('.action-reload'));
const request5 = await logger.requests[0].response.body;
const request9 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
@ -303,7 +290,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
.expect(Selector('div').withAttribute('data-uid', SecondVideo).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-photos'));
const request6 = await logger.requests[0].response.body;
const request10 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
@ -311,7 +298,7 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
.expect(Selector('div').withAttribute('data-uid', ThirdPhoto).exists, {timeout: 5000}).ok()
.click(Selector('.p-navigation-video'));
const request7 = await logger.requests[0].response.body;
const request11 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).ok()
@ -319,40 +306,38 @@ test('#5 Private/unprivate photo/video using clipboard and list', async t => {
});
test('#6 Archive/restore video, photos, private photos and review photos using clipboard', async t => {
logger.clear();
await page.openNav();
await t
.click(Selector('.p-navigation-photos'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Mosaic');
const request0 = await logger.requests[0].response.body;
const request1 = await logger.requests[0].response.body;
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
const SecondPhoto = await Selector('div.p-photo').nth(1).getAttribute('data-uid');
await t
.click(Selector('.p-navigation-video'));
const request = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
const FirstVideo = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
logger.clear();
await t
.click(Selector('.p-navigation-private'));
const request1 = await logger.requests[0].response.body;
const request3 = await logger.requests[0].response.body;
const FirstPrivatePhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
logger.clear();
await t
.click(Selector('div.p-navigation-photos + div'))
.click(Selector('.p-navigation-review'));
const request2 = await logger.requests[0].response.body;
const request4 = await logger.requests[0].response.body;
const FirstReviewPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
logger.clear();
await t
.click(Selector('.p-navigation-archive'));
const request3 = await logger.requests[0].response.body;
const request5 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
@ -363,7 +348,7 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.click(Selector('.p-navigation-video'));
const request4 = await logger.requests[0].response.body;
const request6 = await logger.requests[0].response.body;
logger.clear();
await page.selectFromUID(FirstVideo);
const clipboardCountVideo = await Selector('span.t-clipboard-count');
@ -374,13 +359,13 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
.click(Selector('.action-reload'));
const request5 = await logger.requests[0].response.body;
const request7 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-photos'));
const request6 = await logger.requests[0].response.body;
const request8 = await logger.requests[0].response.body;
logger.clear();
await page.selectFromUID(FirstPhoto);
await page.selectFromUID(SecondPhoto);
@ -392,14 +377,14 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
.click(Selector('.action-reload'));
const request7 = await logger.requests[0].response.body;
const request9 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-private'));
const request8 = await logger.requests[0].response.body;
const request10 = await logger.requests[0].response.body;
logger.clear();
await page.selectFromUID(FirstPrivatePhoto);
const clipboardCountPrivate = await Selector('span.t-clipboard-count');
@ -408,7 +393,7 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.click(Selector('.p-navigation-review'));
const request10 = await logger.requests[0].response.body;
const request11 = await logger.requests[0].response.body;
logger.clear();
await page.selectFromUID(FirstReviewPhoto);
const clipboardCountReview = await Selector('span.t-clipboard-count');
@ -419,12 +404,12 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
.click(Selector('.action-reload'));
const request11 = await logger.requests[0].response.body;
const request12 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstReviewPhoto).exists, {timeout: 5000}).notOk()
.click(Selector('.p-navigation-archive'));
const request12 = await logger.requests[0].response.body;
const request13 = await logger.requests[0].response.body;
logger.clear();
await t
@ -446,7 +431,7 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.expect(Selector('button.p-photo-clipboard-menu').exists, {timeout: 5000}).notOk()
.click(Selector('.action-reload'));
const request13 = await logger.requests[0].response.body;
const request14 = await logger.requests[0].response.body;
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).notOk()
.expect(Selector('div').withAttribute('data-uid', SecondPhoto).exists, {timeout: 5000}).notOk()
@ -457,14 +442,14 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.click(Selector('.p-navigation-video'));
const request14 = await logger.requests[0].response.body;
const request15 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstVideo).exists, {timeout: 5000}).ok();
await t
.click(Selector('.p-navigation-photos'));
const request15 = await logger.requests[0].response.body;
const request16 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPhoto).exists, {timeout: 5000}).ok()
@ -472,31 +457,29 @@ test('#6 Archive/restore video, photos, private photos and review photos using c
await t
.click(Selector('.p-navigation-private'));
const request16 = await logger.requests[0].response.body;
const request17 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstPrivatePhoto).exists, {timeout: 5000}).ok();
await t
.click(Selector('.p-navigation-review'));
const request17 = await logger.requests[0].response.body;
const request18 = await logger.requests[0].response.body;
logger.clear();
await t
.expect(Selector('div').withAttribute('data-uid', FirstReviewPhoto).exists, {timeout: 5000}).ok();
});
//TODO edited values stay after reindex!!
// test timepicker, datepicker, camera, lens
//revert country, timezone
//access video from list + edit
// check country overwritten by lat/lng
//TODO test timepicker, datepicker, camera, lens
//TODO revert country, timezone
//TODO access video from list + edit
//TODO check country overwritten by lat/lng
test('#7 Edit photo/video', async t => {
logger.clear();
await page.openNav();
await t
.click(Selector('.p-navigation-photos'))
.click(Selector('.p-expand-search'));
logger.clear();
await page.setFilter('view', 'Cards');
const FirstPhoto = await Selector('div.p-photo').nth(0).getAttribute('data-uid');
await t
@ -506,7 +489,7 @@ test('#7 Edit photo/video', async t => {
logger.clear();
await t
.click(Selector('button.action-next'));
const request01 = await logger.requests[0].response.body;
const request1 = await logger.requests[0].response.body;
await t
.expect(Selector('button.action-previous').getAttribute('disabled')).notEql('disabled')
.click(Selector('button.action-previous'))
@ -571,14 +554,14 @@ test('#7 Edit photo/video', async t => {
.typeText(Selector('.input-keywords textarea'), ', cat, love')
.typeText(Selector('.input-notes textarea'), 'Some notes', { replace: true })
.click(Selector('button.action-approve'));
const request = await logger.requests[0].response.body;
const request2 = await logger.requests[0].response.body;
await t
.expect(Selector('.input-latitude input').visible, {timeout: 5000}).ok()
.click(Selector('button.action-ok'));
logger.clear();
await t
.click(Selector('button.action-reload'));
const request1 = await logger.requests[0].response.body;
const request3 = await logger.requests[0].response.body;
await t
.expect(Selector('button.action-title-edit').withAttribute('data-uid', FirstPhoto).innerText).eql('New Photo Title')
@ -605,7 +588,6 @@ test('#7 Edit photo/video', async t => {
.expect(Selector('.input-description textarea').value).eql('Description of a nice image :)')
.expect(Selector('.input-notes textarea').value).contains('Some notes')
.expect(Selector('.input-keywords textarea').value).contains('cat')
//revert changes
if (FirstPhotoTitle.empty || FirstPhotoTitle === "")
{ await t
.click(Selector('.input-title input'))
@ -739,12 +721,11 @@ test('#7 Edit photo/video', async t => {
logger.clear();
await t
.click(Selector('.action-reload'));
const request2 = await logger.requests[0].response.body;
const request4 = await logger.requests[0].response.body;
await t.expect(Selector('button.action-title-edit').withAttribute('data-uid', FirstPhoto).innerText).eql(FirstPhotoTitle);
});
test('#8 Change primary file', async t => {
logger.clear();
await page.openNav();
await t
.click(Selector('.p-navigation-photos'))
@ -768,7 +749,6 @@ test('#8 Change primary file', async t => {
});
test('#9 Navigate from card view to place', async t => {
logger.clear();
await t.click(Selector('.p-expand-search'));
await page.setFilter('view', 'Cards');
await t

View file

@ -7,7 +7,7 @@ const getLocation = ClientFunction(() => document.location.href);
fixture`Test places page`
.page`${testcafeconfig.url}`
test('Test places', async t => {
test('#1 Test places', async t => {
await t
.click(Selector('.p-navigation-places'))
.expect(Selector('#map').exists, {timeout: 15000}).ok()

View file

@ -0,0 +1 @@
//TODO test accounts!

View file

@ -1,21 +1,14 @@
import { Selector } from 'testcafe';
import testcafeconfig from '../testcafeconfig';
import Page from "../page-model";
import { RequestLogger } from 'testcafe';
import { ClientFunction } from 'testcafe';
const logger = RequestLogger( /http:\/\/localhost:2342\/api\/v1\/*/ , {
logResponseHeaders: true,
logResponseBody: true
});
fixture `Test settings`
.page`${testcafeconfig.url}`
.requestHooks(logger);
.page`${testcafeconfig.url}`;
const page = new Page();
//TODO test convert to jpeg, group files, places style
//TODO check download also disabled for albums/files/review/private
test('#1 Settings', async t => {
await page.openNav();
@ -43,7 +36,6 @@ test('#1 Settings', async t => {
.expect(Selector('button.p-photo-label-add').visible).ok()
.click(Selector('#tab-edit-details'))
.click(Selector('button.action-close'))
.click(Selector('.p-navigation-library'))
.expect(Selector('#tab-import a').visible).ok()
.expect(Selector('#tab-logs a').visible).ok()
@ -119,8 +111,6 @@ test('#1 Settings', async t => {
.click(Selector('div.p-navigation-library + div'))
.expect(Selector('.p-navigation-files').visible).notOk()
.click(Selector('div.p-navigation-albums + div'))
//TODO fix it
//.expect(Selector('.p-navigation-folders').exists).notOk()
.expect(Selector('.p-navigation-moments').visible).notOk()
.expect(Selector('.p-navigation-labels').visible).notOk()
.expect(Selector('.p-navigation-places').visible).notOk()
@ -144,7 +134,4 @@ test('#1 Settings', async t => {
.click(Selector('.input-places input'))
.click(Selector('.input-private input'))
.click(Selector('.input-review input'));
});
//places settings
});

View file

@ -1,45 +0,0 @@
import { Selector } from 'testcafe';
import testcafeconfig from './testcafeconfig.json';
import Page from "./page-model";
fixture`Test views`
.page`${testcafeconfig.url}`;
const page = new Page();
test('Open photo in fullscreen', async t => {
await t
.click(Selector('div.v-image__image').nth(0))
.expect(Selector('#p-photo-viewer').visible).ok()
.expect(Selector('img.pswp__img').visible).ok();
});
test('Open mosaic view via select', async t => {
await t
.click('button.p-expand-search');
await page.setFilter('view', 'Mosaic');
await t
.expect(Selector('div.v-image__image').visible).ok()
.expect(Selector('div.p-photo-mosaic').visible).ok()
.expect(Selector('div.p-photo div.caption').exists).notOk()
.expect(Selector('#p-photo-viewer').visible).notOk();
});
test('Open list view via select', async t => {
await t
.click('button.p-expand-search');
await page.setFilter('view', 'List');
await t
.expect(Selector('table.v-datatable').visible).ok()
.expect(Selector('div.p-photo-list').visible).ok();
});
test('Open card view via select', async t => {
await t
.click('button.p-expand-search');
await page.setFilter('view', 'Cards');
await t
.expect(Selector('div.v-image__image').visible).ok()
.expect(Selector('div.p-photo div.caption').visible).ok()
.expect(Selector('#p-photo-viewer').visible).notOk();
});