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 CRTfsMaterialTest extends CRBaseTest<CRTfsMaterial> { private final CRTfsMaterial simpleTfs; private final CRTfsMaterial customTfs; private final CRTfsMaterial invalidTfsNoUrl; private final CRTfsMaterial invalidTfsNoUser; private final CRTfsMaterial invalidTfsNoProject; private final CRTfsMaterial invalidPasswordAndEncyptedPasswordSet; public CRTfsMaterialTest() { simpleTfs = new CRTfsMaterial("url1","user1","projectDir"); customTfs = new CRTfsMaterial("tfsMaterialName", "dir1", false,"url3","user4", "pass",null,"projectDir","example.com",false,"tools","externals"); invalidTfsNoUrl = new CRTfsMaterial(null,"user1","projectDir"); invalidTfsNoUser = new CRTfsMaterial("url1",null,"projectDir"); invalidTfsNoProject = new CRTfsMaterial("url1","user1",null); invalidPasswordAndEncyptedPasswordSet = new CRTfsMaterial("url1","user1","projectDir"); invalidPasswordAndEncyptedPasswordSet.setPassword("pa$sw0rd"); invalidPasswordAndEncyptedPasswordSet.setEncryptedPassword("26t=$j64"); } @Override public void addGoodExamples(Map<String, CRTfsMaterial> examples) { examples.put("simpleTfs",simpleTfs); examples.put("customTfs",customTfs); } @Override public void addBadExamples(Map<String, CRTfsMaterial> examples) { examples.put("invalidTfsNoUrl",invalidTfsNoUrl); examples.put("invalidTfsNoUser",invalidTfsNoUser); examples.put("invalidTfsNoProject",invalidTfsNoProject); } @Test public void shouldAppendTypeFieldWhenSerializingMaterials() { CRMaterial value = customTfs; JsonObject jsonObject = (JsonObject)gson.toJsonTree(value); assertThat(jsonObject.get("type").getAsString(), is(CRTfsMaterial.TYPE_NAME)); } @Test public void shouldHandlePolymorphismWhenDeserializing() { CRMaterial value = customTfs; String json = gson.toJson(value); CRTfsMaterial deserializedValue = (CRTfsMaterial)gson.fromJson(json,CRMaterial.class); assertThat(String.format("Deserialized value should equal to value before serialization"), deserializedValue,is(value)); } }