/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam.wiki.test.editing; import org.dbunit.operation.DatabaseOperation; import org.jboss.seam.core.Conversation; import org.jboss.seam.wiki.core.action.DocumentHome; import org.jboss.seam.wiki.core.dao.WikiNodeDAO; import org.jboss.seam.wiki.core.model.WikiDocument; import org.jboss.seam.wiki.core.model.WikiFile; import org.jboss.seam.mock.DBUnitSeamTest; import org.testng.annotations.Test; public class DocumentHistoryTests extends DBUnitSeamTest { protected void prepareDBUnitOperations() { beforeTestOperations.add( new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT) ); } @Test public void checkRevisions() throws Exception { new NonFacesRequest("/wiki.xhtml") { protected void beforeRequest() { setParameter("nodeId", "6"); } protected void renderResponse() throws Exception { DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class); assert docHome.getInstance().getId().equals(6l); // Init! WikiDocument doc = (WikiDocument)getValue("#{currentDocument}"); assert doc != null; assert doc.getId().equals(6l); assert doc.getRevision() == 3; assert docHome.isHistoricalFilesPresent(); assert docHome.getHistoricalFiles().size() == 3; // Sorted by revision descending assert docHome.getHistoricalFiles().get(0).getRevision() == 2; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(0).getLastModifiedByUsername().equals("admin"); assert docHome.getHistoricalFiles().get(0).getLastModifiedOn() != null; assert !docHome.getHistoricalFiles().get(0).getLastModifiedOn().equals(doc.getLastModifiedOn()); assert docHome.getHistoricalFiles().get(1).getRevision() == 1; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(1).getLastModifiedByUsername().equals("guest"); assert docHome.getHistoricalFiles().get(1).getLastModifiedOn() != null; assert !docHome.getHistoricalFiles().get(1).getLastModifiedOn().equals(doc.getLastModifiedOn()); assert docHome.getHistoricalFiles().get(2).getRevision() == 0; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(2).getLastModifiedByUsername().equals("admin"); assert docHome.getHistoricalFiles().get(2).getLastModifiedOn() == null; } }.run(); } @Test public void createDocumentCheckRevision() throws Exception { final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") { protected void beforeRequest() { setParameter("parentDirectoryId", "3"); } }.run(); new FacesRequest("/docEdit_d.xhtml") { protected void beforeRequest() { setParameter("cid", conversationId); } protected void invokeApplication() throws Exception { DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class); docHome.getInstance().setName("Test Name"); docHome.getTextEditor().setValue("Test Content"); assert invokeMethod("#{documentHome.persist}").equals("persisted"); } protected void renderResponse() throws Exception { WikiFile newFile = (WikiFile)getValue("#{documentHome.instance}"); // Shouldn't have any historical data WikiNodeDAO wikiNodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class); assert wikiNodeDAO.findHistoricalFiles(newFile).size() == 0; assert wikiNodeDAO.findNumberOfHistoricalFiles(newFile).equals(0l); } }.run(); } @Test public void updateDocumentCheckRevisions() throws Exception { loginAdmin(); final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") { protected void beforeRequest() { setParameter("documentId", "6"); setParameter("parentDirectoryId", "3"); } }.run(); new FacesRequest("/docEdit_d.xhtml") { String oldContent; protected void beforeRequest() { setParameter("cid", conversationId); } protected void invokeApplication() throws Exception { assert Conversation.instance().isLongRunning(); DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class); assert docHome.getInstance().getId().equals(6l); // Init! docHome.syncInstanceToEditor(docHome.getParentNode().getId(), docHome.getInstance()); docHome.getTextEditor().setValue("New text"); docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance()); docHome.setMinorRevision(false); assert invokeMethod("#{documentHome.update}").equals("updated"); } }.run(); new NonFacesRequest("/wiki.xhtml") { protected void beforeRequest() { setParameter("nodeId", "6"); } protected void renderResponse() throws Exception { DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class); assert docHome.getInstance().getId().equals(6l); // Init! assert docHome.isHistoricalFilesPresent(); assert docHome.getHistoricalFiles().size() == 4; // Sorted by revision descending assert docHome.getHistoricalFiles().get(0).getRevision() == 3; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(0).getLastModifiedByUsername().equals("admin"); assert docHome.getHistoricalFiles().get(0).getLastModifiedOn() != null; assert docHome.getHistoricalFiles().get(1).getRevision() == 2; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(1).getLastModifiedByUsername().equals("admin"); assert docHome.getHistoricalFiles().get(1).getLastModifiedOn() != null; assert docHome.getHistoricalFiles().get(2).getRevision() == 1; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(2).getLastModifiedByUsername().equals("guest"); assert docHome.getHistoricalFiles().get(2).getLastModifiedOn() != null; assert docHome.getHistoricalFiles().get(3).getRevision() == 0; assert docHome.getHistoricalFiles().get(0).getId().equals(6l); assert docHome.getHistoricalFiles().get(3).getLastModifiedByUsername().equals("admin"); assert docHome.getHistoricalFiles().get(3).getLastModifiedOn() == null; } }.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(); } }