text: /**
   * Copyright 2021 ZUP IT SERVICOS EM TECNOLOGIA E INOVACAO SA
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  /// <reference types="cypress" />
  
  context('Cypress.Commands', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    // https://on.cypress.io/custom-commands
  
    it('.add() - create a custom command', () => {
      Cypress.Commands.add('console', {
        prevSubject: true,
      }, (subject, method) => {
        // the previous subject is automatically received
        // and the commands arguments are shifted
  
        // allow us to change the console method used
        method = method || 'log'
  
        // log the subject to the console
        // @ts-ignore TS7017
        console[method]('The subject is', subject)
  
        // whatever we return becomes the new subject
        // we don't want to change the subject so
        // we return whatever was passed in
        return subject
      })
  
      // @ts-ignore TS2339
      cy.get('button').console('info').then(($button) => {
        // subject is still $button
      })
    })
  })
  
  context('Cypress.Cookies', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    // https://on.cypress.io/cookies
    it('.debug() - enable or disable debugging', () => {
      Cypress.Cookies.debug(true)
  
      // Cypress will now log in the console when
      // cookies are set or cleared
      cy.setCookie('fakeCookie', '123ABC')
      cy.clearCookie('fakeCookie')
      cy.setCookie('fakeCookie', '123ABC')
      cy.clearCookie('fakeCookie')
      cy.setCookie('fakeCookie', '123ABC')
    })
  
    it('.preserveOnce() - preserve cookies by key', () => {
      // normally cookies are reset after each test
      cy.getCookie('fakeCookie').should('not.be.ok')
  
      // preserving a cookie will not clear it when
      // the next test starts
      cy.setCookie('lastCookie', '789XYZ')
      Cypress.Cookies.preserveOnce('lastCookie')
    })
  
    it('.defaults() - set defaults for all cookies', () => {
      // now any cookie with the name 'session_id' will
      // not be cleared before each new test runs
      Cypress.Cookies.defaults({
        preserve: 'session_id',
      })
    })
  })
  
  context('Cypress.arch', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    it('Get CPU architecture name of underlying OS', () => {
      // https://on.cypress.io/arch
      expect(Cypress.arch).to.exist
    })
  })
  
  context('Cypress.config()', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    it('Get and set configuration options', () => {
      // https://on.cypress.io/config
      let myConfig = Cypress.config()
  
      expect(myConfig).to.have.property('animationDistanceThreshold', 5)
      expect(myConfig).to.have.property('baseUrl', null)
      expect(myConfig).to.have.property('defaultCommandTimeout', 4000)
      expect(myConfig).to.have.property('requestTimeout', 5000)
      expect(myConfig).to.have.property('responseTimeout', 30000)
      expect(myConfig).to.have.property('viewportHeight', 660)
      expect(myConfig).to.have.property('viewportWidth', 1000)
      expect(myConfig).to.have.property('pageLoadTimeout', 60000)
      expect(myConfig).to.have.property('waitForAnimations', true)
  
      expect(Cypress.config('pageLoadTimeout')).to.eq(60000)
  
      // this will change the config for the rest of your tests!
      Cypress.config('pageLoadTimeout', 20000)
  
      expect(Cypress.config('pageLoadTimeout')).to.eq(20000)
  
      Cypress.config('pageLoadTimeout', 60000)
    })
  })
  
  context('Cypress.dom', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    // https://on.cypress.io/dom
    it('.isHidden() - determine if a DOM element is hidden', () => {
      let hiddenP = Cypress.$('.dom-p p.hidden').get(0)
      let visibleP = Cypress.$('.dom-p p.visible').get(0)
  
      // our first paragraph has css class 'hidden'
      expect(Cypress.dom.isHidden(hiddenP)).to.be.true
      expect(Cypress.dom.isHidden(visibleP)).to.be.false
    })
  })
  
  context('Cypress.env()', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    // We can set environment variables for highly dynamic values
  
    // https://on.cypress.io/environment-variables
    it('Get environment variables', () => {
      // https://on.cypress.io/env
      // set multiple environment variables
      Cypress.env({
        host: 'veronica.dev.local',
        api_server: 'http://localhost:8888/v1/',
      })
  
      // get environment variable
      expect(Cypress.env('host')).to.eq('veronica.dev.local')
  
      // set environment variable
      Cypress.env('api_server', 'http://localhost:8888/v2/')
      expect(Cypress.env('api_server')).to.eq('http://localhost:8888/v2/')
  
      // get all environment variable
      expect(Cypress.env()).to.have.property('host', 'veronica.dev.local')
      expect(Cypress.env()).to.have.property('api_server', 'http://localhost:8888/v2/')
    })
  })
  
  context('Cypress.log', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    it('Control what is printed to the Command Log', () => {
      // https://on.cypress.io/cypress-log
    })
  })
  
  context('Cypress.platform', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    it('Get underlying OS name', () => {
      // https://on.cypress.io/platform
      expect(Cypress.platform).to.be.exist
    })
  })
  
  context('Cypress.version', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    it('Get current version of Cypress being run', () => {
      // https://on.cypress.io/version
      expect(Cypress.version).to.be.exist
    })
  })
  
  context('Cypress.spec', () => {
    beforeEach(() => {
      cy.visit('https://example.cypress.io/cypress-api')
    })
  
    it('Get current spec information', () => {
      // https://on.cypress.io/spec
      // wrap the object so we can inspect it easily by clicking in the command log
      cy.wrap(Cypress.spec).should('include.keys', ['name', 'relative', 'absolute'])
    })
  })
  