/*
* #%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.api;
import com.google.common.collect.ImmutableMap;
import org.junit.After;
import org.junit.Test;
import org.wisdom.api.cookies.FlashCookie;
import org.wisdom.api.cookies.SessionCookie;
import org.wisdom.api.http.Context;
import org.wisdom.api.http.Request;
import org.wisdom.api.templates.Template;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import static org.mockito.Mockito.*;
/**
* Checks the default controller.
*/
public class DefaultControllerTest {
@After
public void tearDown() {
Context.CONTEXT.remove();
}
@Test
public void testAccessToContext() {
EmptyController controller = new EmptyController();
Context context = mock(Context.class);
Context.CONTEXT.set(context);
assertThat(controller.context()).isSameAs(context);
}
@Test(expected = IllegalStateException.class)
public void testAccessToContextWhenContextNotSet() {
EmptyController controller = new EmptyController();
controller.context();
}
@Test
public void testLoggerAccess() {
EmptyController controller = new EmptyController();
assertThat(controller.logger()).isNotNull();
assertThat(controller.logger().getName()).isEqualTo(EmptyController.class.getName());
controller.logger().info("test logging");
assertThat(controller.logger()).isSameAs(controller.logger());
}
@Test
public void testAccessToRequestFlashAndSession() {
EmptyController controller = new EmptyController();
Context context = mock(Context.class);
Context.CONTEXT.set(context);
Request request = mock(Request.class);
SessionCookie session = mock(SessionCookie.class);
FlashCookie flash = mock(FlashCookie.class);
when(context.request()).thenReturn(request);
when(context.session()).thenReturn(session);
when(context.flash()).thenReturn(flash);
assertThat(controller.context()).isSameAs(context);
assertThat(controller.session()).isSameAs(session);
assertThat(controller.flash()).isSameAs(flash);
assertThat(controller.request()).isSameAs(request);
// Try to set data and verify
controller.flash("foo", "bar");
verify(controller.flash(), times(1)).put("foo", "bar");
controller.flash("foo");
verify(controller.flash(), times(1)).get("foo");
controller.session("foo", "bar");
verify(controller.session(), times(1)).put("foo", "bar");
controller.session("foo");
verify(controller.session(), times(1)).get("foo");
}
@Test
public void testEmptyTemplateRendering() {
EmptyController controller = new EmptyController();
Context context = mock(Context.class);
Context.CONTEXT.set(context);
Template template = mock(Template.class);
controller.render(template);
verify(template, times(1)).render(controller);
}
@Test
public void testTemplateRenderingWithMap() {
EmptyController controller = new EmptyController();
Context context = mock(Context.class);
Context.CONTEXT.set(context);
Template template = mock(Template.class);
Map<String, Object> parameters = ImmutableMap.<String, Object>of("foo", "bar");
controller.render(template, parameters);
verify(template, times(1)).render(controller, parameters);
}
@Test
public void testTemplateRenderingWithVarAgs() {
EmptyController controller = new EmptyController();
Context context = mock(Context.class);
Context.CONTEXT.set(context);
Template template = mock(Template.class);
Object[] parameters = new Object[]{"foo", "bar", "baz", 1};
controller.render(template, parameters);
//noinspection unchecked
verify(template, times(1)).render(any(Controller.class), any(Map.class));
}
@Test
public void testIllegalTemplateRenderingWithVarAgs() {
EmptyController controller = new EmptyController();
Context context = mock(Context.class);
Context.CONTEXT.set(context);
Template template = mock(Template.class);
// Bad key, the third argument must be a String
Object[] parameters = new Object[]{"foo", "bar", 1, "baz"};
try {
controller.render(template, parameters);
fail("The third argument should have been seen as illegal");
} catch (IllegalArgumentException e) {
// ok.
}
// Illegal number of argument
parameters = new Object[]{"foo", "bar", "baz"};
try {
controller.render(template, parameters);
fail("The fourth argument is missing, it should have been detected");
} catch (IllegalArgumentException e) {
// ok.
}
}
private class EmptyController extends DefaultController {
}
}