package test;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.mock.SeamTest;
import org.jboss.seam.security.Identity;
import org.jboss.seam.theme.Theme;
import org.jboss.seam.theme.ThemeSelector;
import org.testng.annotations.Test;
import actions.BlogService;
import actions.SearchService;
import domain.Blog;
import domain.BlogEntry;
public class BlogTest extends SeamTest
{
@Test
public void testPost() throws Exception
{
new FacesRequest()
{
@Override
protected void updateModelValues() throws Exception
{
Identity.instance().setPassword("tokyo");
}
@Override
protected void invokeApplication() throws Exception
{
Identity.instance().authenticate();
}
}.run();
new FacesRequest("/post.xhtml")
{
@Override
protected void updateModelValues() throws Exception
{
BlogEntry entry = (BlogEntry) getInstance("blogEntry");
entry.setId("testing");
entry.setTitle("Integration testing Seam applications is easy!");
entry.setBody("This post is about SeamTest...");
}
@Override
protected void invokeApplication() throws Exception
{
// post now returns void
// assert invokeMethod("#{postAction.post}").equals("/index.xhtml");
invokeMethod("#{postAction.post}");
setOutcome("/index.xhtml");
}
@Override
protected void afterRequest()
{
assert isInvokeApplicationComplete();
assert !isRenderResponseBegun();
}
}.run();
new NonFacesRequest("/index.xhtml")
{
@Override
protected void renderResponse() throws Exception
{
List<BlogEntry> blogEntries = ( (Blog) getInstance(BlogService.class) ).getBlogEntries();
assert blogEntries.size()==4;
BlogEntry blogEntry = blogEntries.get(0);
assert blogEntry.getId().equals("testing");
assert blogEntry.getBody().equals("This post is about SeamTest...");
assert blogEntry.getTitle().equals("Integration testing Seam applications is easy!");
}
}.run();
new FacesRequest()
{
@Override
protected void invokeApplication() throws Exception
{
( (EntityManager) getInstance("entityManager") ).createQuery("delete from BlogEntry where id='testing'").executeUpdate();
}
}.run();
}
@Test
public void testLatest() throws Exception
{
new NonFacesRequest("/index.xhtml")
{
@Override
protected void renderResponse() throws Exception
{
assert ( (Blog) getInstance(BlogService.class) ).getBlogEntries().size()==3;
}
}.run();
}
@Test
public void testEntry() throws Exception
{
new NonFacesRequest("/entry.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("blogEntryId", "seamtext");
}
@Override
protected void renderResponse() throws Exception
{
BlogEntry blogEntry = (BlogEntry) Contexts.getEventContext().get("blogEntry");
assert blogEntry!=null;
assert blogEntry.getId().equals("seamtext");
// make sure the entry is really there
assert blogEntry.getBody().length() > 0;
assert blogEntry.getTitle().equals("Introducing Seam Text");
}
}.run();
}
@Test
public void testSearch() throws Exception
{
String id = new FacesRequest()
{
@Override
protected void updateModelValues() throws Exception
{
( (SearchService) getInstance(SearchService.class) ).setSearchPattern("seam");
}
@Override
protected String getInvokeApplicationOutcome()
{
return "/search.xhtml";
}
@Override
protected void afterRequest()
{
assert !isRenderResponseBegun();
}
}.run();
new NonFacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("searchPattern", "\"seam text\"");
}
@Override
protected void renderResponse() throws Exception
{
List<BlogEntry> results = (List<BlogEntry>) getInstance("searchResults");
assert results.size()==1;
}
}.run();
}
@Test
public void testSelectTheme() throws Exception
{
String id = new NonFacesRequest("/index.xhtml")
{
@Override
protected void renderResponse() throws Exception
{
List<SelectItem> themes = (List<SelectItem>) getValue("#{themeSelector.themes}");
assert themes.size() == 3;
assert themes.get(0).getLabel().equals("default");
assert themes.get(0).getLabel().equals("default");
assert "default".equals(getValue("#{themeSelector.theme}"));
assert "template.xhtml".equals(getValue("#{theme.template}"));
// we can't do interpolate the value correctly in these tests
// assert "/screen.css".equals(getValue("#{theme.css}"));
assert "foo".equals(getValue("#{theme.foo}"));
}
}.run();
new FacesRequest("/index.xhtml", id)
{
@Override
protected void updateModelValues() throws Exception {
setValue("#{themeSelector.theme}", "accessible");
}
@Override
protected void invokeApplication() throws Exception {
invokeAction("#{themeSelector.select}");
}
@Override
protected void renderResponse() throws Exception
{
assert "accessible".equals(getValue("#{themeSelector.theme}"));
//assert "/accessible.css".equals(getValue("#{theme.css}"));
assert "template.xhtml".equals(getValue("#{theme.template}"));
}
}.run();
new FacesRequest("/index.xhtml", id)
{
@Override
protected void invokeApplication() throws Exception {
invokeAction("#{themeSelector.selectTheme('printable')}");
}
@Override
protected void renderResponse() throws Exception
{
assert "printable".equals(getValue("#{themeSelector.theme}"));
//assert "/printable.css".equals(getValue("#{theme.css}"));
assert "print.xhtml".equals(getValue("#{theme.template}"));
Map<String, String> theme = Theme.instance();
assert theme.entrySet().size() == 2;
}
}.run();
new FacesRequest("/index.xhtml", id)
{
@Override
protected void updateModelValues() throws Exception {
setValue("#{themeSelector.theme}", "foo");
}
@Override
protected void invokeApplication() throws Exception {
invokeAction("#{themeSelector.select}");
}
@Override
protected void renderResponse() throws Exception
{
assert "foo".equals(getValue("#{themeSelector.theme}"));
Map<String, String> theme = Theme.instance();
ResourceBundle themeResources = ThemeSelector.instance().getThemeResourceBundle();
assert !themeResources.getKeys().hasMoreElements();
assert theme.entrySet().size() == 0;
boolean exception = false;
try
{
themeResources.getObject("bar");
}
catch (MissingResourceException e)
{
exception = true;
}
assert exception;
assert theme.get("bar").equals("bar");
}
}.run();
}
}