package com.github.agiledon.sisyphus; import com.github.agiledon.sisyphus.domain.json.StandardVariable; import com.github.agiledon.sisyphus.domain.json.User; import com.google.common.base.Objects; import org.junit.Test; import java.util.List; import static com.github.agiledon.sisyphus.Fixture.from; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNull.nullValue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; public class JsonFixtureTest { @Test public void should_compose_User_data_with_json_format() { User user = Fixture.from("user.json").to(User.class); assertThat(user, not(nullValue())); assertUserName(user, "Joe", "Sixpack"); assertThat(user.getGender(), is(User.Gender.MALE)); assertThat(user.isVerified(), is(false)); } @Test public void should_compose_User_data_with_gson_format() { User user = Fixture.from("user.gson").to(User.class); assertThat(user, not(nullValue())); //gson can't support the case which fieldname is not match get method //gson can't convert "Rm9vYmFyIQ==" to byte[] assertThat(user.getName(), is(nullValue())); } @Test public void should_compose_User_data_from_cache_with_json_format() { User user = Fixture.from("user.json").to(User.class); assertThat(user, not(nullValue())); User cachedUser = Fixture.from("user.json").to(User.class); assertThat(cachedUser, not(nullValue())); assertThat(Objects.equal(user, cachedUser), is(true)); } @Test public void should_compose_StandardVariables_data_with_json_format() { StandardVariable[] standardVariables = Fixture.from("standardVariable.json").to(StandardVariable[].class); //Jackson can't support the class without default constructor if not using annotation assertThat(standardVariables, is(nullValue())); } @Test public void should_compose_StandardVariables_data_with_gson_format() { StandardVariable[] standardVariables = Fixture.from("standardVariable.gson").to(StandardVariable[].class); assertThat(standardVariables, not(nullValue())); assertThat(standardVariables[0].result, is("0")); assertThat(standardVariables[1].result, is("1")); assertThat(standardVariables[2].result, is("2")); } @Test public void should_compose_StandardVariables_data_by_parsing_template_file() { StandardVariable[] standardVariables = Fixture.from("standardVariableWithTemplate.gson") .withTemplate("template/standardVariable.template") .to(StandardVariable[].class); assertThat(standardVariables, not(nullValue())); assertThat(standardVariables[0].result, is("0")); assertThat(standardVariables[1].result, is("1")); assertThat(standardVariables[2].result, is("2")); } @Test public void should_compose_User_data_from_cache_with_gson_format() { StandardVariable[] standardVariables = Fixture.from("standardVariable.gson") .to(StandardVariable[].class); assertThat(standardVariables, not(nullValue())); StandardVariable[] cachedStandardVariables = Fixture.from("standardVariable.gson").to(StandardVariable[].class); assertThat(cachedStandardVariables, not(nullValue())); assertThat(Objects.equal(standardVariables, cachedStandardVariables), is(true)); } @Test public void should_compose_user_data_by_parsing_template_file() { User user = Fixture.from("userWithTemplate.json") .withTemplate("template/user.template") .to(User.class); assertThat(user, not(nullValue())); assertUserName(user, "Joe", "Sixpack"); } @Test public void should_compose_multi_user_data_by_parsing_template_file() { List<User> users = Fixture.from("userWithMultiSections.json") .withTemplate("template/user.template") .toList(User.class); assertThat(users, not(nullValue())); User firstUser = users.get(0); assertUserName(firstUser, "Joe", "Sixpack"); User thirdUser = users.get(2); assertUserName(thirdUser, "Yi", "Zhang"); } private void assertUserName(User thirdUser, String yi, String zhang) { assertThat(thirdUser.getName().getFirst(), is(yi)); assertThat(thirdUser.getName().getLast(), is(zhang)); } @Test public void should_be_null_if_missing_variable_by_parsing_template_file() { User user = from("userWithTemplateMissingVariable.json") .withTemplate("template/user.template") .to(User.class); assertThat(user, is(nullValue())); } }