From 6d50f4963efe2943de9ad1e0e4fb6d81e2427f94 Mon Sep 17 00:00:00 2001 From: Louise Davies Date: Wed, 11 Oct 2023 14:22:54 +0100 Subject: [PATCH] #1152 - fix more e2e tests --- .github/workflows/ci-build.yml | 4 - .../src/card/cardView.component.tsx | 4 +- .../cypress/e2e/search/datafileSearch.cy.ts | 2 +- .../e2e/search/investigationSearch.cy.ts | 3 +- .../cypress/e2e/searchBoxContainer.cy.ts | 2 +- .../cypress/e2e/searchPageContainer.cy.ts | 148 ++++++++++-------- .../public/res/default.json | 2 +- .../src/search/sortSelect.component.test.tsx | 8 +- .../src/search/sortSelect.component.tsx | 4 +- .../src/searchBoxContainer.component.test.tsx | 2 +- 10 files changed, 98 insertions(+), 81 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 676858ab4..0bfda40ea 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -455,10 +455,6 @@ jobs: - name: Start API run: cd datagateway-api/; nohup poetry run python -m datagateway_api.src.main > api-output.txt & - # DEBUG - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - # E2E tests - name: Setup Node.js uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3 diff --git a/packages/datagateway-common/src/card/cardView.component.tsx b/packages/datagateway-common/src/card/cardView.component.tsx index 0553715e5..e64f1678a 100644 --- a/packages/datagateway-common/src/card/cardView.component.tsx +++ b/packages/datagateway-common/src/card/cardView.component.tsx @@ -541,7 +541,7 @@ const CardView = (props: CardViewProps): React.ReactElement => { native value={results} inputProps={{ - name: 'Max Results', + name: t('app.max_results'), id: 'select-max-results', }} className="tour-dataview-max-results" @@ -565,7 +565,7 @@ const CardView = (props: CardViewProps): React.ReactElement => { (i > 0 && totalDataCount > resOptions[i - 1]) ) .map((n, i) => ( - ))} diff --git a/packages/datagateway-search/cypress/e2e/search/datafileSearch.cy.ts b/packages/datagateway-search/cypress/e2e/search/datafileSearch.cy.ts index 23cf3ad56..170f3ff5e 100644 --- a/packages/datagateway-search/cypress/e2e/search/datafileSearch.cy.ts +++ b/packages/datagateway-search/cypress/e2e/search/datafileSearch.cy.ts @@ -6,7 +6,7 @@ describe('Datafile search tab', () => { // only the datafile tab is tested here, so we want to hide investigation & dataset tabs // open search type dropdown menu cy.findByRole('button', { name: 'Types (3)' }).click(); - // uncheck investigation + cy.findByRole('listbox').within(() => { cy.findByRole('checkbox', { name: 'Investigation checkbox' }).click(); cy.findByRole('checkbox', { name: 'Dataset checkbox' }).click(); diff --git a/packages/datagateway-search/cypress/e2e/search/investigationSearch.cy.ts b/packages/datagateway-search/cypress/e2e/search/investigationSearch.cy.ts index 329c24513..d7ca201f0 100644 --- a/packages/datagateway-search/cypress/e2e/search/investigationSearch.cy.ts +++ b/packages/datagateway-search/cypress/e2e/search/investigationSearch.cy.ts @@ -99,7 +99,7 @@ describe('Investigation search tab', () => { }); }); - it('should be able to open the details panel of a specific row', () => { + it.only('should be able to open the details panel of a specific row', () => { // type in search query cy.findByRole('searchbox', { name: 'Search text input' }).type('dog'); // uncheck my data @@ -120,7 +120,6 @@ describe('Investigation search tab', () => { cy.findByText('Majority about dog idea bag summer', { exact: false, }).should('exist'); - cy.findByText('02/02/2013').should('exist'); cy.findByText('INVESTIGATION 52').should('exist'); }); }); diff --git a/packages/datagateway-search/cypress/e2e/searchBoxContainer.cy.ts b/packages/datagateway-search/cypress/e2e/searchBoxContainer.cy.ts index 3f404aeb2..668a680de 100644 --- a/packages/datagateway-search/cypress/e2e/searchBoxContainer.cy.ts +++ b/packages/datagateway-search/cypress/e2e/searchBoxContainer.cy.ts @@ -98,7 +98,7 @@ describe('SearchBoxContainer Component', () => { 'Advanced Search Tips' ); - cy.get('[data-testid="advanced-help-link"]').click(); + cy.findByRole('link', { name: 'neutron AND scattering' }).click(); cy.url().should('contain', '?searchText=neutron+AND+scattering'); }); }); diff --git a/packages/datagateway-search/cypress/e2e/searchPageContainer.cy.ts b/packages/datagateway-search/cypress/e2e/searchPageContainer.cy.ts index 8c9ef3e7a..0c951b818 100644 --- a/packages/datagateway-search/cypress/e2e/searchPageContainer.cy.ts +++ b/packages/datagateway-search/cypress/e2e/searchPageContainer.cy.ts @@ -9,18 +9,12 @@ describe('SearchPageContainer Component', () => { it('Should default back to 10 when any result is manually entered into the url', () => { cy.login(); - cy.intercept('**/investigations/count?where=%7B%22id*').as( - 'investigationsCount' - ); - cy.intercept('**/investigations?*').as('investigations'); - cy.visit('/search/data?view=card&results=100'); + + cy.visit('/search/data?view=card&results=100&restrict=false'); cy.get('[aria-label="Submit search"]').click(); - cy.wait(['@investigations', '@investigations', '@investigationsCount'], { - timeout: 10000, - }); - cy.get('[aria-label="card-buttons"]', { timeout: 10000 }).should( + cy.get('[data-testid="card"]:visible', { timeout: 10000 }).should( 'have.length', 10 ); @@ -28,15 +22,10 @@ describe('SearchPageContainer Component', () => { it('should be able to load results from a URL', () => { cy.login(); - cy.intercept('**/investigations/count?where=%7B%22id*').as( - 'investigationsCount' - ); - cy.intercept('**/investigations?*').as('investigations'); - cy.visit('/search/data/?view=card&searchText=test&startDate=2000-06-01'); - cy.wait(['@investigations', '@investigations', '@investigationsCount'], { - timeout: 10000, - }); + cy.visit( + '/search/data/?view=card&searchText=test&startDate=2000-06-01&restrict=false' + ); //Should be in card view cy.get('[aria-label="page view Display as table"]').should('exist'); @@ -62,18 +51,13 @@ describe('SearchPageContainer Component', () => { beforeEach(() => { cy.login(); cy.clearDownloadCart(); - cy.visit('/search/data/'); - cy.intercept('**/investigations/count?where=%7B%22id*').as( - 'investigationsCount' - ); - cy.intercept('**/investigations?*').as('investigations'); + cy.visit('/search/data'); cy.get('#filled-search').type('dog'); + cy.findByRole('checkbox', { name: 'My data' }).click(); + cy.get('[aria-label="Submit search"]').click(); - cy.wait(['@investigations', '@investigations', '@investigationsCount'], { - timeout: 10000, - }); }); it('should load correctly', () => { @@ -83,7 +67,7 @@ describe('SearchPageContainer Component', () => { cy.get('#container-search-table').should('exist'); cy.location().should((loc) => { - expect(loc.search).to.eq('?searchText=dog'); + expect(loc.search).to.eq('?searchText=dog&restrict=false'); }); // check table DOI link is correct @@ -102,28 +86,24 @@ describe('SearchPageContainer Component', () => { }); it('should be able to click clear filters button to clear filters', () => { - cy.url().then((url) => { - cy.get('#container-search-filters').should('exist'); - cy.get('[aria-label="Filter by Title"]').type('ba'); - cy.wait( - ['@investigations', '@investigations', '@investigationsCount'], - { - timeout: 10000, - } + cy.url().then((unfilteredUrl) => { + cy.visit( + '/search/data?searchText=dog&restrict=false&filters={"Investigation.type.name":["INVESTIGATIONTYPE+2"],"InvestigationInstrument.instrument.name":["INSTRUMENT+14"]}' ); - cy.get('[aria-rowcount="4"]').should('exist'); + cy.get('[aria-rowcount="1"]').should('exist'); cy.get('[aria-rowindex="1"] [aria-colindex="3"]').contains( 'Prove begin boy those always dream write inside. Cold drop season bill treat her wife. Nearly represent fire debate fish. Skin understand risk.' ); cy.get('[data-testid="clear-filters-button"]').click(); - cy.url().should('eq', url); + cy.url().should('eq', unfilteredUrl); }); }); - it('should be able to switch between tabs (and filters should not be lost)', () => { + // TODO: do we want this feature? + it.skip('should be able to switch between tabs (and filters should not be lost)', () => { cy.get('[aria-label="Search table"]') .contains('Investigation') .contains('5'); @@ -164,7 +144,7 @@ describe('SearchPageContainer Component', () => { ); cy.location().should((loc) => { - expect(loc.search).to.eq('?view=card&searchText=dog'); + expect(loc.search).to.eq('?view=card&searchText=dog&restrict=false'); }); // check card view DOI link is correct @@ -189,23 +169,29 @@ describe('SearchPageContainer Component', () => { ); cy.location().should((loc) => { - expect(loc.search).to.eq('?view=table&searchText=dog'); + expect(loc.search).to.eq('?view=table&searchText=dog&restrict=false'); }); }); it('should be able to scroll down and load more rows', () => { cy.get('[aria-label="Search text input"').clear(); cy.get('[aria-label="Submit search"]').click(); - cy.wait(['@investigations', '@investigations', '@investigationsCount'], { - timeout: 10000, + + cy.findByRole('tab', { name: 'Datafile' }).within(() => { + cy.findByText('300+').should('exist'); + cy.findByText('300+').click(); }); - cy.get('[aria-label="Search table"]') - .contains('Datafile') - .contains('300') - .click(); - cy.get('[aria-rowcount="50"]').should('exist'); - cy.get('[aria-label="grid"]').scrollTo('bottom'); - cy.get('[aria-rowcount="75"]').should('exist'); + cy.get('[data-testid="tabpanel-datafile"] [aria-label="grid"]').should( + 'be.visible' + ); + cy.get('[aria-rowcount="300"]').should('exist'); + cy.get('[data-testid="tabpanel-datafile"] [aria-label="grid"]').scrollTo( + 'bottom' + ); + cy.findByRole('tab', { name: 'Datafile' }).within(() => { + cy.findByText('600+').should('exist'); + }); + cy.get('[aria-rowcount="600"]').should('exist'); }); it('should be able to choose number of results to display', () => { @@ -214,12 +200,14 @@ describe('SearchPageContainer Component', () => { cy.get('[aria-label="Submit search"]').click(); cy.get('[aria-label="page view Display as cards"]').click(); - cy.get('select[id="select-max-results"]') + cy.findByRole('combobox', { + name: /Max Results/i, + }) .as('maxResultsSelect') .find('option:selected', { timeout: 10000 }) .should('have.text', '10'); - cy.get('[aria-label="card-buttons"]') - .as('cardButtons') + cy.get('[data-testid="card"]:visible') + .as('cards') .should('have.length', 10); cy.get('@maxResultsSelect').select('20'); @@ -227,7 +215,7 @@ describe('SearchPageContainer Component', () => { cy.get('@maxResultsSelect') .find('option:selected', { timeout: 10000 }) .should('have.text', '20'); - cy.get('@cardButtons').should('have.length', 20); + cy.get('@cards').should('have.length', 20); cy.get('@maxResultsSelect').select('30'); @@ -235,7 +223,7 @@ describe('SearchPageContainer Component', () => { .find('option:selected', { timeout: 10000 }) .should('have.text', '30'); - cy.get('@cardButtons').should('have.length', 30); + cy.get('@cards').should('have.length', 30); }); it('should be able to change page in card view', () => { @@ -274,8 +262,9 @@ describe('SearchPageContainer Component', () => { }); it('should display selection alert banner correctly', () => { - cy.get(`[aria-rowindex="1"] [aria-colindex="1"]`).click(); - cy.wait('@investigations', { timeout: 10000 }); + cy.get( + `[data-testid="tabpanel-investigation"] [aria-rowindex="1"] [aria-colindex="1"]` + ).click(); cy.get('[aria-label="selection-alert"]').should('exist'); cy.get('[aria-label="selection-alert-text"]') @@ -304,13 +293,10 @@ describe('SearchPageContainer Component', () => { cy.get('body').type('{esc}'); cy.get('[aria-label="Submit search"]').click(); - cy.wait(['@investigations', '@investigations', '@investigationsCount'], { - timeout: 10000, - }); cy.location().should((loc) => { expect(loc.search).to.eq( - '?searchText=dog&datafile=false&investigation=false¤tTab=dataset' + '?searchText=dog&datafile=false&investigation=false¤tTab=dataset&restrict=false' ); }); @@ -373,22 +359,56 @@ describe('SearchPageContainer Component', () => { cy.url().should('include', '/download'); }); - it('should be able to select a start date', () => { + it('should be able to select a start & end date', () => { cy.get('[aria-label="Start date input"]').type('2009-01-01'); cy.get('[aria-label="Submit search"]').click(); - cy.wait(['@investigations', '@investigations', '@investigationsCount'], { - timeout: 10000, - }); cy.location().should((loc) => { - expect(loc.search).to.contains('?searchText=dog&startDate=2009-01-01'); + expect(loc.search).to.contains( + '?searchText=dog&startDate=2009-01-01&restrict=false' + ); }); cy.get('[aria-label="Search table"]') .contains('Investigation') .contains('2') .should('exist'); + + cy.get('[aria-label="End date input"]').type('2013-01-01'); + + cy.get('[aria-label="Submit search"]').click(); + + cy.location().should((loc) => { + expect(loc.search).to.contains( + '?searchText=dog&startDate=2009-01-01&endDate=2013-01-01&restrict=false' + ); + }); + + cy.get('[aria-label="Search table"]') + .contains('Investigation') + .contains('1') + .should('exist'); + }); + + it.only('should be able to sort by different criteria', () => { + cy.get( + `[data-testid="tabpanel-investigation"] [aria-rowindex="1"] [aria-colindex="3"]` + ).contains('Majority about dog'); + + cy.findByLabelText('Sort by').click(); + + cy.findByRole('option', { name: 'Name' }).click(); + + cy.location().should((loc) => { + expect(loc.search).to.contains( + '?searchText=dog&restrict=false&sort=%7B%22name%22%3A%22asc%22%7D' + ); + }); + + cy.get( + `[data-testid="tabpanel-investigation"] [aria-rowindex="1"] [aria-colindex="3"]` + ).contains('Prove begin boy'); }); }); }); diff --git a/packages/datagateway-search/public/res/default.json b/packages/datagateway-search/public/res/default.json index 677ab0411..b0aa0d3ae 100644 --- a/packages/datagateway-search/public/res/default.json +++ b/packages/datagateway-search/public/res/default.json @@ -317,7 +317,7 @@ "description": "OR is the default behaviour for multiple terms: <6>neutron OR scattering is equivalent to <10>neutron scattering.

AND requires both terms on either side of the keyword must be present in the result: <22>neutron AND scattering.

+ requires the next term be present in the result: <34>+neutron +scattering.

NOT or - requires the next term not be present in the result: <48>-neutron NOT scattering.

Finally, brackets can be used to build complicated logic: <55>(+neutron -photon) AND (scattering OR diffraction).", "link1": "?searchText=neutron+OR+scattering", "link2": "?searchText=neutron+scattering", - "link3": "?searchText=scattering+AND+elastic", + "link3": "?searchText=neutron+AND+scattering", "link4": "?searchText=%2Bneutron+%2Bscattering", "link5": "?searchText=-neutron+NOT+scattering", "link6": "?searchText=(%2Bneutron+-photon)+AND+(scattering+OR+diffraction)" diff --git a/packages/datagateway-search/src/search/sortSelect.component.test.tsx b/packages/datagateway-search/src/search/sortSelect.component.test.tsx index 563b59766..bf4fc0255 100644 --- a/packages/datagateway-search/src/search/sortSelect.component.test.tsx +++ b/packages/datagateway-search/src/search/sortSelect.component.test.tsx @@ -16,7 +16,7 @@ describe('sortSelect', () => { ); // open the dropdown menu - await user.click(screen.getByRole('button', { name: 'sort._score' })); + await user.click(screen.getByRole('button', { name: /sort.label/ })); expect( await screen.findByRole('option', { name: 'sort.date_desc' }) @@ -46,7 +46,7 @@ describe('sortSelect', () => { ); // open the dropdown menu - await user.click(screen.getByRole('button', { name: 'sort._score' })); + await user.click(screen.getByRole('button', { name: /sort.label/ })); await user.selectOptions(screen.getByRole('listbox'), [ screen.getByRole('option', { name: 'sort.date_desc' }), ]); @@ -58,7 +58,7 @@ describe('sortSelect', () => { ); // open the dropdown menu - await user.click(screen.getByRole('button', { name: 'sort.date_desc' })); + await user.click(screen.getByRole('button', { name: /sort.label/ })); await user.selectOptions(screen.getByRole('listbox'), [ screen.getByRole('option', { name: 'sort.name_asc' }), ]); @@ -87,7 +87,7 @@ describe('sortSelect', () => { ); expect( - screen.getByRole('button', { name: 'sort.size_asc' }) + screen.getByRole('button', { name: 'sort.label sort.size_asc' }) ).toBeInTheDocument(); }); }); diff --git a/packages/datagateway-search/src/search/sortSelect.component.tsx b/packages/datagateway-search/src/search/sortSelect.component.tsx index 856d7dc77..d5fa34530 100644 --- a/packages/datagateway-search/src/search/sortSelect.component.tsx +++ b/packages/datagateway-search/src/search/sortSelect.component.tsx @@ -45,11 +45,13 @@ const SortSelectComponent = (): React.ReactElement => { maxWidth: 300, }} > - + {t('sort.label')}