/// <reference types="Cypress" />

context('Aliasing', () => {
  beforeEach(() => {
    cy.visit('https://example.cypress.io/commands/aliasing');
  });

  it('.as() - alias a DOM element for later use', () => {
    // https://on.cypress.io/as

    // Alias a DOM element for use later
    // We don't have to traverse to the element
    // later in our code, we reference it with @

    cy.get('.as-table')
      .find('tbody>tr')
      .first()
      .find('td')
      .first()
      .find('button')
      .as('firstBtn');

    // when we reference the alias, we place an
    // @ in front of its name
    cy.get('@firstBtn').click();

    cy.get('@firstBtn')
      .should('have.class', 'btn-success')
      .and('contain', 'Changed');
  });

  it('.as() - alias a route for later use', () => {
    // Alias the route to wait for its response
    cy.server();
    cy.route('GET', 'comments/*').as('getComment');

    // we have code that gets a comment when
    // the button is clicked in scripts.js
    cy.get('.network-btn').click();

    // https://on.cypress.io/wait
    cy.wait('@getComment')
      .its('status')
      .should('eq', 200);
  });
});
