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.ArrayList;
import java.util.List;
import java.util.Map;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
public class CRConfigMaterialTest extends CRBaseTest<CRConfigMaterial> {
private final CRConfigMaterial named;
private final CRConfigMaterial namedDest;
private final CRConfigMaterial blacklist;
private final CRConfigMaterial invalidList;
public CRConfigMaterialTest() {
named = new CRConfigMaterial("primary", null,null);
namedDest = new CRConfigMaterial("primary", "folder",null);
List<String> patterns = new ArrayList<>();
patterns.add("externals");
patterns.add("tools");
blacklist = new CRConfigMaterial("primary", "folder",new CRFilter(patterns,false));
CRFilter badFilter = new CRFilter(patterns,false);
badFilter.setWhitelistNoCheck(patterns);
invalidList = new CRConfigMaterial("primary", "folder",badFilter);
}
@Override
public void addGoodExamples(Map<String, CRConfigMaterial> examples) {
examples.put("namedExample", named);
examples.put("namedDest", namedDest);
examples.put("blacklist", blacklist);
}
@Override
public void addBadExamples(Map<String, CRConfigMaterial> examples) {
examples.put("invalidList",invalidList);
}
@Test
public void shouldAppendTypeFieldWhenSerializingMaterials()
{
CRMaterial value = named;
JsonObject jsonObject = (JsonObject)gson.toJsonTree(value);
assertThat(jsonObject.get("type").getAsString(), is(CRConfigMaterial.TYPE_NAME));
}
@Test
public void shouldHandlePolymorphismWhenDeserializing()
{
CRMaterial value = named;
String json = gson.toJson(value);
CRConfigMaterial deserializedValue = (CRConfigMaterial)gson.fromJson(json,CRMaterial.class);
assertThat(String.format("Deserialized value should equal to value before serialization"),
deserializedValue,is(value));
}
}