package com.thoughtworks.go.plugin.access.configrepo.contract.material;
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 CRPackageMaterialTest extends CRBaseTest<CRPackageMaterial> {
private CRPackageMaterial packageMaterial = new CRPackageMaterial("apt-package-plugin-id");
private CRPackageMaterial namedPackageMaterial = new CRPackageMaterial("myapt","apt-repo-id");
private CRPackageMaterial invalidPackageMaterialNoId = new CRPackageMaterial();
@Override
public void addGoodExamples(Map<String, CRPackageMaterial> examples) {
examples.put("packageMaterial",packageMaterial);
examples.put("namedPackageMaterial",namedPackageMaterial);
}
@Override
public void addBadExamples(Map<String, CRPackageMaterial> examples) {
examples.put("invalidPackageMaterialNoId",invalidPackageMaterialNoId);
}
@Test
public void shouldAppendTypeFieldWhenSerializingMaterials()
{
CRMaterial value = packageMaterial;
JsonObject jsonObject = (JsonObject)gson.toJsonTree(value);
assertThat(jsonObject.get("type").getAsString(), is(CRPackageMaterial.TYPE_NAME));
}
@Test
public void shouldHandlePolymorphismWhenDeserializing()
{
CRMaterial value = packageMaterial;
String json = gson.toJson(value);
CRPackageMaterial deserializedValue = (CRPackageMaterial)gson.fromJson(json,CRMaterial.class);
assertThat(String.format("Deserialized value should equal to value before serialization"),
deserializedValue,is(value));
}
}