diff --git a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java b/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java index afe5882ca0..27f6e50c8f 100644 --- a/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java +++ b/source/java/org/alfresco/repo/replication/ReplicationServiceIntegrationTest.java @@ -118,6 +118,7 @@ public class ReplicationServiceIntegrationTest extends TestCase private final String ACTION_NAME = "testName"; private final String ACTION_NAME2 = "testName2"; + private final String ACTION_NAME3 = "testName3"; private final QName ACTION_QNAME = QName.createQName(null, ACTION_NAME); private final QName ACTION_QNAME2 = QName.createQName(null, ACTION_NAME2); @@ -1142,7 +1143,7 @@ public class ReplicationServiceIntegrationTest extends TestCase assertEquals(ActionStatus.Failed, rd.getExecutionStatus()); } - public void DISABLEDtestJavascriptAPI() throws Exception + public void testJavascriptAPI() throws Exception { ServiceRegistry serviceRegistry = (ServiceRegistry)ctx.getBean("ServiceRegistry"); @@ -1159,13 +1160,22 @@ public class ReplicationServiceIntegrationTest extends TestCase ); replicationService.saveReplicationDefinition(persisted); + ReplicationDefinition persisted2 = replicationService.createReplicationDefinition(ACTION_NAME3, "Persisted2"); + persisted2.setTargetName("AnotherTarget"); + replicationService.saveReplicationDefinition(persisted2); + // Call the test Map model = new HashMap(); model.put("Empty", new ScriptReplicationDefinition(serviceRegistry, replicationService, null, empty)); model.put("EmptyName", ACTION_NAME); model.put("Persisted", new ScriptReplicationDefinition(serviceRegistry, replicationService, null, persisted)); model.put("PersistedName", ACTION_NAME2); - model.put("PersistedNodeRef", persisted.getNodeRef()); + model.put("PersistedNodeRef", persisted.getNodeRef().toString()); + model.put("PersistedTarget", persisted.getTargetName()); + model.put("Persisted2", new ScriptReplicationDefinition(serviceRegistry, replicationService, null, persisted2)); + model.put("Persisted2Name", ACTION_NAME3); + model.put("Persisted2NodeRef", persisted2.getNodeRef().toString()); + model.put("Persisted2Target", persisted2.getTargetName()); ScriptLocation location = new ClasspathScriptLocation("org/alfresco/repo/replication/script/test_replicationService.js"); this.scriptService.executeScript(location, model); diff --git a/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java b/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java index ab94e6d67d..c76b09342d 100644 --- a/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java +++ b/source/java/org/alfresco/repo/replication/script/ScriptReplicationService.java @@ -103,6 +103,8 @@ public class ScriptReplicationService extends BaseScopableProcessorExtension public ScriptReplicationDefinition loadReplicationDefinition(String replicationName) { ReplicationDefinition replicationDefinition = replicationService.loadReplicationDefinition(replicationName); + if(replicationDefinition == null) + return null; return new ScriptReplicationDefinition(serviceRegistry, replicationService, this.getScope(), replicationDefinition); } @@ -117,6 +119,11 @@ public class ScriptReplicationService extends BaseScopableProcessorExtension List definitions = replicationService.loadReplicationDefinitions(targetName); return toScriptReplicationDefinitions(definitions); } + + public void replicate(ScriptReplicationDefinition definition) + { + replicationService.replicate(definition.getReplicationDefinition()); + } private ScriptReplicationDefinition[] toScriptReplicationDefinitions(List definitions) { diff --git a/source/java/org/alfresco/repo/replication/script/test_replicationService.js b/source/java/org/alfresco/repo/replication/script/test_replicationService.js index 16dae7dc0e..bc16cc735c 100644 --- a/source/java/org/alfresco/repo/replication/script/test_replicationService.js +++ b/source/java/org/alfresco/repo/replication/script/test_replicationService.js @@ -10,7 +10,7 @@ function testReplicationDefinition() // Check the persisted one test.assertEquals(PersistedName, Persisted.replicationName); test.assertEquals("Persisted", Persisted.description); - test.assertEquals("TestTransferTarget", Persisted.targetName); + test.assertEquals(PersistedTarget, Persisted.targetName); test.assertEquals(2, Persisted.payload.length); test.assertEquals("workspace://SpacesStore/Testing", Persisted.payload[0].nodeRef.toString()) @@ -20,7 +20,49 @@ function testReplicationDefinition() // Test listing function testListing() { - // TODO + // All + var definitions = replicationService.loadReplicationDefinitions(); + test.assertEquals(2, definitions.length); + + var foundP1 = false; + var foundP2 = false; + for(var i in definitions) + { + var definition = definitions[i]; + if(definition.replicationName == PersistedName) + { + foundP1 = true; + test.assertEquals(PersistedName, definition.replicationName); + test.assertEquals("Persisted", definition.description); + test.assertEquals(PersistedTarget, definition.targetName); + test.assertEquals(2, definition.payload.length); + + test.assertEquals("workspace://SpacesStore/Testing", definition.payload[0].nodeRef.toString()) + test.assertEquals("workspace://SpacesStore/Testing2", definition.payload[1].nodeRef.toString()) + } + if(definition.replicationName == Persisted2Name) + { + foundP2 = true; + test.assertEquals(Persisted2Name, definition.replicationName); + test.assertEquals("Persisted2", definition.description); + test.assertEquals(Persisted2Target, definition.targetName); + test.assertEquals(0, definition.payload.length); + } + } + + // By target - for Persisted + definitions = replicationService.loadReplicationDefinitions(PersistedTarget); + test.assertEquals(1, definitions.length); + test.assertEquals(PersistedName, definitions[0].replicationName); + + // By target - for Persisted2 + definitions = replicationService.loadReplicationDefinitions(Persisted2Target); + test.assertEquals(1, definitions.length); + test.assertEquals(Persisted2Name, definitions[0].replicationName); + + // By target - invalid target + definitions = replicationService.loadReplicationDefinitions("MadeUpDoesntExit"); + test.assertEquals(0, definitions.length); } // Test creating and saving @@ -40,10 +82,15 @@ function testCreateSave() ] definition.payload = nodes - // Save + // Won't be there if loaded + test.assertEquals(null, replicationService.loadReplicationDefinition("JS")); + + // Save it + replicationService.saveReplicationDefinition(definition); // Load and re-check definition = replicationService.loadReplicationDefinition("JS"); + test.assertNotNull(definition); test.assertEquals("JS", definition.replicationName); test.assertEquals("From JS", definition.description); test.assertEquals("TargetTarget", definition.targetName); @@ -53,10 +100,20 @@ function testCreateSave() test.assertEquals("workspace://SpacesStore/Testing2", definition.payload[1].nodeRef.toString()) } -// Tests running (without a full definition) +// Tests running (without a full definition, so should quickly fail) function testRunReplication() { - // TODO + var definition = replicationService.loadReplicationDefinition(Persisted2Name); + test.assertNotNull(definition); + + // Should give an error about no payload + try { + replicationService.replicate(definition); + test.fail("Shouldn't be able to run a definition lacking a payload"); + } catch(err) { + var msg = err.message; + test.assertTrue(msg.indexOf("payload") > -1, "Payload error not found in " + msg); + } } // Execute Tests