Feature: Minify Javascript
  In order reduce bytes sent to client and appease YSlow

  Background:
    Given current environment is "build"

  Scenario: Rendering inline js with the feature disabled
    Given "minify_javascript" feature is "disabled"
    And the Server is running at "minify-js-app"
    When I go to "/inline-js.html"
    Then I should see:
    """
    <script type='text/javascript'>
      //<![CDATA[
        ;(function() {
          this;
          should();
          all.be();
          on = { one: line };
        })();
      //]]>
    </script>
    <script>
      ;(function() {
        this;
        should();
        too();
      })();
    </script>
    <script type='text/javascript'>
      //<!--
      ;(function() {
        one;
        line();
        here();
      })();
      //-->
    </script>
    <script type='text/html'>
      I'm a jQuery {{template}}.
    </script>
    """
    
  Scenario: Rendering inline js with a passthrough minifier
    Given the Server is running at "passthrough-app"
    When I go to "/inline-js.html"
    Then I should see:
    """
    <script type='text/javascript'>
      //<![CDATA[
        ;(function() {
          this;
          should();
          all.be();
          on = { one: line };
        })();
      //]]>
    </script>
    <script>
      ;(function() {
        this;
        should();
        too();
      })();
    </script>
    <script type='text/javascript'>
      //<!--
      ;(function() {
        one;
        line();
        here();
      })();
      //-->
    </script>
    <script type='text/html'>
      I'm a jQuery {{template}}.
    </script>
    """

  Scenario: Rendering inline js with the feature enabled
    Given "minify_javascript" feature is "enabled"
    And the Server is running at "minify-js-app"
    When I go to "/inline-js.html"
    Then I should see:
    """
    <script type='text/javascript'>
      //<![CDATA[
    (function(){this,should(),all.be(),on={one:line}})();
      //]]>
    </script>
    <script>
      (function(){this,should(),too()})();
    </script>
    <script type='text/javascript'>
      //<!--
    (function(){one,line(),here()})();
      //-->
    </script>
    <script type='text/html'>
      I'm a jQuery {{template}}.
    </script>
    """
    
  Scenario: Rendering external js with the feature enabled
    Given "minify_javascript" feature is "enabled"
    And the Server is running at "minify-js-app"
    When I go to "/javascripts/js_test.js"
    Then I should see "1" lines
    When I go to "/more-js/other.js"
    Then I should see "1" lines
    
  Scenario: Rendering external js with a passthrough minifier
    And the Server is running at "passthrough-app"
    When I go to "/javascripts/js_test.js"
    Then I should see "8" lines

  Scenario: Rendering inline js (coffeescript) with the feature enabled
    Given "minify_javascript" feature is "enabled"
    And the Server is running at "minify-js-app"
    When I go to "/inline-coffeescript.html"
    Then I should see "6" lines
  
  Scenario: Rendering external js (coffeescript) with the feature enabled
    Given "minify_javascript" feature is "enabled"
    And the Server is running at "minify-js-app"
    When I go to "/javascripts/coffee_test.js"
    Then I should see "1" lines
    
  Scenario: Rendering inline js (coffeescript) with a passthrough minifier
    Given the Server is running at "passthrough-app"
    When I go to "/inline-coffeescript.html"
    Then I should see "16" lines
    
  Scenario: Rendering external js (coffeescript) with a passthrough minifier
    And the Server is running at "passthrough-app"
    When I go to "/javascripts/coffee_test.js"
    Then I should see "11" lines