package com.thoughtworks.go.plugin.access.configrepo.contract.tasks; import com.thoughtworks.go.plugin.access.configrepo.contract.CRBaseTest; import org.junit.Test; import java.util.Map; import static junit.framework.TestCase.assertNull; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; public class CRFetchArtifactTest extends CRBaseTest<CRFetchArtifactTask> { private final CRFetchArtifactTask fetch; private final CRFetchArtifactTask fetchFromPipe; private final CRFetchArtifactTask fetchToDest; private final CRFetchArtifactTask invalidFetchNoSource; private final CRFetchArtifactTask invalidFetchNoJob; private final CRFetchArtifactTask invalidFetchNoStage; public CRFetchArtifactTest() { fetch = new CRFetchArtifactTask("build","buildjob","bin"); fetchFromPipe = new CRFetchArtifactTask("build","buildjob","bin"); fetchFromPipe.setPipelineName("pipeline1"); fetchToDest = new CRFetchArtifactTask("build","buildjob","bin"); fetchToDest.setDestination("lib"); invalidFetchNoSource = new CRFetchArtifactTask("build","buildjob",null); invalidFetchNoJob = new CRFetchArtifactTask("build",null,"bin"); invalidFetchNoStage = new CRFetchArtifactTask(null,"buildjob","bin"); } @Override public void addGoodExamples(Map<String, CRFetchArtifactTask> examples) { examples.put("fetch",fetch); examples.put("fetchFromPipe",fetchFromPipe); examples.put("fetchToDest",fetchToDest); } @Override public void addBadExamples(Map<String, CRFetchArtifactTask> examples) { examples.put("invalidFetchNoSource",invalidFetchNoSource); examples.put("invalidFetchNoJob",invalidFetchNoJob); examples.put("invalidFetchNoStage",invalidFetchNoStage); } @Test public void shouldHandlePolymorphismWhenDeserializingFetchTask() { CRTask value = fetch; String json = gson.toJson(value); CRFetchArtifactTask deserializedValue = (CRFetchArtifactTask)gson.fromJson(json,CRTask.class); assertThat(String.format("Deserialized value should equal to value before serialization"), deserializedValue,is(value)); } @Test public void shouldDeserializeWhenDestinationIsNull() { String json = "{\n" + " \"type\" : \"fetch\",\n" + " \"pipeline\" : \"pip\",\n" + " \"stage\" : \"build1\",\n" + " \"job\" : \"build\",\n" + " \"source\" : \"bin\",\n" + " \"run_if\" : \"passed\"\n" + " }"; CRFetchArtifactTask deserializedValue = (CRFetchArtifactTask)gson.fromJson(json,CRTask.class); assertThat(deserializedValue.getPipelineName(),is("pip")); assertThat(deserializedValue.getJob(),is("build")); assertThat(deserializedValue.getStage(),is("build1")); assertThat(deserializedValue.getSource(),is("bin")); assertThat(deserializedValue.getRunIf(),is(CRRunIf.passed)); assertNull(deserializedValue.getDestination()); assertThat(deserializedValue.sourceIsDirectory(),is(true)); } }