📄 atomservlettest.java
字号:
package org.roller.presentation.atomapi;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.StringReader;import java.io.StringWriter;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;import javax.servlet.http.HttpServletResponse;import junit.framework.Test;import junit.framework.TestSuite;import org.jdom.Document;import org.jdom.input.SAXBuilder;import org.roller.RollerTestBase;import org.roller.model.WeblogManager;import org.roller.pojos.UserData;import org.roller.pojos.WeblogEntryData;import org.roller.pojos.WebsiteData;import org.roller.presentation.MockRollerContext;import org.roller.util.Utilities;import com.mockrunner.mock.web.ActionMockObjectFactory;import com.mockrunner.mock.web.MockHttpServletRequest;import com.mockrunner.mock.web.MockHttpServletResponse;import com.mockrunner.mock.web.MockServletContext;import com.mockrunner.mock.web.WebMockObjectFactory;import com.mockrunner.servlet.ServletTestModule;import com.mockrunner.struts.ActionTestModule;import com.sun.syndication.feed.atom.Content;import com.sun.syndication.feed.atom.Entry;/** * Test new Rome based Atom API implementation. * @author David M Johnson */public class AtomServletTest extends RollerTestBase{ private ActionMockObjectFactory mockFactory; protected MockRollerContext rollerContext; protected ActionTestModule strutsModule; private ServletTestModule servletModule; private static SimpleDateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssZ" ); protected WebMockObjectFactory getMockFactory() { if (mockFactory == null) { mockFactory = new ActionMockObjectFactory(); } return mockFactory; } //------------------------------------------------------------------------------ /** * Test get of introspection URI */ public void testGetIntrospection() throws Exception { UserData user = (UserData)mUsersCreated.get(0); MockHttpServletRequest mockRequest = getMockFactory().getMockRequest(); mockRequest.addHeader("X-WSSE", generateWSSEHeader(user.getUserName(), user.getPassword())); mockRequest.setContextPath("/atom"); mockRequest.setPathInfo("/" + user.getUserName()); getServletModule().doGet(); String output = getServletModule().getOutput(); SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new StringReader(output)); AtomService service = AtomService.documentToService(doc); assertEquals(1, service.getWorkspaces().size()); } //------------------------------------------------------------------------------ /** * Test get of entries collection URI */ public void testGetEntriesCollection() throws Exception { UserData user = (UserData)mUsersCreated.get(0); // get entries collection MockHttpServletRequest mockRequest = getMockFactory().getMockRequest(); mockRequest.addHeader("X-WSSE", generateWSSEHeader(user.getUserName(), user.getPassword())); mockRequest.setContextPath("/atom"); mockRequest.setPathInfo("/" + user.getUserName() + "/entries"); getServletModule().doGet(); // assert that we got 20 entries String output = getServletModule().getOutput(); SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new StringReader(output)); AtomCollection col = AtomCollection.documentToCollection(doc); assertEquals(20, col.getMembers().size()); // use collection next URI to get next batch of entries resetMocks(); String[] next = Utilities.stringToStringArray(col.getNext(), "/"); mockRequest = getMockFactory().getMockRequest(); mockRequest.addHeader("X-WSSE", generateWSSEHeader(user.getUserName(), user.getPassword())); mockRequest.setContextPath("/atom"); mockRequest.setPathInfo( "/" + user.getUserName() + "/entries/" + next[next.length-1]); getServletModule().doGet(); // assert that we got another 20 entries output = getServletModule().getOutput(); doc = builder.build(new StringReader(output)); col = AtomCollection.documentToCollection(doc); assertEquals(10, col.getMembers().size()); } //------------------------------------------------------------------------------ /** * Test get of entries collection URI with a range */ public void testGetEntriesCollectionRange() throws Exception { UserData user = (UserData)mUsersCreated.get(0); Date end = new Date(); // now Calendar cal = Calendar.getInstance(); cal.setTime(end); cal.add(Calendar.DATE, -30); Date start = cal.getTime(); // one day ago String startString = df.format(start); String endString = df.format(end); // get entries collection MockHttpServletRequest mockRequest = getMockFactory().getMockRequest(); mockRequest.addHeader("X-WSSE", generateWSSEHeader(user.getUserName(), user.getPassword())); mockRequest.addHeader("Range", "updated=" + startString + "/" + endString); mockRequest.setContextPath("/atom"); mockRequest.setPathInfo("/" + user.getUserName() + "/entries"); getServletModule().doGet(); // assert that we got 20 entries String output = getServletModule().getOutput(); SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new StringReader(output)); AtomCollection col = AtomCollection.documentToCollection(doc); assertEquals(20, col.getMembers().size()); // use collection next URI to get next batch of entries resetMocks(); String[] next = Utilities.stringToStringArray(col.getNext(), "/"); mockRequest = getMockFactory().getMockRequest(); mockRequest.addHeader("X-WSSE", generateWSSEHeader(user.getUserName(), user.getPassword())); mockRequest.setContextPath("/atom"); mockRequest.setPathInfo("/" + user.getUserName() + "/entries"); mockRequest.setQueryString("Range=updated="+startString+"/"+endString); getServletModule().doGet(); // assert that we got another 20 entries output = getServletModule().getOutput(); doc = builder.build(new StringReader(output)); col = AtomCollection.documentToCollection(doc); assertEquals(20, col.getMembers().size()); } //------------------------------------------------------------------------------ /** * Test that GET on the EditURI returns an entry. */ public void testGetEntry() throws Exception { UserData user = (UserData)mUsersCreated.get(0); WebsiteData website = getRoller().getUserManager().getWebsite(user.getUserName()); WeblogEntryData entry = (WeblogEntryData) getRoller().getWeblogManager().getWeblogEntries( website, null, null, null, WeblogManager.ALL, new Integer(1)).get(0); Entry fetchedEntry = getEntry(user, entry.getId()); assertEquals(entry.getId(), fetchedEntry.getId()); } //------------------------------------------------------------------------------ /** * Test that POST to the PostURI returns an entry. */ public void testPostEntry() throws Exception { UserData user = (UserData)mUsersCreated.get(0); // Create an entry in a feed, so Rome can handle it Content content = new Content(); content.setMode(Content.ESCAPED); content.setValue("test entry text"); List contents = new ArrayList(); contents.add(content); Entry entry = new Entry(); entry.setTitle("test entry title"); entry.setContents(contents); StringWriter entryWriter = new StringWriter(); AtomServlet.serializeEntry(entry, entryWriter); MockHttpServletRequest mockRequest = getMockFactory().getMockRequest(); mockRequest.setContextPath("/atom"); mockRequest.setPathInfo(user.getUserName() + "/entries/"); mockRequest.addHeader("X-WSSE", generateWSSEHeader(user.getUserName(), user.getPassword())); mockRequest.setBodyContent(entryWriter.toString());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -