diff --git a/frontend/tests/acceptance/albums.js b/frontend/tests/acceptance/albums.js index 79869b19d..9001e5385 100644 --- a/frontend/tests/acceptance/albums.js +++ b/frontend/tests/acceptance/albums.js @@ -1,190 +1,182 @@ -import { Selector } from 'testcafe'; -import testcafeconfig from './testcafeconfig'; +import { Selector } from "testcafe"; +import testcafeconfig from "./testcafeconfig"; import Page from "./page-model"; -import { RequestLogger } from 'testcafe'; -const logger = RequestLogger( /http:\/\/localhost\/api\/v1\/*/ , { - logResponseHeaders: true, - logResponseBody: true -}); - -fixture `Test albums` - .page`${testcafeconfig.url}` - .requestHooks(logger); +fixture`Test albums`.page`${testcafeconfig.url}`; const page = new Page(); -test('#1 Create/delete album', async t => { - logger.clear(); - await t.click(Selector('.nav-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(); - await t - .click(Selector('button.action-add')); - //const request1 = await logger.requests[0].response.body; - const countAlbumsAfterCreate = await Selector('div.p-album').count; - const NewAlbum = await Selector('div.p-album').nth(0).getAttribute('data-uid'); - await t - .expect(countAlbumsAfterCreate).eql(countAlbums + 1); - await page.selectFromUID(NewAlbum); - logger.clear(); - await page.deleteSelected(); - //const request2 = await logger.requests[0].response.body; - const countAlbumsAfterDelete = await Selector('div.p-album').count; - await t - .expect(countAlbumsAfterDelete).eql(countAlbumsAfterCreate - 1); +test("#1 Create/delete album", async (t) => { + await t.click(Selector(".nav-albums")); + const countAlbums = await Selector("a.is-album").count; + await t.click(Selector("button.action-add")); + const countAlbumsAfterCreate = await Selector("a.is-album").count; + const NewAlbum = await Selector("a.is-album").nth(0).getAttribute("data-uid"); + await t.expect(countAlbumsAfterCreate).eql(countAlbums + 1); + await page.selectFromUID(NewAlbum); + await page.deleteSelected(); + const countAlbumsAfterDelete = await Selector("a.is-album").count; + await t.expect(countAlbumsAfterDelete).eql(countAlbumsAfterCreate - 1); }); -test('#2 Update album', async t => { - await t - .click(Selector('.nav-albums')) - .typeText(Selector('.p-albums-search input'), 'Holiday') - .pressKey('enter'); - const AlbumUid = await Selector('div.p-album').nth(0).getAttribute('data-uid'); - await t - .expect(Selector('h3.action-title-edit').nth(0).innerText).contains('Holiday') - .click(Selector('.action-title-edit').nth(0)) - .typeText(Selector('.input-title input'), 'Animals', { replace: true }) - .expect(Selector('.input-description textarea').value).eql('') - .expect(Selector('.input-category input').value).eql('') - .typeText(Selector('.input-description textarea'), 'All my animals') - .typeText(Selector('.input-category input'), 'Pets') - .pressKey('enter') - .click('.action-confirm') - .click(Selector('div.p-album').nth(0)); - //const request1 = await logger.requests[0].response.body; - const PhotoCount = await Selector('div.p-photo').count; - await t - .expect(Selector('.v-card__text').nth(0).innerText).contains('All my animals') - .expect(Selector('div').withText("Animals").exists).ok() - .click(Selector('.nav-photos')); - const FirstPhotoUid = await Selector('div.p-photo').nth(0).getAttribute('data-uid'); - const SecondPhotoUid = await Selector('div.p-photo').nth(1).getAttribute('data-uid'); - await page.selectFromUID(FirstPhotoUid); - await page.selectFromUID(SecondPhotoUid); - await page.addSelectedToAlbum('Animals'); - await t - .click(Selector('.nav-albums')); - logger.clear(); - await t - .click(Selector('.input-category i')) - .click(Selector('div[role="listitem"]').withText('Family')); - //const request3 = await logger.requests[0].response.body; - logger.clear(); - await t - .expect(Selector('h3.action-title-edit').nth(0).innerText).contains('Christmas') - .click(Selector('.nav-albums')) - .click('.action-reload') - .click(Selector('.input-category i')) - .click(Selector('div[role="listitem"]').withText('All Categories'), {timeout: 55000}); - //const request4 = await logger.requests[0].response.body; - await t - .click(Selector('div.p-album').withAttribute('data-uid', AlbumUid)); - //const request5 = await logger.requests[0].response.body; - const PhotoCountAfterAdd = await Selector('div.p-photo').count; - await t - .expect(PhotoCountAfterAdd).eql(PhotoCount + 2); - await page.selectFromUID(FirstPhotoUid); - await page.selectFromUID(SecondPhotoUid); - await page.removeSelected(); - await t - .click('.action-reload'); - const PhotoCountAfterDelete = await Selector('div.p-photo').count; - logger.clear(); - await t - .expect(PhotoCountAfterDelete).eql(PhotoCountAfterAdd - 2) - .click(Selector('.action-edit')) - .typeText(Selector('.input-title input'), 'Holiday', { replace: true }) - .expect(Selector('.input-description textarea').value).eql('All my animals') - .expect(Selector('.input-category input').value).eql('Pets') - .click(Selector('.input-description textarea')) - .pressKey('ctrl+a delete') - .pressKey('enter') - .click(Selector('.input-category input')) - .pressKey('ctrl+a delete') - .pressKey('enter') - .click('.action-confirm') - .click('.action-reload') - .click(Selector('.nav-albums')) - .expect(Selector('div').withText("Holiday").visible).ok() - .expect(Selector('div').withText("Animals").exists).notOk(); +test("#2 Update album", async (t) => { + await t + .click(Selector(".nav-albums")) + .typeText(Selector(".p-albums-search input"), "Holiday") + .pressKey("enter"); + const AlbumUid = await Selector("a.is-album").nth(0).getAttribute("data-uid"); + await t + .expect(Selector("button.action-title-edit").nth(0).innerText) + .contains("Holiday") + .click(Selector(".action-title-edit").nth(0)) + .typeText(Selector(".input-title input"), "Animals", { replace: true }) + .expect(Selector(".input-description textarea").value) + .eql("") + .expect(Selector(".input-category input").value) + .eql("") + .typeText(Selector(".input-description textarea"), "All my animals") + .typeText(Selector(".input-category input"), "Pets") + .pressKey("enter") + .click(".action-confirm") + .click(Selector("a.is-album").nth(0)); + const PhotoCount = await Selector("div.is-photo").count; + await t + .expect(Selector(".v-card__text").nth(0).innerText) + .contains("All my animals") + .expect(Selector("div").withText("Animals").exists) + .ok() + .click(Selector(".nav-browse")); + await page.search("photo:true"); + const FirstPhotoUid = await Selector("div.is-photo.type-image").nth(0).getAttribute("data-uid"); + const SecondPhotoUid = await Selector("div.is-photo.type-image").nth(1).getAttribute("data-uid"); + await page.selectFromUIDInFullscreen(FirstPhotoUid); + await page.selectPhotoFromUID(SecondPhotoUid); + await page.addSelectedToAlbum("Animals"); + await t.click(Selector(".nav-albums")); + await t + .click(Selector(".input-category i")) + .click(Selector('div[role="listitem"]').withText("Family")); + await t + .expect(Selector("button.action-title-edit").nth(0).innerText) + .contains("Christmas") + .click(Selector(".nav-albums")) + .click(".action-reload") + .click(Selector(".input-category i")) + .click(Selector('div[role="listitem"]').withText("All Categories"), { timeout: 55000 }); + await t.click(Selector("a.is-album").withAttribute("data-uid", AlbumUid)); + const PhotoCountAfterAdd = await Selector("div.is-photo").count; + await t.expect(PhotoCountAfterAdd).eql(PhotoCount + 2); + await page.selectPhotoFromUID(FirstPhotoUid); + await page.selectPhotoFromUID(SecondPhotoUid); + await page.removeSelected(); + await t.click(".action-reload"); + const PhotoCountAfterDelete = await Selector("div.is-photo").count; + await t + .expect(PhotoCountAfterDelete) + .eql(PhotoCountAfterAdd - 2) + .click(Selector(".action-edit")) + .typeText(Selector(".input-title input"), "Holiday", { replace: true }) + .expect(Selector(".input-description textarea").value) + .eql("All my animals") + .expect(Selector(".input-category input").value) + .eql("Pets") + .click(Selector(".input-description textarea")) + .pressKey("ctrl+a delete") + .pressKey("enter") + .click(Selector(".input-category input")) + .pressKey("ctrl+a delete") + .pressKey("enter") + .click(".action-confirm") + .click(".action-reload") + .click(Selector(".nav-albums")) + .expect(Selector("div").withText("Holiday").visible) + .ok() + .expect(Selector("div").withText("Animals").exists) + .notOk(); }); //TODO test download itself + clipboard count after download -test('#3 Download album', async t => { - await t.click(Selector('.nav-albums')); - const FirstAlbum = await Selector('div.p-album').nth(0).getAttribute('data-uid'); - await page.selectFromUID(FirstAlbum); - const clipboardCount = await Selector('span.count-clipboard'); - await t - .expect(clipboardCount.textContent).eql("1") - .click(Selector('button.action-menu')) - .expect(Selector('button.action-download').visible).ok(); +test("#3 Download album", async (t) => { + 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"); + await t + .expect(clipboardCount.textContent) + .eql("1") + .click(Selector("button.action-menu")) + .expect(Selector("button.action-download").visible) + .ok(); }); -test('#4 View folders', async t => { - await page.openNav(); - await t - .click(Selector('.nav-albums + div')) - .click(Selector('.nav-folders')) - .expect(Selector('a').withText('BotanicalGarden').visible).ok() - .expect(Selector('a').withText('Kanada').visible).ok() - .expect(Selector('a').withText('KorsikaAdventure').visible).ok(); +test("#4 View folders", async (t) => { + await page.openNav(); + await t + .click(Selector(".nav-folders")) + .expect(Selector("a").withText("BotanicalGarden").visible) + .ok() + .expect(Selector("a").withText("Kanada").visible) + .ok() + .expect(Selector("a").withText("KorsikaAdventure").visible) + .ok(); }); -test('#5 View calendar', async t => { - logger.clear(); - await t - .click(Selector('.nav-calendar')) - .expect(Selector('a').withText('May 2019').visible).ok() - .expect(Selector('a').withText('October 2019').visible).ok(); +test("#5 View calendar", async (t) => { + await t + .click(Selector(".nav-calendar")) + .expect(Selector("a").withText("May 2019").visible) + .ok() + .expect(Selector("a").withText("October 2019").visible) + .ok(); }); //TODO test that sharing link works as expected -test('#6 Create sharing link', async t => { - await t.click(Selector('.nav-albums')); - const FirstAlbum = await Selector('div.p-album').nth(0).getAttribute('data-uid'); - await page.selectFromUID(FirstAlbum); - const clipboardCount = await Selector('span.count-clipboard'); - 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)); - const InitialUrl = await (Selector('.action-url').innerText); - const InitialSecret = await (Selector('.input-secret input').value) - const InitialExpire = await (Selector('div.v-select__selections').innerText); - await t - .expect(InitialUrl).notContains('secretfortesting') - .expect(InitialExpire).eql('Never') - .typeText(Selector('.input-secret input'), 'secretForTesting', { replace: true }) - .click(Selector('.input-expires input')) - .click(Selector('div').withText('After 1 day').parent('div[role="listitem"]')) - .click(Selector('button.action-save')) - .click(Selector('button.action-close')) - .click(Selector('button.action-share')) - .click(Selector('div.v-expansion-panel__header__icon').nth(0)); - const UrlAfterChange = await (Selector('.action-url').innerText); - const ExpireAfterChange = await (Selector('div.v-select__selections').innerText); - await t - .expect(UrlAfterChange).contains('secretfortesting') - .expect(ExpireAfterChange).eql('After 1 day') - .typeText(Selector('.input-secret input'), InitialSecret, { replace: true }) - .click(Selector('.input-expires input')) - .click(Selector('div').withText('Never').parent('div[role="listitem"]')) - .click(Selector('button.action-save')) - .click(Selector('div.v-expansion-panel__header__icon')); - const LinkCount = await (Selector('.action-url').count); - await t - .click('.action-add-link'); - const LinkCountAfterAdd = await (Selector('.action-url').count); - await t - .expect(LinkCountAfterAdd).eql(LinkCount + 1) - .click(Selector('div.v-expansion-panel__header__icon')) - .click(Selector('.action-delete')); - const LinkCountAfterDelete = await (Selector('.action-url').count); - await t - .expect(LinkCountAfterDelete).eql(LinkCountAfterAdd - 1) -}); \ No newline at end of file +test("#6 Create, Edit, delete sharing link", async (t) => { + 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"); + 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)); + const InitialUrl = await Selector(".action-url").innerText; + const InitialSecret = await Selector(".input-secret input").value; + const InitialExpire = await Selector("div.v-select__selections").innerText; + await t + .expect(InitialUrl) + .notContains("secretfortesting") + .expect(InitialExpire) + .eql("Never") + .typeText(Selector(".input-secret input"), "secretForTesting", { replace: true }) + .click(Selector(".input-expires input")) + .click(Selector("div").withText("After 1 day").parent('div[role="listitem"]')) + .click(Selector("button.action-save")) + .click(Selector("button.action-close")) + .click(Selector("button.action-share")) + .click(Selector("div.v-expansion-panel__header__icon").nth(0)); + const UrlAfterChange = await Selector(".action-url").innerText; + const ExpireAfterChange = await Selector("div.v-select__selections").innerText; + await t + .expect(UrlAfterChange) + .contains("secretfortesting") + .expect(ExpireAfterChange) + .eql("After 1 day") + .typeText(Selector(".input-secret input"), InitialSecret, { replace: true }) + .click(Selector(".input-expires input")) + .click(Selector("div").withText("Never").parent('div[role="listitem"]')) + .click(Selector("button.action-save")) + .click(Selector("div.v-expansion-panel__header__icon")); + const LinkCount = await Selector(".action-url").count; + await t.click(".action-add-link"); + const LinkCountAfterAdd = await Selector(".action-url").count; + await t + .expect(LinkCountAfterAdd) + .eql(LinkCount + 1) + .click(Selector("div.v-expansion-panel__header__icon")) + .click(Selector(".action-delete")); + const LinkCountAfterDelete = await Selector(".action-url").count; + await t.expect(LinkCountAfterDelete).eql(LinkCountAfterAdd - 1); +}); diff --git a/frontend/tests/acceptance/library/import.js b/frontend/tests/acceptance/library/import.js index 4b963d30a..dbfe3da37 100644 --- a/frontend/tests/acceptance/library/import.js +++ b/frontend/tests/acceptance/library/import.js @@ -1,14 +1,12 @@ -import { Selector } from 'testcafe'; -import testcafeconfig from '../testcafeconfig'; +import { Selector } from "testcafe"; +import testcafeconfig from "../testcafeconfig"; import Page from "../page-model"; 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 => { +test("#1 Import files from folder using copy", async t => { await t .click(Selector('.nav-labels')); await page.search('bakery'); @@ -16,7 +14,6 @@ test('#1 Import files from folder using copy', async t => { .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); await t .click(Selector('.nav-library')) - //TODO Connecting... error must be moved somewhere else .click(Selector('#tab-library-import')) .click(Selector('.input-import-folder input'), {timeout: 5000}) .click(Selector('div.v-list__tile__title').withText('/Bäckerei')) @@ -28,5 +25,5 @@ test('#1 Import files from folder using copy', async t => { .click(Selector('.action-reload')); await page.search('bakery'); await t - .expect(Selector('.p-label').visible).ok(); + .expect(Selector('.is-label').visible).ok(); }); \ No newline at end of file diff --git a/frontend/tests/acceptance/library/originals.js b/frontend/tests/acceptance/library/originals.js index 9f56b85e7..8f6ff4712 100644 --- a/frontend/tests/acceptance/library/originals.js +++ b/frontend/tests/acceptance/library/originals.js @@ -6,7 +6,6 @@ fixture `Test index` .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('.nav-labels')); @@ -14,8 +13,29 @@ test('#1 Index files from folder', async t => { await t .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok() .click(Selector('.nav-moments')) - .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); + .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok() + .click(Selector('.nav-calendar')); + await page.search('December 2013'); await t + .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok() + .click(Selector('.nav-folders')); + await page.search('Moment'); + await t + .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); + await page.openNav(); + await t + .click(Selector('.nav-places + div > i')) + .click(Selector('.nav-states')); + await page.search('KwaZulu'); + await t + .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); + await page.openNav(); + await t + .click(Selector('.nav-library+div>i')) + .click(Selector('.nav-originals')) + .click(Selector('.is-folder').withText('moment')) + .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); + await t .click(Selector('.nav-library')) .click(Selector('#tab-library-index')) .click(Selector('.input-index-folder input')) @@ -28,8 +48,32 @@ test('#1 Index files from folder', async t => { .click(Selector('.action-reload')); await page.search('cheetah'); await t - .expect(Selector('.p-label').visible).ok() + .expect(Selector('.is-label').visible).ok() .click(Selector('.nav-moments')) .click(Selector('a').withText('South Africa 2013')) - .expect(Selector('.p-photo').visible).ok(); + .expect(Selector('.is-photo').visible).ok() + .click(Selector('.nav-calendar')) + .click(Selector('.action-reload')); + await page.search('December 2013'); + await t + .expect(Selector('.is-album').visible).ok() + .click(Selector('.nav-folders')) + .click(Selector('.action-reload')); + await page.search('Moment'); + await t + .expect(Selector('.is-album').visible).ok(); + await page.openNav(); + await t + .click(Selector('.nav-places+div>i')) + .click(Selector('.nav-states')) + .click(Selector('.action-reload')); + await page.search('KwaZulu'); + await t + .expect(Selector('.is-album').visible).ok(); + await page.openNav(); + await t + .click(Selector('.nav-library+div>i')) + .click(Selector('.nav-originals')) + .click(Selector('.action-reload')) + .expect(Selector('.is-folder').withText('moment').visible, {timeout: 60000}).ok(); }); \ No newline at end of file