import filterTests from "../support/filterTests"
const interact = require('../support/interact')

filterTests(["smoke", "all"], () => {
  context("Screen Tests", () => {
    before(() => {
      cy.login()
      cy.createTestApp()
      cy.navigateToFrontend()
    })

    it("Should successfully create a screen", () => {
      cy.createScreen("test")
      cy.get(interact.BODY).within(() => {
        cy.contains("/test").should("exist")
      })
    })

    it("Should update the url", () => {
      cy.createScreen("test with spaces")
      cy.get(interact.BODY).within(() => {
        cy.contains("/test-with-spaces").should("exist")
      })
    })

    it("should delete all screens then create first screen via button", () => {
      cy.deleteAllScreens()
      
      cy.contains("Create first screen").click()
      cy.get(interact.BODY, { timeout: 2000 }).should('contain', '/home')
    })

    it("Should create and filter screens by access level", () => {
      const accessLevels = ["Basic", "Admin", "Public", "Power"]

      for (const access of accessLevels){
        // Create screen with specified access level
        cy.createScreen(access, access)
        // Filter by access level and confirm screen visible
        cy.filterScreensAccessLevel(access)
        cy.get(interact.BODY).within(() => {
          cy.get(interact.NAV_ITEM).should('contain', access.toLowerCase())
        })
      }

      // Filter by All screens - Confirm all screens visible
      cy.filterScreensAccessLevel("All screens")
      cy.get(interact.BODY).should('contain', accessLevels[0])
      .and('contain', accessLevels[1])
      .and('contain', accessLevels[2])
      .and('contain', accessLevels[3])
    })
  })
})
