tests/e2e/specs/search.cy.ts
import {
addIdeasDifferentSet,
clearAndType,
} from '../cy-utils';
describe('The search page', () => {
it('Lists expressions and allows filtering', () => {
addIdeasDifferentSet();
const fr = 'français';
const en = 'english';
const es = 'español';
cy.get('#search-link').click();
assertNRows(17);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
testRow(4, ['1', 'português', 'bom Dia', 'bom Dia', 'Known']);
testRow(16, ['3', es, 'buenas noches 2', 'buenas noches 2', 'Unknown']);
filterLanguage(fr);
assertNRows(4);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
testRow(1, ['2', fr, 'bonne nuit', 'bonne nuit', 'Unknown']);
testRow(2, ['3', fr, 'bonsoir', 'bonsoir', 'Unknown']);
testRow(3, ['3', fr, 'bonsoir 2', 'bonsoir 2', 'Unknown']);
filterKnown('Known');
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
filterKnown('Unknown');
assertNRows(3);
testRow(0, ['2', fr, 'bonne nuit', 'bonne nuit', 'Unknown']);
testRow(1, ['3', fr, 'bonsoir', 'bonsoir', 'Unknown']);
testRow(2, ['3', fr, 'bonsoir 2', 'bonsoir 2', 'Unknown']);
filterKnown('');
filterText('2');
assertNRows(1);
testRow(0, ['3', fr, 'bonsoir 2', 'bonsoir 2', 'Unknown']);
filterLanguage('');
assertNRows(3);
testRow(0, ['3', fr, 'bonsoir 2', 'bonsoir 2', 'Unknown']);
testRow(1, ['3', en, 'good evening 2', 'good evening 2', 'Unknown']);
testRow(2, ['3', es, 'buenas noches 2', 'buenas noches 2', 'Unknown']);
filterText('à vous');
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
filterText('');
filterTextWithoutContext('à vous');
assertNoResult();
filterText('à vous');
filterTextWithoutContext('bonjour');
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
filterText('bonjour');
filterTextWithoutContext('bonjour');
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
filterText('^bonjour');
filterTextWithoutContext('bonjour');
assertNoResult();
cy.get('#regexSearch').check();
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
filterText('^bonjour$');
assertNoResult();
filterText('^bonjour');
filterTextWithoutContext('^bonjour$');
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
filterText('^bonjour .à vous.$');
assertNRows(1);
testRow(0, ['1', fr, 'bonjour (à vous)', 'bonjour', 'Known']);
cy.get('#regexSearch').uncheck();
assertNoResult();
});
it('Clicking on a row opens the idea page', () => {
addIdeasDifferentSet();
cy.get('#search-link').click();
assertNRows(17);
getRows().eq(6).click();
cy.url().should('contain', '/ideas/2');
});
it('New tab click', () => {
addIdeasDifferentSet();
cy.get('#search-link').click();
assertNRows(17);
getCellsForRow(6).eq(0).trigger('click', {ctrlKey: true});
// Cypress can't check if a new tab was opened
cy.url().should('contain', '/search');
});
});
function testRow(rowNumber: number, expectedData: string[]) {
const [ideaId, languageName, text, textWithoutContext, known] = expectedData;
getCellsForRow(rowNumber).eq(0).should('have.text', ideaId);
getCellsForRow(rowNumber).eq(1).should('have.text', languageName);
getCellsForRow(rowNumber).eq(2).should('have.text', text);
getCellsForRow(rowNumber).eq(3).should('have.text', textWithoutContext);
getCellsForRow(rowNumber).eq(4).should('have.text', known);
}
function getCellsForRow(n: number) {
return getRow(n).find('td');
}
function getRow(n: number) {
return getRows().eq(n);
}
function getRows() {
return cy.get('#table')
.find('tbody')
.find('tr');
}
function filterLanguage(language: string) {
cy.get('#searchLanguages').select(language);
}
function filterText(text: string) {
clearAndType('#searchText', text);
}
function filterTextWithoutContext(text: string) {
clearAndType('#searchTextWithoutContext', text);
}
function filterKnown(known: string) {
cy.get('#searchKnown').select(known);
}
function assertNRows(n: number) {
getRows().should('have.length', n);
}
function assertNoResult() {
getRows().should('have.text', 'No matching records found');
}