/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.gadgetcontainer.view;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import static org.easymock.EasyMock.*;
import org.junit.Before;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
import java.io.File;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import com.globant.katari.hibernate.coreuser.domain.CoreUser;
import javax.servlet.http.HttpServletResponse;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.web.servlet.ModelAndView;
import com.globant.katari.gadgetcontainer.SpringTestUtils;
import org.springframework.context.ApplicationContext;
import com.globant.katari.shindig.domain.Application;
import com.globant.katari.gadgetcontainer.domain.CustomizableGadgetGroup;
import com.globant.katari.gadgetcontainer.domain.GadgetGroupRepository;
import com.globant.katari.gadgetcontainer.domain.SampleUser;
import com.globant.katari.gadgetcontainer.application.ListApplicationsCommand;
public class DirectoryDoTest {
private String gadgetXmlUrl = "file:///" + new File(
"target/test-classes/SampleGadget.xml").getAbsolutePath();
private ApplicationContext appContext;
private GadgetGroupRepository repository;
@Before
public void setUp() throws Exception {
appContext = SpringTestUtils.getContext();
repository = ((GadgetGroupRepository) appContext.getBean(
"gadgetcontainer.gadgetGroupRepository"));
repository.getHibernateTemplate().bulkUpdate("delete from GadgetInstance");
repository.getHibernateTemplate().bulkUpdate("delete from GadgetGroup");
repository.getHibernateTemplate().bulkUpdate("delete from CoreUser");
repository.getHibernateTemplate().execute(new HibernateCallback<Object>() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
session.createSQLQuery("delete from supported_views").executeUpdate();
return null;
}
});
repository.getHibernateTemplate().bulkUpdate("delete from Application");
}
@SuppressWarnings("unchecked")
@Test
public void test() throws Exception {
CoreUser user = new SampleUser("me");
repository.getHibernateTemplate().saveOrUpdate(user);
user = (CoreUser) repository.getHibernateTemplate().find("from CoreUser")
.get(0);
CustomizableGadgetGroup group;
group = new CustomizableGadgetGroup(user, "gadget group", "default", 2);
repository.getHibernateTemplate().saveOrUpdate(group);
Application app = new Application(gadgetXmlUrl);
repository.getHibernateTemplate().saveOrUpdate(app);
// Sets the currently logged on user
SpringTestUtils.setLoggedInUser(user);
ViewCommandController controller;
controller = (ViewCommandController) appContext.getBean("/directory.do");
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintWriter writer = new PrintWriter(os);
MockHttpServletRequest request;
request = new MockHttpServletRequest("GET", "directory.do");
request.setParameter("gadgetGroupName", "gadget group");
HttpServletResponse response = createMock(HttpServletResponse.class);
response.addHeader("Content-type", "application/json");
expect(response.getWriter()).andReturn(writer);
replay(response);
ModelAndView mv;
mv = controller.handleRequest(request, response);
assertThat(mv.getViewName(), is("directory.ftl"));
assertThat(mv.getModel().get("command"), is(ListApplicationsCommand.class));
assertThat(mv.getModel().get("result"), is(List.class));
List<Application> applications;
applications = (List<Application>) mv.getModel().get("result");
assertThat(applications.get(0).getTitle(), is("Test title"));
}
}