package javango.contrib.admin.tests;
import java.io.CharArrayWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import com.google.inject.Injector;
import com.google.inject.Module;
import javango.contrib.freemarker.FreemarkerResponse;
import javango.contrib.hibernate.HibernateManager;
import javango.contrib.hibernate.HibernateModule;
import javango.contrib.hibernate.HibernateUtil;
import javango.contrib.admin.tests.Poll;
import javango.db.Manager;
import javango.http.HttpResponse;
import javango.http.HttpResponseRedirect;
import javango.test.Client;
import junit.framework.TestCase;
public class AdminTest extends TestCase {
Client c;
Injector injector;
@Override
protected void setUp() throws Exception {
super.setUp();
List<Module> modules = new ArrayList<Module>();
modules.add(new HibernateModule());
injector = new javango.contrib.admin.tests.AdminTestSettings().createInjector(modules);
Configuration cfg = injector.getInstance(HibernateUtil.class).getConfiguration();
new SchemaExport(cfg).drop(false, true);
new SchemaExport(cfg).create(false, true);
c = new Client(injector);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
c.close();
}
public void fixture(int ct) throws Exception {
injector.getInstance(HibernateUtil.class).getSession().beginTransaction();
for (int i=0; i<ct; i++) {
Poll p = new Poll();
p.setQuestion("AdminTestQuestion : " + i );
p.setPubDate(new Date());
Manager dao = new HibernateManager(injector.getInstance(HibernateUtil.class), Poll.class);
dao.save(p);
}
injector.getInstance(HibernateUtil.class).getSession().getTransaction().commit();
}
public void testAdminHomePage() throws Exception {
HttpResponse r = c.get("admin/");
assertTrue(r instanceof FreemarkerResponse);
FreemarkerResponse fr = (FreemarkerResponse)r;
Writer writer = new CharArrayWriter();
fr.renderToWriter(writer);
//System.out.println(writer.toString());
assertTrue(writer.toString().contains("<a href=\"./javango.contrib.admin.tests.Poll/\">Poll</a>"));
assertTrue(writer.toString().contains("<a href=\"./javango.contrib.admin.tests.Choice/\">Your Choice</a>"));
}
public void testPollList() throws Exception {
HttpResponse r = c.get("admin/javango.contrib.admin.tests.Poll/");
assertTrue(r instanceof FreemarkerResponse);
FreemarkerResponse fr = (FreemarkerResponse)r;
Writer writer = new CharArrayWriter();
fr.renderToWriter(writer);
//System.out.println(writer.toString());
assertTrue(writer.toString().contains("No Results"));
fixture(1);
r = c.get("admin/javango.contrib.admin.tests.Poll/");
assertTrue(r instanceof FreemarkerResponse);
fr = (FreemarkerResponse)r;
writer = new CharArrayWriter();
fr.renderToWriter(writer);
assertTrue(writer.toString().contains("AdminTestQuestion : 0"));
}
public void testAddPoll() throws Exception {
HttpResponse r = c.get("admin/javango.contrib.admin.tests.Poll/add/");
assertTrue(r instanceof FreemarkerResponse);
FreemarkerResponse fr = (FreemarkerResponse)r;
Writer writer = new CharArrayWriter();
fr.renderToWriter(writer);
System.out.println(writer.toString());
String expected =
"<tr><th><label for='id_pubDate'>Pub Date</label></th><td><input id=\"id_pubDate\" type=\"text\" name=\"pubDate\" /></td></tr>\n" +
"<tr><th><label for='id_question'>Question</label></th><td><input maxlength=\"255\" id=\"id_question\" type=\"text\" name=\"question\" /></td></tr>\n";
// TODO This is not 100% correct as the form could possibly be in this order even without the fieldset
assertTrue(writer.toString().contains(expected));
Map<String, String[]> params = new HashMap<String, String[]>();
params.put("question", new String[] {"Do you like cheese?"});
params.put("pubDate", new String[] {"01/02/2008"});
r = c.post("admin/javango.contrib.admin.tests.Poll/add/", params);
assertEquals(HttpResponseRedirect.class, r.getClass());
r = c.get("admin/javango.contrib.admin.tests.Poll/");
assertTrue(r instanceof FreemarkerResponse);
fr = (FreemarkerResponse)r;
writer = new CharArrayWriter();
fr.renderToWriter(writer);
assertTrue(writer.toString().contains("Do you like cheese?"));
}
// public void testAddChoice() throws Exception {
// fixture(1);
//
// HttpResponse r = c.get("admin/javango.contrib.admin.tests.Choice/add/");
// assertTrue(r instanceof FreemarkerResponse);
// FreemarkerResponse fr = (FreemarkerResponse)r;
// Map<String, Object> context = fr.getContext();
//// assertEquals(ModelChoiceField.class, context.get("poll").getClass());
//
// Map<String, String[]> params = new HashMap<String, String[]>();
// params.put("choice", new String[] {"I like the cheese"});
// params.put("poll", new String[] {"0"});
// params.put("votes", new String[] {"0"});
// r = c.post("admin/javango.contrib.admin.tests.Choice/add/", params);
// assertEquals(HttpResponseRedirect.class, r.getClass());
//
// r = c.get("admin/javango.contrib.admin.tests.Choice/");
// assertTrue(r instanceof FreemarkerResponse);
// fr = (FreemarkerResponse)r;
//// TODO assertTrue(((List)fr.getContext().get("object_list")).size() == 1);
// Writer writer = new CharArrayWriter();
// fr.renderToWriter(writer);
// assertTrue(writer.toString().contains("I like the cheese"));
//
// }
}