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 labels` .page`${testcafeconfig.url}` .requestHooks(logger); const page = new Page(); test('#1 Remove/Activate Add/Delete Label from photo', async t => { await t.click(Selector('.nav-labels')); const countImportantLabels = await Selector('div.p-label').count; await t .click(Selector('button.action-show-all')); const countAllLabels = await Selector('div.p-label').count; await t .expect(countAllLabels).gt(countImportantLabels) .click(Selector('button.action-show-important')); await page.search('beacon'); const LabelBeacon = await Selector('div.p-label').nth(0).getAttribute('data-uid'); await t .click(Selector('div.p-label').withAttribute('data-uid', LabelBeacon)); const PhotoBeacon = await Selector('div.p-photo').nth(0).getAttribute('data-uid'); await t .click(Selector('.action-title-edit').withAttribute('data-uid', PhotoBeacon)); const PhotoTitle = await (Selector('.input-title input').value); const PhotoKeywords = await (Selector('.input-keywords textarea').value); await t .expect(PhotoKeywords).contains('beacon') .click(Selector('#tab-labels')) .click(Selector('button.action-remove'), {timeout: 5000}) .typeText(Selector('.input-label input'), 'Test') .click(Selector('button.p-photo-label-add')) .click(Selector('#tab-details')); const PhotoTitleAfterEdit = await (Selector('.input-title input').value); const PhotoKeywordsAfterEdit = await (Selector('.input-keywords textarea').value); await t .expect(PhotoKeywordsAfterEdit).contains('test') .expect(PhotoTitleAfterEdit).notContains('Beacon') .expect(PhotoKeywordsAfterEdit).notContains('beacon') .click(Selector('.action-close')) .click(Selector('.nav-labels')); await page.search('beacon'); await t .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); await page.search('test'); const LabelTest = await Selector('div.p-label').nth(0).getAttribute('data-uid'); await t .click(Selector('div.p-label').withAttribute('data-uid', LabelTest)) .click(Selector('.action-title-edit').withAttribute('data-uid', PhotoBeacon)) .click(Selector('#tab-labels')) .click(Selector('.action-delete'), {timeout: 5000}) .click(Selector('.action-on')) .click(Selector('#tab-details')); const PhotoTitleAfterUndo = await (Selector('.input-title input').value); const PhotoKeywordsAfterUndo = await (Selector('.input-keywords textarea').value); await t .expect(PhotoKeywordsAfterUndo).contains('beacon') .expect(PhotoKeywordsAfterUndo).notContains('test') .click(Selector('.action-close')) .click(Selector('.nav-labels')); await page.search('test'); await t .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); await page.search('beacon'); await t .expect(Selector('div').withAttribute('data-uid', LabelBeacon).visible).ok(); }); //TODO check title of second image after index test('#2 Rename Label', async t => { await t.click(Selector('.nav-labels')); await page.search('zebra'); const LabelZebra = await Selector('div.p-label').nth(0).getAttribute('data-uid'); await t .click(Selector('div.p-label a').nth(0)); const FirstPhotoZebra = await Selector('div.p-photo').nth(0).getAttribute('data-uid'); const SecondPhotoZebra = await Selector('div.p-photo').nth(1).getAttribute('data-uid'); await t .click(Selector('.action-title-edit').withAttribute('data-uid', FirstPhotoZebra)); const FirstPhotoTitle = await (Selector('.input-title input').value); const FirstPhotoKeywords = await (Selector('.input-keywords textarea').value); await t .expect(FirstPhotoTitle).contains('Zebra') .expect(FirstPhotoKeywords).contains('zebra') .click(Selector('#tab-labels')) .click(Selector('div.p-inline-edit')) .typeText(Selector('.input-rename input'), 'Horse', { replace: true }) .pressKey('enter') .click(Selector('#tab-details')); const FirstPhotoTitleAfterEdit = await (Selector('.input-title input').value); const FirstPhotoKeywordsAfterEdit = await (Selector('.input-keywords textarea').value); await t .expect(FirstPhotoTitleAfterEdit).contains('Horse') .expect(FirstPhotoKeywordsAfterEdit).contains('horse') .expect(FirstPhotoTitleAfterEdit).notContains('Zebra') .click(Selector('.action-close')) .click(Selector('.nav-labels')); await page.search('horse'); await t .expect(Selector('div').withAttribute('data-uid', LabelZebra).visible).ok() .click(Selector('div.p-label').withAttribute('data-uid', LabelZebra)) .expect(Selector('div').withAttribute('data-uid', SecondPhotoZebra).visible).ok() .click(Selector('.action-title-edit').withAttribute('data-uid', FirstPhotoZebra)) .click(Selector('#tab-labels')) .click(Selector('div.p-inline-edit')) .typeText(Selector('.input-rename input'), 'Zebra', { replace: true }) .pressKey('enter') .click(Selector('.action-close')) .click(Selector('.nav-labels')); await page.search('horse'); await t .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok(); }); test('#3 Add label to album', async t => { await t .click(Selector('.nav-albums')) .typeText(Selector('.p-albums-search input'), 'Christmas') .pressKey('enter'); const AlbumUid = await Selector('div.p-album').nth(0).getAttribute('data-uid'); await t .click(Selector('div.p-album').withAttribute('data-uid', AlbumUid)); const PhotoCount = await Selector('div.p-photo').count; await t .click(Selector('.nav-labels')); await page.search('landscape'); const LabelLandscape = await Selector('div.p-label').nth(1).getAttribute('data-uid'); await t .click(Selector('div.p-label').withAttribute('data-uid', LabelLandscape)); 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 .click('.nav-labels'); await page.selectFromUID(LabelLandscape); const clipboardCount = await Selector('span.count-clipboard'); await t .expect(clipboardCount.textContent).eql("1"); await page.addSelectedToAlbum('Christmas'); await t .click(Selector('.nav-albums')) .click(Selector('div.p-album').withAttribute('data-uid', AlbumUid)); const PhotoCountAfterAdd = await Selector('div.p-photo').count; await t .expect(PhotoCountAfterAdd).eql(PhotoCount + 2); await page.selectFromUID(FirstPhotoLandscape); await page.selectFromUID(SecondPhotoLandscape); await page.removeSelected(); await t .click('.action-reload'); const PhotoCountAfterDelete = await Selector('div.p-photo').count; await t .expect(PhotoCountAfterDelete).eql(PhotoCountAfterAdd - 2); }); test('#4 Delete label', async t => { await t .click(Selector('.nav-labels')); await page.search('dome'); const LabelDome = await Selector('div.p-label').nth(0).getAttribute('data-uid'); await t .click(Selector('div.p-label').withAttribute('data-uid', LabelDome)); const FirstPhotoDome = await Selector('div.p-photo').nth(0).getAttribute('data-uid'); await t .click('.nav-labels') await page.selectFromUID(LabelDome); const clipboardCount = await Selector('span.count-clipboard'); await t .expect(clipboardCount.textContent).eql("1"); await page.deleteSelected(); await page.search('dome'); await t .expect(Selector('h3').withText('Couldn\'t find anything').visible).ok() .click('.nav-photos') .click(Selector('.action-title-edit').withAttribute('data-uid', FirstPhotoDome)) .click(Selector('#tab-labels')) .expect(Selector('td').withText('No labels found').visible).ok() .typeText(Selector('.input-label input'), 'Dome') .click(Selector('button.p-photo-label-add')); });