public Modification(String user, String comment, String email, Date dateTime, String revision, String additionalData) { this(user, comment, email, dateTime, revision); setAdditionalData(additionalData); }
@Test public void shouldCopyConstructor() { Modification modification = new Modification("user", "comment", "foo@bar.com", new Date(), "pipe/1/stage/2"); Map<String, String> additionalData = new HashMap<>(); additionalData.put("a1", "v1"); additionalData.put("a2", "v2"); modification.setAdditionalData(new Gson().toJson(additionalData)); MaterialInstance original = new SvnMaterialInstance("url", "username", UUID.randomUUID().toString(), true); modification.setMaterialInstance(original); assertThat(new Modification(modification), is(modification)); modification = new Modification(new Date(), "rev", "label", 121L); Modification copiedModification = new Modification(modification); assertThat(copiedModification, is(modification)); assertThat(copiedModification.getAdditionalDataMap(), is(modification.getAdditionalDataMap())); }
@Test public void shouldLogToStdOutWhenPluginSendsCheckoutResultWithSuccessMessages() { SCM scmConfig = SCMMother.create("scm-id", "scm-name", "pluginid", "version", new Configuration()); PluggableSCMMaterial pluggableSCMMaterial = MaterialsMother.pluggableSCMMaterial(); pluggableSCMMaterial.setFolder("destination-folder"); pluggableSCMMaterial.setSCMConfig(scmConfig); Modification modification = ModificationsMother.oneModifiedFile("r1"); Map<String, String> additionalData = new HashMap<>(); additionalData.put("a1", "v1"); additionalData.put("a2", "v2"); modification.setAdditionalData(new Gson().toJson(additionalData)); MaterialRevision revision = new MaterialRevision(pluggableSCMMaterial, modification); String pipelineFolder = new File(System.getProperty("java.io.tmpdir")).getAbsolutePath(); String destinationFolder = new File(pipelineFolder, "destination-folder").getAbsolutePath(); PluggableSCMMaterialAgent pluggableSCMMaterialAgent = new PluggableSCMMaterialAgent(scmExtension, revision, new File(pipelineFolder), consumer); when(scmExtension.checkout(eq("pluginid"), any(), eq(destinationFolder), any())) .thenReturn(new Result().withSuccessMessages("Material scm-name is updated.")); pluggableSCMMaterialAgent.prepare(); verify(consumer, times(1)).stdOutput("Material scm-name is updated."); }
@Test(expected = RuntimeException.class) public void shouldLogToErrorOutputWhenPluginSendsErrorResponse() { SCM scmConfig = SCMMother.create("scm-id", "scm-name", "pluginid", "version", new Configuration()); PluggableSCMMaterial pluggableSCMMaterial = MaterialsMother.pluggableSCMMaterial(); pluggableSCMMaterial.setFolder("destination-folder"); pluggableSCMMaterial.setSCMConfig(scmConfig); Modification modification = ModificationsMother.oneModifiedFile("r1"); Map<String, String> additionalData = new HashMap<>(); additionalData.put("a1", "v1"); additionalData.put("a2", "v2"); modification.setAdditionalData(new Gson().toJson(additionalData)); MaterialRevision revision = new MaterialRevision(pluggableSCMMaterial, modification); String pipelineFolder = new File(System.getProperty("java.io.tmpdir")).getAbsolutePath(); String destinationFolder = new File(pipelineFolder, "destination-folder").getAbsolutePath(); PluggableSCMMaterialAgent pluggableSCMMaterialAgent = new PluggableSCMMaterialAgent(scmExtension, revision, new File(pipelineFolder), consumer); when(scmExtension.checkout(eq("pluginid"), any(), eq(destinationFolder), any())) .thenThrow(new RuntimeException("some message from plugin")); pluggableSCMMaterialAgent.prepare(); verify(consumer, times(1)).errOutput("Material scm-name checkout failed: some message from plugin"); } }
@Test(expected = RuntimeException.class) public void shouldLogToErrorOutputWhenPluginReturnResultWithCheckoutFailure() { SCM scmConfig = SCMMother.create("scm-id", "scm-name", "pluginid", "version", new Configuration()); PluggableSCMMaterial pluggableSCMMaterial = MaterialsMother.pluggableSCMMaterial(); pluggableSCMMaterial.setFolder("destination-folder"); pluggableSCMMaterial.setSCMConfig(scmConfig); Modification modification = ModificationsMother.oneModifiedFile("r1"); Map<String, String> additionalData = new HashMap<>(); additionalData.put("a1", "v1"); additionalData.put("a2", "v2"); modification.setAdditionalData(new Gson().toJson(additionalData)); MaterialRevision revision = new MaterialRevision(pluggableSCMMaterial, modification); String pipelineFolder = new File(System.getProperty("java.io.tmpdir")).getAbsolutePath(); String destinationFolder = new File(pipelineFolder, "destination-folder").getAbsolutePath(); PluggableSCMMaterialAgent pluggableSCMMaterialAgent = new PluggableSCMMaterialAgent(scmExtension, revision, new File(pipelineFolder), consumer); when(scmExtension.checkout(eq("pluginid"), any(), eq(destinationFolder), any())) .thenReturn(new Result().withErrorMessages("No such revision.")); pluggableSCMMaterialAgent.prepare(); verify(consumer, times(1)).errOutput("Material scm-name checkout failed: No such revision."); }
@Test public void shouldTalkToPluginCheckoutForPrepare() { PluggableSCMMaterial pluggableSCMMaterial = MaterialsMother.pluggableSCMMaterial(); pluggableSCMMaterial.setFolder("destination-folder"); Modification modification = ModificationsMother.oneModifiedFile("r1"); Map<String, String> additionalData = new HashMap<>(); additionalData.put("a1", "v1"); additionalData.put("a2", "v2"); modification.setAdditionalData(new Gson().toJson(additionalData)); MaterialRevision revision = new MaterialRevision(pluggableSCMMaterial, modification); String pipelineFolder = new File(System.getProperty("java.io.tmpdir")).getAbsolutePath(); String destinationFolder = new File(pipelineFolder, "destination-folder").getAbsolutePath(); PluggableSCMMaterialAgent pluggableSCMMaterialAgent = new PluggableSCMMaterialAgent(scmExtension, revision, new File(pipelineFolder), consumer); when(scmExtension.checkout(eq("pluginid"), scmConfiguration.capture(), eq(destinationFolder), scmRevision.capture())).thenReturn(new Result()); pluggableSCMMaterialAgent.prepare(); verify(scmExtension).checkout(any(String.class), any(SCMPropertyConfiguration.class), any(String.class), any(SCMRevision.class)); assertThat(scmConfiguration.getValue().size(), is(2)); assertThat(scmConfiguration.getValue().get("k1").getValue(), is("v1")); assertThat(scmConfiguration.getValue().get("k2").getValue(), is("v2")); assertThat(scmRevision.getValue().getRevision(), is("r1")); assertThat(scmRevision.getValue().getTimestamp(), is(modification.getModifiedTime())); assertThat(scmRevision.getValue().getData().size(), is(2)); assertThat(scmRevision.getValue().getDataFor("a1"), is("v1")); assertThat(scmRevision.getValue().getDataFor("a2"), is("v2")); }
@Test public void shouldCopyAdditionalDataToBuildAssignment() { MaterialRevision packageMaterialRevision = ModificationsMother.createPackageMaterialRevision("revision"); Map<String, String> additionalData = new HashMap<>(); additionalData.put("a1", "v1"); additionalData.put("a2", "v2"); String additionalDataAsString = new Gson().toJson(additionalData); packageMaterialRevision.getModifications().first().setAdditionalData(additionalDataAsString); MaterialRevisions materialRevisions = new MaterialRevisions(packageMaterialRevision); BuildCause buildCause = BuildCause.createWithModifications(materialRevisions, "user1"); BuildAssignment buildAssignment = BuildAssignment.create(jobForPipeline("foo"), buildCause, new ArrayList<>(), null, null, new ArtifactStores()); assertThat(buildAssignment.getBuildApprover(), is("user1")); assertThat(buildAssignment.materialRevisions().getRevisions().size(), is(materialRevisions.getRevisions().size())); assertRevisions(buildAssignment, packageMaterialRevision); Modification actualModification = buildAssignment.materialRevisions().getRevisions().get(0).getModification(0); assertThat(actualModification.getAdditionalData(), is(additionalDataAsString)); assertThat(actualModification.getAdditionalDataMap(), is(additionalData)); }