78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* global cy */
 | 
						|
 | 
						|
const search = query => {
 | 
						|
  cy.get('.ais-SearchBox').within(() => {
 | 
						|
    cy.get('input').type(query);
 | 
						|
  });
 | 
						|
 | 
						|
  cy.wait(300);
 | 
						|
};
 | 
						|
 | 
						|
const clear = () => {
 | 
						|
  cy.get('.ais-SearchBox').within(() => {
 | 
						|
    cy.get('input').clear();
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
describe('Search bar', () => {
 | 
						|
  before(() => {
 | 
						|
    cy.visit('/');
 | 
						|
  });
 | 
						|
 | 
						|
  beforeEach(() => {
 | 
						|
    clear();
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should render properly', () => {
 | 
						|
    cy.get('.ais-SearchBox').should('be.visible');
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should accept input and display hits', () => {
 | 
						|
    search('freeCodeCamp');
 | 
						|
 | 
						|
    cy.get('.ais-Hits-list').children().should('to.have.length.of.at.least', 1);
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should clear hits when input is cleared', () => {
 | 
						|
    search('freeCodeCamp');
 | 
						|
 | 
						|
    cy.get('.ais-Hits-list').children().should('to.have.length.of.at.least', 1);
 | 
						|
 | 
						|
    clear();
 | 
						|
 | 
						|
    cy.get('div.ais-Hits').should('not.exist');
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should show up to 8 hits when height >= 768px', () => {
 | 
						|
    cy.viewport(1300, 768);
 | 
						|
 | 
						|
    search('freeCodeCamp');
 | 
						|
 | 
						|
    cy.get('.ais-Hits-list').children().should('to.have.length.of', 8);
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should show up to 5 hits when height < 768px', () => {
 | 
						|
    cy.viewport(1300, 767);
 | 
						|
 | 
						|
    search('freeCodeCamp');
 | 
						|
 | 
						|
    cy.get('.ais-Hits-list').children().should('to.have.length.of', 5);
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should show no hits for queries that do not exist in the Algolia index', () => {
 | 
						|
    search('testtttt');
 | 
						|
 | 
						|
    cy.get('.ais-Hits-list').children().should('to.have.length.of', 0);
 | 
						|
 | 
						|
    cy.contains('No tutorials found');
 | 
						|
  });
 | 
						|
 | 
						|
  it('Should not redirect to the News search page if there are no hits', () => {
 | 
						|
    search('testtttt');
 | 
						|
 | 
						|
    cy.get('.ais-SearchBox-form').submit();
 | 
						|
 | 
						|
    cy.url('/');
 | 
						|
  });
 | 
						|
});
 |