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 CRGitMaterialTest extends CRBaseTest<CRGitMaterial> {
private String url1 = "http://my.git.repository.com";
private String url2 = "http://other.git.repository.com";
private final CRGitMaterial simpleGit;
private final CRGitMaterial simpleGitBranch;
private final CRGitMaterial veryCustomGit;
private final CRGitMaterial invalidNoUrl;
private final CRGitMaterial whitelistGit;
private final CRGitMaterial invalidBothWhiteListAndIgnore;
public CRGitMaterialTest()
{
simpleGit = new CRGitMaterial();
simpleGit.setUrl(url1);
simpleGitBranch = new CRGitMaterial();
simpleGitBranch.setUrl(url2);
simpleGitBranch.setBranch("develop");
veryCustomGit = new CRGitMaterial("gitMaterial1","dir1",false,true,url1,"feature12",false,"externals","tools");
whitelistGit = new CRGitMaterial("gitMaterial1","dir1",false,true,url1,"feature12",true,"externals","tools");
invalidNoUrl = new CRGitMaterial("gitMaterial1","dir1",false,true,null,"feature12",false,"externals","tools");
invalidBothWhiteListAndIgnore = new CRGitMaterial("gitMaterial1","dir1",false,true,url1,"feature12",false,"externals","tools");
invalidBothWhiteListAndIgnore.setWhitelistNoCheck("src","tests");
}
@Override
public void addGoodExamples(Map<String, CRGitMaterial> examples) {
examples.put("simpleGit",simpleGit);
examples.put("simpleGitBranch",simpleGitBranch);
examples.put("veryCustomGit",veryCustomGit);
examples.put("whitelistGit",whitelistGit);
}
@Override
public void addBadExamples(Map<String, CRGitMaterial> examples) {
examples.put("invalidNoUrl",invalidNoUrl);
examples.put("invalidBothWhiteListAndIgnore",invalidBothWhiteListAndIgnore);
}
@Test
public void shouldAppendTypeFieldWhenSerializingMaterials()
{
CRMaterial value = veryCustomGit;
JsonObject jsonObject = (JsonObject)gson.toJsonTree(value);
assertThat(jsonObject.get("type").getAsString(), is(CRGitMaterial.TYPE_NAME));
}
@Test
public void shouldHandlePolymorphismWhenDeserializing()
{
CRMaterial value = veryCustomGit;
String json = gson.toJson(value);
CRGitMaterial deserializedValue = (CRGitMaterial)gson.fromJson(json,CRMaterial.class);
assertThat(String.format("Deserialized value should equal to value before serialization"),
deserializedValue,is(value));
}
}