/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.editablepages.view;
import java.util.Map;
import static org.easymock.EasyMock.*;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import com.globant.katari.editablepages.TestUtils;
import org.springframework.validation.Errors;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import com.globant.katari.editablepages.domain.PageRepository;
import com.globant.katari.editablepages.domain.Page;
import com.globant.katari.editablepages.application.SavePageCommand;
public class PageEditControllerTest {
private PageRepository repository;
private PageEditController controller;
private SavePageCommand command;
@Before
public void setUp() throws Exception {
repository = TestUtils.getPageRepository();
TestUtils.deleteTestPages();
Page page;
// Creates two sample pages.
page = new Page("first.last", "page-1", "title", "content");
repository.save("site", page);
page = new Page("first.last", "page-2", "title", "content - 2");
page.publish();
repository.save("site", page);
command = createMock(SavePageCommand.class);
controller = new PageEditController(new FckEditorConfiguration()) {
protected Object createCommandBean() {
return command;
}
};
}
/* Simulates a GET request and tests the result.
*/
@Test
public void testGet() throws Exception {
// Sets up the request.
Page page = repository.findPageByName("site","page-2");
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("GET");
request.addParameter("id", String.valueOf(page.getId()));
// Sets up the response.
MockHttpServletResponse response = new MockHttpServletResponse();
// Prepares the command.
command.init();
// BE VERY CAREFUL. If you remove this, verify wont complain, probably
// because spring uses reflection to invoke getId();
command.setId(page.getId());
replay(command);
controller.handleRequest(request, response);
verify(command);
}
/* Simulates a POST request and tests the result.
*/
@Test
public void testPost() throws Exception {
// Sets up the request.
Page page = repository.findPageByName("site","page-2");
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.addParameter("id", String.valueOf(page.getId()));
// Sets up the response.
MockHttpServletResponse response = new MockHttpServletResponse();
expect(command.execute()).andReturn("page-2");
// BE VERY CAREFUL. If you remove this, verify wont complain, probably
// because spring uses reflection to invoke getId();
command.setId(page.getId());
replay(command);
controller.handleRequest(request, response);
verify(command);
}
@SuppressWarnings("unchecked")
@Test
public void onSubmit_elementId() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
Errors errors = createNiceMock(Errors.class);
Map model;
model = controller.referenceData(request, command, errors);
assertEquals(1l, model.get("elementId"));
model = controller.referenceData(request, command, errors);
assertEquals(2l, model.get("elementId"));
}
}