/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam.wiki.test.plugin; import org.dbunit.operation.DatabaseOperation; import org.jboss.seam.contexts.Contexts; import org.jboss.seam.wiki.core.dao.WikiNodeDAO; import org.jboss.seam.wiki.core.feeds.FeedDAO; import org.jboss.seam.wiki.core.model.FeedEntry; import org.jboss.seam.wiki.core.model.WikiDirectory; import org.jboss.seam.wiki.core.model.WikiDocument; import org.jboss.seam.wiki.core.model.Role; import org.jboss.seam.wiki.plugin.forum.TopicHome; import org.jboss.seam.mock.DBUnitSeamTest; import org.testng.annotations.Test; public class TopicHomeTests extends DBUnitSeamTest { protected void prepareDBUnitOperations() { beforeTestOperations.add( new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT) ); beforeTestOperations.add( new DataSetOperation("org/jboss/seam/wiki/test/ForumData.dbunit.xml", DatabaseOperation.INSERT) ); } @Test public void newTopic() throws Exception { final String conversationId = new FacesRequest() { protected void updateModelValues() throws Exception { WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l); Contexts.getPageContext().set("currentDirectory", forumDir); Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile()); } protected void invokeApplication() throws Exception { TopicHome home = (TopicHome)getInstance(TopicHome.class); home.newTopic(); } }.run(); new FacesRequest() { protected void beforeRequest() { setParameter("cid", conversationId); } protected void updateModelValues() throws Exception { WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l); Contexts.getPageContext().set("currentDirectory", forumDir); Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile()); } protected void invokeApplication() throws Exception { TopicHome home = (TopicHome)getInstance(TopicHome.class); home.getInstance().setName("New Topic"); home.getTextEditor().setValue("This is a new topic."); assert invokeMethod("#{topicHome.persist}") == null; Long newId = (Long)getValue("#{topicHome.instance.id}"); WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDocument newTopic = nodeDAO.findWikiDocument(newId); assert newTopic.getAreaNumber().equals(100l); FeedDAO feedDAO = (FeedDAO)getInstance(FeedDAO.class); FeedEntry fe = feedDAO.findFeedEntry(newTopic); assert fe.getTitle().equals("[Seam Users] New Topic"); assert newTopic.getHeaderMacrosString().contains("forumPosting"); assert newTopic.getFooterMacrosString().contains("forumReplies"); assert newTopic.getContent().equals("This is a new topic."); assert !newTopic.isNameAsTitle(); assert newTopic.isEnableCommentForm(); assert newTopic.isEnableComments(); assert newTopic.isEnableCommentsOnFeeds(); assert newTopic.getWriteAccessLevel() == Role.ADMINROLE_ACCESSLEVEL; } }.run(); } @Test public void newStickyTopic() throws Exception { loginAdmin(); final String conversationId = new FacesRequest() { protected void updateModelValues() throws Exception { WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l); Contexts.getPageContext().set("currentDirectory", forumDir); Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile()); } protected void invokeApplication() throws Exception { TopicHome home = (TopicHome)getInstance(TopicHome.class); home.newTopic(); } }.run(); new FacesRequest() { protected void beforeRequest() { setParameter("cid", conversationId); } protected void updateModelValues() throws Exception { WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l); Contexts.getPageContext().set("currentDirectory", forumDir); Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile()); } protected void invokeApplication() throws Exception { TopicHome home = (TopicHome)getInstance(TopicHome.class); home.getInstance().setName("New Topic"); home.getTextEditor().setValue("This is a new topic."); home.setSticky(true); assert invokeMethod("#{topicHome.persist}") == null; Long newId = (Long)getValue("#{topicHome.instance.id}"); WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDocument newTopic = nodeDAO.findWikiDocument(newId); assert newTopic.getAreaNumber().equals(100l); FeedDAO feedDAO = (FeedDAO)getInstance(FeedDAO.class); FeedEntry fe = feedDAO.findFeedEntry(newTopic); assert fe.getTitle().equals("[Seam Users] New Topic"); assert newTopic.getHeaderMacrosString().contains("forumStickyPosting"); assert newTopic.getFooterMacrosString().contains("forumReplies"); assert newTopic.getContent().equals("This is a new topic."); assert !newTopic.isNameAsTitle(); assert newTopic.isEnableCommentForm(); assert newTopic.isEnableComments(); assert newTopic.isEnableCommentsOnFeeds(); } }.run(); } @Test public void newClosedTopic() throws Exception { loginAdmin(); final String conversationId = new FacesRequest() { protected void updateModelValues() throws Exception { WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l); Contexts.getPageContext().set("currentDirectory", forumDir); Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile()); } protected void invokeApplication() throws Exception { TopicHome home = (TopicHome)getInstance(TopicHome.class); home.newTopic(); } }.run(); new FacesRequest() { protected void beforeRequest() { setParameter("cid", conversationId); } protected void updateModelValues() throws Exception { WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDirectory forumDir = nodeDAO.findWikiDirectory(102l); Contexts.getPageContext().set("currentDirectory", forumDir); Contexts.getPageContext().set("currentDocument", forumDir.getDefaultFile()); } protected void invokeApplication() throws Exception { TopicHome home = (TopicHome)getInstance(TopicHome.class); home.getInstance().setName("New Topic"); home.getTextEditor().setValue("This is a new topic."); home.getInstance().setEnableComments(false); assert invokeMethod("#{topicHome.persist}") == null; Long newId = (Long)getValue("#{topicHome.instance.id}"); WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); WikiDocument newTopic = nodeDAO.findWikiDocument(newId); assert newTopic.getAreaNumber().equals(100l); FeedDAO feedDAO = (FeedDAO)getInstance(FeedDAO.class); FeedEntry fe = feedDAO.findFeedEntry(newTopic); assert fe.getTitle().equals("[Seam Users] New Topic"); assert newTopic.getHeaderMacrosString().contains("forumPosting"); assert newTopic.getFooterMacrosString().contains("forumReplies"); assert newTopic.getContent().equals("This is a new topic."); assert !newTopic.isNameAsTitle(); assert !newTopic.isEnableComments(); } }.run(); } private void loginAdmin() throws Exception { new FacesRequest() { protected void invokeApplication() throws Exception { setValue("#{identity.username}", "admin"); setValue("#{identity.password}", "admin"); invokeAction("#{identity.login}"); assert getValue("#{identity.loggedIn}").equals(true); } }.run(); } }