package t5.webresources.tests

import geb.spock.GebReportingSpec
import org.apache.tapestry5.test.JettyRunner
import spock.lang.Shared

class WebResourcesSpec extends GebReportingSpec {

    @Shared
    def runner;

    def setupSpec() {
        runner = new JettyRunner("src/test/webapp", "/", 8080, 8081);

        runner.start()
    }

    def cleanupSpec() {
        if (runner != null)
            runner.stop()
    }

    def "CoffeeScript compilation"() {

        when:

        // Open index page
        go()

        waitFor { !$("body[data-page-initialized]").empty }

        then:

        // This text is buried inside a CoffeeScript file; for it to be present in the DOM
        // means that the CoffeeScript was compiled to JS and executed.
        $("#banner").text().trim() == "Index module loaded, bare!"
    }

    def "Less compilation"() {

        when:

        go()

        waitFor { !$("body[data-page-initialized]").empty }

        // Because the CoffeeScript may already be pre-compiled, it can outrace the Less compilation.
        // For some reason, the navbar is invisible (at least to Selenium) until the CSS loads.

        // waitFor { $(".navbar .dropdown-toggle").visible() }

        $(".navbar .dropdown-toggle").click()

        $(".navbar .dropdown-menu a", text: "MultiLess").click()

        waitFor { !$(".demo").empty }

        then:

        $(".demo").css("background-color") == "rgba(179, 179, 255, 1)"
    }
}
