/* * #%L * Wisdom-Framework * %% * Copyright (C) 2013 - 2014 Wisdom Framework * %% * 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. * #L% */ package org.wisdom.test.parents; import com.google.common.collect.ImmutableList; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.wisdom.api.cookies.Cookie; import org.wisdom.api.http.HeaderNames; import org.wisdom.api.http.HttpMethod; import org.wisdom.api.router.Route; import java.io.File; import static org.assertj.core.api.Assertions.assertThat; /** * Checks the Fake Context development model and behavior. */ public class FakeContextTest { @Test public void testId() throws Exception { FakeContext context1 = new FakeContext(); FakeContext context2 = new FakeContext(); assertThat(context2.id()).isGreaterThan(context1.id()); } @Test public void testPath() throws Exception { FakeContext context = new FakeContext(); assertThat(context.path()).isNull(); context.setPath("/foo"); assertThat(context.path()).isEqualTo("/foo"); } @Test public void testFlash() throws Exception { FakeContext context = new FakeContext(); assertThat(context.flash().getCurrentFlashCookieData()).isEmpty(); assertThat(context.flash().getOutgoingFlashCookieData()).isEmpty(); context.flash().put("k", "v"); assertThat(context.flash().get("k")).isEqualTo("v"); } @Test public void testSession() throws Exception { FakeContext context = new FakeContext(); assertThat(context.session().getData()).isEmpty(); context.session().put("k", "v"); assertThat(context.session().get("k")).isEqualTo("v"); } @Test public void testCookie() throws Exception { FakeContext context = new FakeContext() .setCookie("hello", "wisdom") .setCookie(Cookie.cookie("test", "value").setComment("comment").build()); assertThat(context.cookie("hello").value()).isEqualTo("wisdom"); assertThat(context.cookie("test").value()).isEqualTo("value"); assertThat(context.cookie("test").comment()).isEqualTo("comment"); assertThat(context.cookie("none")).isNull(); assertThat(context.cookies().get("test")).isNotNull(); assertThat(context.cookies().get("none")).isNull(); assertThat(context.cookieValue("hello")).isEqualTo("wisdom"); assertThat(context.cookieValue("none")).isNull(); assertThat(context.hasCookie("hello")).isTrue(); assertThat(context.hasCookie("none")).isFalse(); context = new FakeContext(); assertThat(context.hasCookie("hello")).isFalse(); assertThat(context.hasCookie("none")).isFalse(); assertThat(context.cookies().get("none")).isNull(); } @Test public void testGetContextPath() throws Exception { assertThat(new FakeContext().contextPath()).isNull(); } @Test public void testParameter() throws Exception { FakeContext context = new FakeContext(); assertThat(context.parameter("none")).isNull(); assertThat(context.parameter("none", "hello")).isEqualTo("hello"); assertThat(context.parameterMultipleValues("none")).isEmpty(); context .setParameter("hello", "wisdom") .setParameter("multiple", ImmutableList.of("a", "b")); assertThat(context.parameter("hello")).isEqualTo("wisdom"); assertThat(context.parameter("hello", "nope")).isEqualTo("wisdom"); assertThat(context.parameter("multiple")).isEqualTo("a"); assertThat(context.parameterMultipleValues("multiple")).containsExactly("a", "b"); assertThat(context.parameters()).hasSize(2); } @Test public void testParameterAsInteger() throws Exception { FakeContext context = new FakeContext(); assertThat(context.parameterAsInteger("none")).isNull(); assertThat(context.parameterAsInteger("none", 1)).isEqualTo(1); context .setParameter("hello", "4"); assertThat(context.parameter("hello")).isEqualTo("4"); assertThat(context.parameterAsInteger("hello")).isEqualTo(4); assertThat(context.parameterAsInteger("hello", 1)).isEqualTo(4); } @Test public void testParameterAsBoolean() throws Exception { FakeContext context = new FakeContext(); assertThat(context.parameterAsBoolean("none")).isNull(); assertThat(context.parameterAsBoolean("none", true)).isTrue(); context .setParameter("hello", "true"); assertThat(context.parameterAsBoolean("hello")).isTrue(); assertThat(context.parameterAsBoolean("hello", false)).isTrue(); assertThat(context.parameters()).hasSize(1); } @Test public void testParameterFromPath() throws Exception { FakeContext context = new FakeContext(); assertThat(context.parameterFromPath("hello")).isNull(); assertThat(context.parameterFromPathAsInteger("hello")).isNull(); assertThat(context.parameterFromPathEncoded("hello")).isNull(); context.setParameter("hello", "wisdom") .setParameter("int", "1"); assertThat(context.parameterFromPath("hello")).isEqualTo("wisdom"); assertThat(context.parameterFromPathAsInteger("int")).isEqualTo(1); assertThat(context.parameterFromPathEncoded("hello")).isEqualTo("wisdom"); } @Test public void testHeader() throws Exception { FakeContext context = new FakeContext(); assertThat(context.headers()).isEmpty(); context.setHeader("h1", "v1").setHeader("h2", "a", "b"); assertThat(context.headers()).hasSize(2); assertThat(context.header("h1")).isEqualTo("v1"); assertThat(context.header("h2")).isEqualTo("a"); assertThat(context.headers("h2")).containsExactly("a", "b"); assertThat(context.header("none")).isNull(); assertThat(context.headers("none")).isEmpty(); } @Test public void testBody() throws Exception { FakeContext context = new FakeContext(); assertThat(context.body()).isNull(); assertThat(context.body(String.class)).isNull(); assertThat(context.reader()).isNull(); final String content = "<h1>Hello</h1>"; context.setBody(content); assertThat(context.body()).isEqualTo(content); assertThat(context.body(String.class)).isEqualTo(content); assertThat(IOUtils.toString(context.reader())).isEqualTo(content); } @Test public void testGetRoute() throws Exception { // route are not set by fake implementations FakeContext context = new FakeContext(); final Route route = new Route(HttpMethod.GET, "/", null, null); context.route(route); assertThat(context.route()).isEqualTo(route); } @Test public void testFormData() throws Exception { FakeContext context = new FakeContext(); assertThat(context.form()).isEmpty(); assertThat(context.files()).isEmpty(); assertThat(context.isMultipart()).isFalse(); context.setFormField("name", "wisdom") .setFormField("age", "1") .setFormField("file", new File("src/test/resources/foo.txt")); assertThat(context.form().get("name")).contains("wisdom"); assertThat(context.form().get("age")).contains("1"); assertThat(context.files()).hasSize(1); assertThat(context.file("file").name()).isEqualTo("foo.txt"); assertThat(context.file("file").field()).isEqualTo("file"); assertThat(context.isMultipart()).isTrue(); } @Test public void testRequest() throws Exception { FakeContext context = new FakeContext() .setParameter("hello", "wisdom") .setParameter("int", "2") .setParameter("bool", "true") .setCookie("cook", "ie") .setPath("/foo") .setHeader(HeaderNames.CONTENT_TYPE, "plain/text"); assertThat(context.request().contentType()).isEqualTo("plain/text"); assertThat(context.request().parameter("hello")).isEqualTo("wisdom"); assertThat(context.request().parameter("hello", "2")).isEqualTo("wisdom"); assertThat(context.request().parameter("hello2", "2")).isEqualTo("2"); assertThat(context.request().parameterMultipleValues("hello")).contains("wisdom"); assertThat(context.request().parameterAsInteger("int")).isEqualTo(2); assertThat(context.request().parameterAsInteger("int", 4)).isEqualTo(2); assertThat(context.request().parameterAsInteger("int2", 4)).isEqualTo(4); assertThat(context.request().parameterAsBoolean("bool")).isTrue(); assertThat(context.request().parameterAsBoolean("bool", false)).isTrue(); assertThat(context.request().parameterAsBoolean("bool2", true)).isTrue(); assertThat(context.request().headers()).hasSize(1); assertThat(context.request().getHeader(HeaderNames.CONTENT_TYPE)).isEqualTo("plain/text"); assertThat(context.request().path()).isEqualTo("/foo"); assertThat(context.request().cookie("cook").value()).isEqualTo("ie"); assertThat(context.request().cookie("none")).isNull(); assertThat(context.request().cookies().get("none")).isNull(); assertThat(context.request().cookies().get("cook").value()).isEqualTo("ie"); //Check null values. assertThat(context.request().method()).isNull(); assertThat(context.request().remoteAddress()).isNull(); assertThat(context.request().host()).isNull(); assertThat(context.request().username()).isNull(); assertThat(context.request().charset()).isNull(); assertThat(context.request().mediaType().toString()).isEqualTo("text/*"); assertThat(context.request().mediaTypes()).hasSize(1); assertThat(context.request().language()).isNull(); assertThat(context.request().languages()).isEmpty(); } }