const page = {
  fillOutQueryInNavBar(query) {
    // Click the magnifying glass
    cy.get('ds-header [data-test="header-search-icon"]').click();
    // Fill out a query in input that appears
    cy.get('ds-header [data-test="header-search-box"]').type(query);
  },
  submitQueryByPressingEnter() {
    cy.get('ds-header [data-test="header-search-box"]').type('{enter}');
  },
  submitQueryByPressingIcon() {
    cy.get('ds-header [data-test="header-search-icon"]').click();
  },
};

describe('Search from Navigation Bar', () => {
  // NOTE: these tests currently assume this query will return results!
  const query = Cypress.env('DSPACE_TEST_SEARCH_TERM');

  it('should go to search page with correct query if submitted (from home)', () => {
    cy.visit('/');
    // This is the GET command that will actually run the search
    cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
    // Run the search
    page.fillOutQueryInNavBar(query);
    page.submitQueryByPressingEnter();
    // New URL should include query param
    cy.url().should('include', 'query='.concat(query));
    // Wait for search results to come back from the above GET command
    cy.wait('@search-results');
    // At least one search result should be displayed
    cy.get('[data-test="list-object"]').should('be.visible');
  });

  it('should go to search page with correct query if submitted (from search)', () => {
    cy.visit('/search');
    // This is the GET command that will actually run the search
    cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
    // Run the search
    page.fillOutQueryInNavBar(query);
    page.submitQueryByPressingEnter();
    // New URL should include query param
    cy.url().should('include', 'query='.concat(query));
    // Wait for search results to come back from the above GET command
    cy.wait('@search-results');
    // At least one search result should be displayed
    cy.get('[data-test="list-object"]').should('be.visible');
  });

  it('should allow user to also submit query by clicking icon', () => {
    cy.visit('/');
    // This is the GET command that will actually run the search
    cy.intercept('GET', '/server/api/discover/search/objects*').as('search-results');
    // Run the search
    page.fillOutQueryInNavBar(query);
    page.submitQueryByPressingIcon();
    // New URL should include query param
    cy.url().should('include', 'query='.concat(query));
    // Wait for search results to come back from the above GET command
    cy.wait('@search-results');
    // At least one search result should be displayed
    cy.get('[data-test="list-object"]').should('be.visible');
  });
});