/**
* Copyright (C) 2013-2015 all@code-story.net
*
* 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
*/
package net.codestory.http.templating.helpers;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import net.codestory.http.compilers.CompilerFacade;
import net.codestory.http.io.Resources;
import net.codestory.http.misc.Env;
import org.junit.Test;
import com.github.jknack.handlebars.Context;
import com.github.jknack.handlebars.Handlebars;
import com.github.jknack.handlebars.Options;
import com.github.jknack.handlebars.TagType;
import com.github.jknack.handlebars.Template;
public class AssetsHelperSourceTest {
static Env env = Env.prod();
static Resources resources = new Resources(env);
static CompilerFacade compilers = new CompilerFacade(env, resources);
static AssetsHelperSource assetsHelper = new AssetsHelperSource(true, resources, compilers);
@Test
public void script() {
CharSequence script = assetsHelper.script("js/script.js", null);
assertThat(script).hasToString("<script src=\"js/script.js?1ae2bed766fa2ed618a9b9048ba41fe094d3f117\"></script>");
}
@Test
public void script_without_extension() {
CharSequence script = assetsHelper.script("js/script", null);
assertThat(script).hasToString("<script src=\"js/script.js?1ae2bed766fa2ed618a9b9048ba41fe094d3f117\"></script>");
}
@Test
public void script_with_async_tag() {
CharSequence script = assetsHelper.script("js/script.js", options("async", null));
assertThat(script).hasToString("<script src=\"js/script.js?1ae2bed766fa2ed618a9b9048ba41fe094d3f117\" async></script>");
}
@Test
public void script_with_defer_tag() {
CharSequence script = assetsHelper.script("js/script.js", options("defer", null));
assertThat(script).hasToString("<script src=\"js/script.js?1ae2bed766fa2ed618a9b9048ba41fe094d3f117\" defer></script>");
}
@Test
public void coffee_script() {
CharSequence script = assetsHelper.script("js/anotherscript", null);
assertThat(script).hasToString("<script src=\"js/anotherscript.js?a72b9bd02a15f1307e6f60ac502675a8a24e8581\"></script>");
}
@Test
public void literate_coffee_script() {
CharSequence script = assetsHelper.script("js/literate", null);
assertThat(script).hasToString("<script src=\"js/literate.js?186398dc8855a3a68030391d7c81e9aa683d478b\"></script>");
}
@Test
public void unknown_script() {
CharSequence script = assetsHelper.script("unknown.js", null);
assertThat(script).hasToString("<script src=\"unknown.js\"></script>");
}
@Test
public void multiple_scripts() {
CharSequence script = assetsHelper.script(asList("js/script", "js/anotherscript"), null);
assertThat(script).hasToString(
"<script src=\"js/script.js?1ae2bed766fa2ed618a9b9048ba41fe094d3f117\"></script>\n" +
"<script src=\"js/anotherscript.js?a72b9bd02a15f1307e6f60ac502675a8a24e8581\"></script>"
);
}
@Test
public void css() {
CharSequence css = assetsHelper.css("assets/style.css", null);
assertThat(css).hasToString("<link rel=\"stylesheet\" href=\"assets/style.css?80fa881ffa6af083a80845467622c6185949a47b\">");
}
@Test
public void css_without_extension() {
CharSequence css = assetsHelper.css("assets/style", null);
assertThat(css).hasToString("<link rel=\"stylesheet\" href=\"assets/style.css?80fa881ffa6af083a80845467622c6185949a47b\">");
}
@Test
public void css_with_media_tag() {
CharSequence css = assetsHelper.css("assets/style.css", options("media", "screen"));
assertThat(css).hasToString("<link rel=\"stylesheet\" href=\"assets/style.css?80fa881ffa6af083a80845467622c6185949a47b\" media=\"screen\">");
}
@Test
public void less() {
CharSequence css = assetsHelper.css("assets/anotherstyle", null);
assertThat(css).hasToString("<link rel=\"stylesheet\" href=\"assets/anotherstyle.css?dcec144afa669dc921a4c9069d4c7d96fe28a833\">");
}
@Test
public void unknown_css() {
CharSequence script = assetsHelper.css("unknown.css", null);
assertThat(script).hasToString("<link rel=\"stylesheet\" href=\"unknown.css\">");
}
@Test
public void multiple_css() {
CharSequence css = assetsHelper.css(asList("assets/style", "assets/anotherstyle"), null);
assertThat(css).hasToString(
"<link rel=\"stylesheet\" href=\"assets/style.css?80fa881ffa6af083a80845467622c6185949a47b\">\n" +
"<link rel=\"stylesheet\" href=\"assets/anotherstyle.css?dcec144afa669dc921a4c9069d4c7d96fe28a833\">"
);
}
static Options options(String key, String value) {
return new Options.Builder(mock(Handlebars.class), "tag", TagType.SECTION, mock(Context.class), mock(Template.class))
.setHash(singletonMap(key, value))
.build();
}
}