@Test public void shouldReturnWorkingDirectoryCorrectly() { PluggableSCMMaterial material = new PluggableSCMMaterial(); material.setFolder("dest"); String baseFolder = new File(System.getProperty("java.io.tmpdir")).getAbsolutePath(); String workingFolder = new File(baseFolder, "dest").getAbsolutePath(); assertThat(material.workingDirectory(new File(baseFolder)).getAbsolutePath(), is(workingFolder)); material.setFolder(null); assertThat(material.workingDirectory(new File(baseFolder)).getAbsolutePath(), is(baseFolder)); }
@Override public Material toOldMaterial(String name, String folder, String password) { PluggableSCMMaterial pluggableSCMMaterial = JsonHelper.fromJson(configuration, PluggableSCMMaterial.class); pluggableSCMMaterial.setName(new CaseInsensitiveString(name)); pluggableSCMMaterial.setId(id); pluggableSCMMaterial.setFolder(folder); pluggableSCMMaterial.setFingerprint(getFingerprint()); return pluggableSCMMaterial; }
@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 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 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 shouldGetJsonRepresentationForPluggableSCMMaterial() { ConfigurationProperty k1 = create("k1", false, "v1"); SCM scmConfig = SCMMother.create("scm-id", "scm-name", "pluginid", "version", new Configuration(k1)); PluggableSCMMaterial material = new PluggableSCMMaterial(); material.setSCMConfig(scmConfig); material.setFolder("folder"); Map<String, String> jsonMap = new LinkedHashMap<>(); material.toJson(jsonMap, new PluggableSCMMaterialRevision("rev123", new Date())); assertThat(jsonMap.get("scmType"), is("SCM")); assertThat(jsonMap.get("materialName"), is("scm-name")); assertThat(jsonMap.get("location"), is(material.getUriForDisplay())); assertThat(jsonMap.get("folder"), is("folder")); assertThat(jsonMap.get("action"), is("Modified")); }
@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 shouldGetPluggableSCMMaterial_byFolder() { Materials materials = new Materials(); PluggableSCMMaterial material1 = new PluggableSCMMaterial("scm-id"); material1.setFolder("folder"); Material material2 = new HgMaterial("", "folder"); materials.add(material1); materials.add(material2); assertThat(materials.byFolder("folder"), is(material1)); }