package com.thoughtworks.go.plugin.access.configrepo.contract.tasks;
import com.google.gson.JsonObject;
import com.thoughtworks.go.plugin.access.configrepo.contract.CRBaseTest;
import org.junit.Test;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
public class BuildTaskTest extends CRBaseTest<CRBuildTask> {
private final CRBuildTask rakeTask;
private final CRBuildTask rakeCompileTask;
private final CRBuildTask rakeCompileFileTask;
private final CRBuildTask invalidTaskNoType;
private final CRBuildTask rakeWithDirTask;
private final CRBuildTask antTask;
private final CRBuildTask antCompileFileTask;
private final CRBuildTask antCompileTask;
private final CRBuildTask antWithDirTask;
public BuildTaskTest(){
rakeTask = CRBuildTask.rake();
rakeCompileFileTask = CRBuildTask.rake("Rakefile.rb","compile");
rakeCompileTask = CRBuildTask.rake(null,"compile");
rakeWithDirTask = CRBuildTask.rake(null,"build","src/tasks");
antTask = CRBuildTask.ant();
antCompileFileTask = CRBuildTask.ant("mybuild.xml", "compile");
antCompileTask = CRBuildTask.ant(null, "compile");
antWithDirTask = CRBuildTask.ant(null, "build", "src/tasks");
invalidTaskNoType = new CRBuildTask(null,null,null,null);
}
@Override
public void addGoodExamples(Map<String, CRBuildTask> examples) {
examples.put("rakeTask",rakeTask);
examples.put("rakeCompileFileTask",rakeCompileFileTask);
examples.put("rakeCompileTask",rakeCompileTask);
examples.put("rakeWithDirTask",rakeWithDirTask);
examples.put("antTask",antTask);
examples.put("antCompileFileTask",antCompileFileTask);
examples.put("antCompileTask",antCompileTask);
examples.put("antWithDirTask",antWithDirTask);
}
@Override
public void addBadExamples(Map<String, CRBuildTask> examples) {
examples.put("invalidTaskNoType",invalidTaskNoType);
}
@Test
public void shouldAppendTypeFieldWhenSerializingAntTask()
{
CRTask value = antTask;
JsonObject jsonObject = (JsonObject)gson.toJsonTree(value);
assertThat(jsonObject.get("type").getAsString(), is("ant"));
}
@Test
public void shouldAppendTypeFieldWhenSerializingRakeTask()
{
CRTask value = rakeTask;
JsonObject jsonObject = (JsonObject)gson.toJsonTree(value);
assertThat(jsonObject.get("type").getAsString(), is("rake"));
}
@Test
public void shouldHandlePolymorphismWhenDeserializingAntTask()
{
CRTask value = antTask;
String json = gson.toJson(value);
CRBuildTask deserializedValue = (CRBuildTask)gson.fromJson(json,CRTask.class);
assertThat(String.format("Deserialized value should equal to value before serialization"),
deserializedValue,is(value));
}
@Test
public void shouldHandlePolymorphismWhenDeserializingRakeTask()
{
CRTask value = rakeTask;
String json = gson.toJson(value);
CRBuildTask deserializedValue = (CRBuildTask)gson.fromJson(json,CRTask.class);
assertThat(String.format("Deserialized value should equal to value before serialization"),
deserializedValue,is(value));
}
}