From 14f07e422be71755077d7cd0097c8398154a6f14 Mon Sep 17 00:00:00 2001 From: Brian Remmington Date: Thu, 4 Aug 2011 08:26:41 +0000 Subject: [PATCH] Merged BRANCHES/DEV/BRIAN/PUBLISHING to HEAD: 29482: Publishing: - Added support for LinkedIn status updates 29486: Social Publishing UI Updates, including: - Dialogue: Complete UI rework - Publishing History: display of unpublish event support - Created Alfresco.util.toggleClass function 29491: Publishing: - Added correct list of supported MIME types the the YouTube channel type 29493: Publishing: - Added video/mp4 to YouTube supported MIME types 29496: ChannelsGet now filters out channels that are not authorised. Added a space before the node URL on status updates. Extended unit tests to check behaviour for non-Admin users. 29513: Adds specific http client libraries to prevent the mac falling back to it's buggy default implementation (which, e.g. doesn't send Content-Length headers if the content length is zero). Required for Flickr support (their publish API requires both a content length header and zero length content. It returns a 411 error using the default Mac libs). 29534: Fixed PublishingEventsGet REST method. ChannelService getChannels() methods now support filtering by publish permissions. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29542 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../publishing/channels.get.desc.xml | 8 + .../publishing/publishing-events.get.desc.xml | 5 + .../repository/publishing/publishing.lib.ftl | 9 +- .../web-scripts-application-context.xml | 2 +- .../web/scripts/publishing/ChannelsGet.java | 8 +- ...rNodeGet.java => PUblishingEventsGet.java} | 2 +- .../publishing/PublishingModelBuilder.java | 8 +- .../publishing/PublishingRestApiTest.java | 259 ++++++++---------- 8 files changed, 147 insertions(+), 154 deletions(-) rename source/java/org/alfresco/repo/web/scripts/publishing/{PUblishingEventsForNodeGet.java => PUblishingEventsGet.java} (95%) diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml index 3af7d551e2..197322578c 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/channels.get.desc.xml @@ -38,6 +38,9 @@ "name": string, "title": string, "authorised": boolean, + "canPublish": boolean, + "canPublishStatusUpdates": boolean, + "canUnpublish": boolean, "channelType": { "id": string, @@ -60,8 +63,13 @@ [ { "url": string, + "id": string, "name": string, "title": string, + "authorised": boolean, + "canPublish": boolean, + "canPublishStatusUpdates": boolean, + "canUnpublish": boolean, "channelType": { "id": string, diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing-events.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing-events.get.desc.xml index cbc1b3f13f..599e386cf7 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing-events.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing-events.get.desc.xml @@ -69,8 +69,13 @@ "channel": { "url": string, + "id": string, "name": string, "title": string, + "authorised": boolean, + "canPublish": boolean, + "canPublishStatusUpdates": boolean, + "canUnpublish": boolean, "channelType": { "id": string, diff --git a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl index c8b8c07505..b707b9bc5e 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/repository/publishing/publishing.lib.ftl @@ -32,8 +32,12 @@ <@publishNodesJSON nodes=event.publishNodes/>, "unpublishNodes": <@publishNodesJSON nodes=event.unpublishNodes/>, + <#if event.channel?? > "channel": <@channelJSON channel=event.channel/> + <#elseif event.channelId?? > + "channelId": "${event.channelId}" + } @@ -79,7 +83,10 @@ "id": "${channel.id}", "name": "${channel.name}", "title": "${channel.title}", - "authorised": "${channel.authorised}", + "authorised": ${channel.authorised}, + "canPublish": ${channel.canPublish}, + "canPublishStatusUpdates": ${channel.canPublishStatusUpdates}, + "canUnpublish": ${channel.canUnpublish}, "channelType": <@channelTypeJSON type=channel.channelType /> } diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index 1ee60453e8..f879ae1ca6 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1166,7 +1166,7 @@ diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsGet.java b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsGet.java index 1db8d17965..2084a3b702 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsGet.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/ChannelsGet.java @@ -61,19 +61,19 @@ public class ChannelsGet extends DeclarativeWebScript List statusUpdateChannels; if (node == null) { - publishingChannels = channelService.getPublishingChannels(); - statusUpdateChannels = channelService.getStatusUpdateChannels(); + publishingChannels = channelService.getPublishingChannels(false); + statusUpdateChannels = channelService.getStatusUpdateChannels(false); } else { publishingChannels = channelService.getRelevantPublishingChannels(node); - statusUpdateChannels = channelService.getStatusUpdateChannels(); + statusUpdateChannels = channelService.getStatusUpdateChannels(true); } Map model = new HashMap(); //TODO Implement URL shortening. - model.put(URL_LENGTH, urlShortener.getUrlLength()); + model.put(URL_LENGTH, urlShortener.getUrlLength()+1); model.put(PUBLISHING_CHANNELS, builder.buildChannels(publishingChannels)); model.put(STATUS_UPDATE_CHANNELS, builder.buildChannels(statusUpdateChannels)); diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/PUblishingEventsForNodeGet.java b/source/java/org/alfresco/repo/web/scripts/publishing/PUblishingEventsGet.java similarity index 95% rename from source/java/org/alfresco/repo/web/scripts/publishing/PUblishingEventsForNodeGet.java rename to source/java/org/alfresco/repo/web/scripts/publishing/PUblishingEventsGet.java index f6728cc39a..70b619eeb8 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/PUblishingEventsForNodeGet.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/PUblishingEventsGet.java @@ -39,7 +39,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest; * @since 4.0 * */ -public class PUblishingEventsForNodeGet extends PublishingWebScript +public class PUblishingEventsGet extends PublishingWebScript { /** * {@inheritDoc} diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java index bec25478ae..7cbcd8a651 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingModelBuilder.java @@ -93,7 +93,8 @@ public class PublishingModelBuilder implements PublishingWebScriptConstants } else { - model.put(CHANNEL_TYPE, channelId); + // Channel may have been deleted! + model.put(CHANNEL_ID, channelId); } return model; } @@ -118,6 +119,11 @@ public class PublishingModelBuilder implements PublishingWebScriptConstants model.put(NAME, channel.getName()); //TODO Localize the title. model.put(TITLE, channel.getName()); + + model.put(CAN_PUBLISH, toString(channel.canPublish())); + model.put(CAN_UNPUBLISH, toString(channel.canUnpublish())); + model.put(CAN_PUBLISH_STATUS_UPDATES, toString(channel.canPublishStatusUpdates())); + model.put(CHANNEL_TYPE, buildChannelType(channel.getChannelType())); model.put(CHANNEL_AUTH_STATUS, toString(channel.isAuthorised())); return model; diff --git a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java index 679b6b8e4c..7eb0cf01eb 100644 --- a/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/publishing/PublishingRestApiTest.java @@ -19,8 +19,7 @@ package org.alfresco.repo.web.scripts.publishing; -import static org.alfresco.model.ContentModel.TYPE_CONTENT; -import static org.alfresco.repo.publishing.PublishingModel.TYPE_DELIVERY_CHANNEL; +import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CHANNEL_AUTH_STATUS; import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CAN_PUBLISH; import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CAN_PUBLISH_STATUS_UPDATES; import static org.alfresco.repo.web.scripts.publishing.PublishingWebScriptConstants.CAN_UNPUBLISH; @@ -55,16 +54,13 @@ import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyMap; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.File; import java.io.UnsupportedEncodingException; import java.text.MessageFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Collections; @@ -79,8 +75,9 @@ import org.alfresco.repo.content.transform.AbstractContentTransformerTest; import org.alfresco.repo.publishing.ChannelHelper; import org.alfresco.repo.publishing.ChannelServiceImpl; import org.alfresco.repo.publishing.PublishServiceImpl; -import org.alfresco.repo.publishing.PublishingRootObject; +import org.alfresco.repo.publishing.PublishingTestHelper; import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.person.TestPersonManager; import org.alfresco.repo.web.scripts.BaseWebScriptTest; import org.alfresco.repo.web.scripts.WebScriptUtil; import org.alfresco.service.ServiceRegistry; @@ -90,18 +87,19 @@ import org.alfresco.service.cmr.publishing.NodeSnapshot; import org.alfresco.service.cmr.publishing.PublishingEvent; import org.alfresco.service.cmr.publishing.PublishingPackage; import org.alfresco.service.cmr.publishing.PublishingPackageEntry; -import org.alfresco.service.cmr.publishing.PublishingQueue; import org.alfresco.service.cmr.publishing.PublishingService; import org.alfresco.service.cmr.publishing.Status; import org.alfresco.service.cmr.publishing.StatusUpdate; import org.alfresco.service.cmr.publishing.channels.Channel; import org.alfresco.service.cmr.publishing.channels.ChannelService; import org.alfresco.service.cmr.publishing.channels.ChannelType; -import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.security.MutableAuthenticationService; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteService; -import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.GUID; import org.alfresco.util.ISO8601DateFormat; import org.alfresco.util.collections.CollectionUtils; @@ -138,41 +136,36 @@ public class PublishingRestApiTest extends BaseWebScriptTest private static final String JSON = "application/json"; - private SiteService siteService; - private FileFolderService fileFolderService; + private PermissionService permissionService; private ChannelService channelService; private PublishingService publishingService; private ChannelHelper channelHelper; - private PublishingQueue queue; - - private NodeRef docLib; - private String siteId; - - private List events = new ArrayList(); - private List channels = new ArrayList(); + private PublishingTestHelper testHelper; + TestPersonManager personManager; + private String userName = GUID.generate(); public void testGetChannelsForNode() throws Exception { - NodeRef textNode = createContentNode("plainContent", "Some plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); + NodeRef textNode = testHelper.createContentNode("plainContent", "Some plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); + permissionService.setPermission(textNode, userName, PermissionService.READ, true); File pdfFile = AbstractContentTransformerTest.loadQuickTestFile("pdf"); assertNotNull("Failed to load required test file.", pdfFile); - NodeRef xmlNode = createContentNode("xmlContent", pdfFile, MimetypeMap.MIMETYPE_PDF); + NodeRef xmlNode = testHelper.createContentNode("xmlContent", pdfFile, MimetypeMap.MIMETYPE_PDF); StoreRef store = textNode.getStoreRef(); - assertEquals(MimetypeMap.MIMETYPE_PDF, fileFolderService.getReader(xmlNode).getMimetype()); String plainTextNodeUrl = MessageFormat.format(CHANNELS_NODE_URL, store.getProtocol(), store.getIdentifier(), textNode.getId() ); - Channel publishAnyChannel = createChannel(publishAnyType); - Channel publishPdfChannel = createChannel(publishPdfType); - Channel statusUpdateChannel= createChannel(statusUpdateType); + Channel publishAnyChannel = testHelper.createChannel(publishAnyType); + Channel publishPdfChannel = testHelper.createChannel(publishPdfType); + Channel statusUpdateChannel= testHelper.createChannel(statusUpdateType); // Call with channels defined. Response response = sendRequest(new GetRequest(plainTextNodeUrl), 200); JSONObject data = getJsonData(response); //TODO Fix hard coding. - assertEquals(20, data.getInt(URL_LENGTH)); + assertEquals(21, data.getInt(URL_LENGTH)); JSONArray publishingChannels = data.getJSONArray(PUBLISHING_CHANNELS); JSONArray statusChannels = data.getJSONArray(STATUS_UPDATE_CHANNELS); @@ -183,38 +176,67 @@ public class PublishingRestApiTest extends BaseWebScriptTest response = sendRequest(new GetRequest(xmlNodeUrl), 200); data = getJsonData(response); - //TODO Fix hard coding. - assertEquals(20, data.getInt(URL_LENGTH)); + assertEquals(21, data.getInt(URL_LENGTH)); publishingChannels = data.getJSONArray(PUBLISHING_CHANNELS); statusChannels = data.getJSONArray(STATUS_UPDATE_CHANNELS); checkChannels(publishingChannels, publishAnyChannel, publishPdfChannel); checkChannels(statusChannels, statusUpdateChannel); + + personManager.setUser(userName); + response = sendRequest(new GetRequest(plainTextNodeUrl), 200); + data = getJsonData(response); + publishingChannels = data.getJSONArray(PUBLISHING_CHANNELS); + statusChannels = data.getJSONArray(STATUS_UPDATE_CHANNELS); + + assertEquals(0, publishingChannels.length()); + assertEquals(0, statusChannels.length()); + + testHelper.allowChannelAccess(userName, publishAnyChannel.getId()); + testHelper.allowChannelAccess(userName, publishPdfChannel.getId()); + testHelper.allowChannelAccess(userName, statusUpdateChannel.getId()); + + personManager.setUser(userName); + response = sendRequest(new GetRequest(plainTextNodeUrl), 200); + data = getJsonData(response); + publishingChannels = data.getJSONArray(PUBLISHING_CHANNELS); + statusChannels = data.getJSONArray(STATUS_UPDATE_CHANNELS); + + checkChannels(publishingChannels, publishAnyChannel); + checkChannels(statusChannels, statusUpdateChannel); } public void testGetChannels() throws Exception { - Channel publishAnyChannel = createChannel(publishAnyType); - Channel publishPdfChannel = createChannel(publishPdfType); - Channel statusUpdateChannel= createChannel(statusUpdateType); + Channel publishAnyChannel = testHelper.createChannel(publishAnyType); + Channel publishPdfChannel = testHelper.createChannel(publishPdfType); + Channel statusUpdateChannel=testHelper. createChannel(statusUpdateType); // Call channels defined. Response response = sendRequest(new GetRequest(CHANNELS_URL), 200); JSONObject data = getJsonData(response); - //TODO Fix hard coding. - assertEquals(20, data.getInt(URL_LENGTH)); + assertEquals(21, data.getInt(URL_LENGTH)); JSONArray publishingChannels = data.getJSONArray(PUBLISHING_CHANNELS); JSONArray statusChannels = data.getJSONArray(STATUS_UPDATE_CHANNELS); checkChannels(publishingChannels, publishAnyChannel, publishPdfChannel); checkChannels(statusChannels, statusUpdateChannel); + + personManager.setUser(userName); + response = sendRequest(new GetRequest(CHANNELS_URL), 200); + data = getJsonData(response); + publishingChannels = data.getJSONArray(PUBLISHING_CHANNELS); + statusChannels = data.getJSONArray(STATUS_UPDATE_CHANNELS); + + checkChannels(publishingChannels, publishAnyChannel, publishPdfChannel); + checkChannels(statusChannels, statusUpdateChannel); } public void testChannelPut() throws Exception { - Channel channel1 = createChannel(publishAnyType); - Channel channel2 = createChannel(publishAnyType); + Channel channel1 = testHelper.createChannel(publishAnyType); + Channel channel2 = testHelper.createChannel(publishAnyType); String name1 = channel1.getName(); String name2 = channel2.getName(); @@ -240,11 +262,11 @@ public class PublishingRestApiTest extends BaseWebScriptTest public void testPublishingQueuePost() throws Exception { // Create publish and status update channels. - Channel publishChannel = createChannel(publishAnyType); - Channel statusChannel = createChannel(statusUpdateType); + Channel publishChannel = testHelper.createChannel(publishAnyType); + Channel statusChannel = testHelper.createChannel(statusUpdateType); // Create some content. - NodeRef textNode = createContentNode("plainContent", "Some plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); + NodeRef textNode = testHelper.createContentNode("plainContent", "Some plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); // Post empty content. sendRequest(new PostRequest(PUBLISHING_QUEUE_URL, "", JSON), 400); @@ -318,14 +340,23 @@ public class PublishingRestApiTest extends BaseWebScriptTest // Post JSON without Status Update. sendRequest(new PostRequest(PUBLISHING_QUEUE_URL, jsonStr, JSON), 200); - events.addAll(publishingService.getEventsForPublishedNode(textNode)); + // Clean up events + List events= publishingService.getEventsForPublishedNode(textNode); + List ids = CollectionUtils.transform(events, new Function() + { + public String apply(PublishingEvent value) + { + return value.getId(); + } + }); + testHelper.addEvents(ids); } public void testPublishingEventsGet() throws Exception { - Channel publishChannel = createChannel(publishAnyType); - NodeRef textNode1 = createContentNode("plain1.txt", "This is some plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); - NodeRef textNode2 = createContentNode("plain2.txt", "This is some more plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); + Channel publishChannel = testHelper.createChannel(publishAnyType); + NodeRef textNode1 = testHelper.createContentNode("plain1.txt", "This is some plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); + NodeRef textNode2 = testHelper.createContentNode("plain2.txt", "This is some more plain text", MimetypeMap.MIMETYPE_TEXT_PLAIN); String protocol = textNode1.getStoreRef().getProtocol(); String storeId = textNode1.getStoreRef().getIdentifier(); @@ -338,16 +369,13 @@ public class PublishingRestApiTest extends BaseWebScriptTest assertEquals(0, data.length()); // Create publishing event for textNode1. - MutablePublishingPackage pckg1 = queue.createPublishingPackage(); + MutablePublishingPackage pckg1 = publishingService.getPublishingQueue().createPublishingPackage(); pckg1.addNodesToPublish(textNode1); StatusUpdate statusUpdate = null; String comment = "This is a comment"; - Calendar schedule = Calendar.getInstance(); - schedule.add(Calendar.YEAR, 1); - String event1Id = queue.scheduleNewEvent(pckg1, publishChannel.getId(), schedule, comment, statusUpdate); - PublishingEvent event1 = publishingService.getPublishingEvent(event1Id); - events.add(event1); + String event1Id = testHelper.scheduleEvent1Year(pckg1, publishChannel.getId(), comment, statusUpdate); + testHelper.addEvent(event1Id); // Query for events on textNode1. response = sendRequest(new GetRequest(textNode1Url), 200); @@ -360,6 +388,18 @@ public class PublishingRestApiTest extends BaseWebScriptTest response = sendRequest(new GetRequest(textNode2Url), 200); data = getDataArray(response); assertEquals(0, data.length()); + + // Change to non-Admin user. + personManager.setUser(userName); + // Query for events on textNode1. + response = sendRequest(new GetRequest(textNode1Url), 200); + data = getDataArray(response); + checkContainsEvents(data, event1Id); + + // Query for events on textNode2. + response = sendRequest(new GetRequest(textNode2Url), 200); + data = getDataArray(response); + assertEquals(0, data.length()); } public void testChannelTypesGet() throws Exception @@ -434,7 +474,7 @@ public class PublishingRestApiTest extends BaseWebScriptTest checkContainsNodes(pckg, json.getJSONArray(UNPUBLISH_NODES), false); Channel channel = channelService.getChannelById(event.getChannelId()); - checkChannel(json.optJSONObject(CHANNEL), channel); + checkChannel(json.getJSONObject(CHANNEL), channel); } private void checkContainsNodes(PublishingPackage pckg, JSONArray json, boolean isPublish) throws JSONException @@ -558,12 +598,18 @@ public class PublishingRestApiTest extends BaseWebScriptTest { NodeRef node = channel.getNodeRef(); StoreRef storeRef = node.getStoreRef(); + check(ID, jsonChannel, channel.getId()); String expUrl = "api/publishing/channels/" + storeRef.getProtocol() + "/" + storeRef.getIdentifier() + "/" + node.getId(); check(URL, jsonChannel, expUrl); check(TITLE, jsonChannel, channel.getName()); + check(CAN_PUBLISH, jsonChannel, channel.canPublish()); + check(CAN_UNPUBLISH, jsonChannel, channel.canUnpublish()); + check(CAN_PUBLISH_STATUS_UPDATES, jsonChannel, channel.canPublishStatusUpdates()); + check(CHANNEL_AUTH_STATUS, jsonChannel, channel.isAuthorised()); + JSONObject jsonType = jsonChannel.getJSONObject(CHANNEL_TYPE); assertNotNull("The channel type is null!", jsonType); checkChannelType(jsonType, channel.getChannelType()); @@ -617,13 +663,6 @@ public class PublishingRestApiTest extends BaseWebScriptTest fail("Did not contain " + string); } - private Channel createChannel(String typeId) - { - Channel channel = channelService.createChannel(typeId, GUID.generate(), null); - channels.add(channel); - return channel; - } - private JSONObject getJsonData(Response response) throws Exception { JSONObject json = getJson(response); @@ -647,122 +686,50 @@ public class PublishingRestApiTest extends BaseWebScriptTest return new JSONObject(jsonStr); } - private NodeRef createContentNode(String name, File theContent, String mimetype) - { - NodeRef source = fileFolderService.create(docLib, name, TYPE_CONTENT).getNodeRef(); - writeContent(source, theContent, mimetype); - return source; - } - - private NodeRef createContentNode(String name, String theContent, String mimetype) - { - NodeRef source = fileFolderService.create(docLib, name, TYPE_CONTENT).getNodeRef(); - writeContent(source, theContent, mimetype); - return source; - } - - private void writeContent(NodeRef source, String theContent, String mimetype) - { - ContentWriter writer = fileFolderService.getWriter(source); - writer.setEncoding("UTF-8"); - writer.putContent(theContent); - writer.setMimetype(mimetype); - } - - private void writeContent(NodeRef source, File theContent, String mimetype) - { - ContentWriter writer = fileFolderService.getWriter(source); - writer.setMimetype(mimetype); - writer.setEncoding("UTF-8"); - writer.putContent(theContent); - } - - private ChannelType mockChannelType(String channelTypeId) - { - ChannelType channelType = channelService.getChannelType(channelTypeId); - if(channelType != null) - { - reset(channelType); - when(channelType.getId()).thenReturn(channelTypeId); - } - else - { - channelType = mock(ChannelType.class); - when(channelType.getId()).thenReturn(channelTypeId); - channelService.register(channelType); - } - when(channelType.getChannelNodeType()).thenReturn(TYPE_DELIVERY_CHANNEL); - return channelType; - } - @Override protected void setUp() throws Exception { super.setUp(); ApplicationContext ctx = getServer().getApplicationContext(); - AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); - this.siteService = serviceRegistry.getSiteService(); - this.fileFolderService = serviceRegistry.getFileFolderService(); + SiteService siteService = serviceRegistry.getSiteService(); + FileFolderService fileFolderService = serviceRegistry.getFileFolderService(); + this.permissionService= serviceRegistry.getPermissionService(); this.channelService = (ChannelService) ctx.getBean(ChannelServiceImpl.NAME); this.publishingService= (PublishingService) ctx.getBean(PublishServiceImpl.NAME); this.channelHelper = (ChannelHelper) ctx.getBean(ChannelHelper.NAME); - PublishingRootObject rootObject = (PublishingRootObject) ctx.getBean(PublishingRootObject.NAME); + this.testHelper = new PublishingTestHelper(channelService, publishingService, siteService, fileFolderService, permissionService); + + MutableAuthenticationService authenticationService = serviceRegistry.getAuthenticationService(); + NodeService nodeService = serviceRegistry.getNodeService(); + PersonService personService = serviceRegistry.getPersonService(); + this.personManager = new TestPersonManager(authenticationService, personService, nodeService); - ChannelType publishAny = mockChannelType(publishAnyType); + personManager.createPerson(userName); + AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); + + ChannelType publishAny = testHelper.mockChannelType(publishAnyType); when(publishAny.canPublish()).thenReturn(true); - ChannelType publishPdf= mockChannelType(publishPdfType); + ChannelType publishPdf= testHelper.mockChannelType(publishPdfType); when(publishPdf.canPublish()).thenReturn(true); when(publishPdf.getSupportedMimeTypes()).thenReturn(Collections.singleton(MimetypeMap.MIMETYPE_PDF)); - ChannelType statusUpdate= mockChannelType(statusUpdateType); + ChannelType statusUpdate= testHelper.mockChannelType(statusUpdateType); when(statusUpdate.canPublishStatusUpdates()).thenReturn(true); when(statusUpdate.getMaximumStatusLength()).thenReturn(maxStatusLength); - - this.siteId = GUID.generate(); - siteService.createSite("test", siteId, - "Test site created by ChannelServiceImplIntegratedTest", - "Test site created by ChannelServiceImplIntegratedTest", - SiteVisibility.PUBLIC); - this.docLib = siteService.createContainer(siteId, SiteService.DOCUMENT_LIBRARY, ContentModel.TYPE_FOLDER, null); - - this.queue = rootObject.getPublishingQueue(); } @Override public void tearDown() throws Exception { - for (PublishingEvent event : events) + try { - try - { - publishingService.cancelPublishingEvent(event.getId()); - } - catch(Throwable t) - { - //NOOP - } + testHelper.tearDown(); } - for (Channel channel : channels) + finally { - try - { - channelService.deleteChannel(channel); - } - catch(Throwable t) - { - //NOOP - } + super.tearDown(); } - try - { - siteService.deleteSite(siteId); - } - catch(Throwable t) - { - //NOOP - } - super.tearDown(); } }