package com.truckmuncher.app.data; import android.net.Uri; import com.truckmuncher.app.BuildConfig; import com.truckmuncher.testlib.ReadableRobolectricTestRunner; import org.junit.Test; import org.junit.runner.RunWith; import java.lang.reflect.Field; import java.util.Arrays; import java.util.Collections; import java.util.Locale; import static com.truckmuncher.app.test.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat; @RunWith(ReadableRobolectricTestRunner.class) public class PublicContractTest { @Test public void authorityIsAsExpected() { assertThat(PublicContract.CONTENT_AUTHORITY).isEqualTo(BuildConfig.APPLICATION_ID + ".provider"); } @Test public void urisHaveCorrectAuthority() throws IllegalAccessException { Field[] fields = PublicContract.class.getDeclaredFields(); for (Field field : fields) { if (field.getName().endsWith("_URI")) { Uri uriField = (Uri) field.get(null); assertThat(uriField).hasAuthority(PublicContract.CONTENT_AUTHORITY); } } } @Test public void urisHaveContentScheme() throws IllegalAccessException { Field[] fields = PublicContract.class.getDeclaredFields(); for (Field field : fields) { if (field.getName().endsWith("_URI")) { Uri uriField = (Uri) field.get(null); assertThat(uriField).hasContentScheme(); } } } @Test public void uriPathMatchesTableName() throws IllegalAccessException { Field[] fields = PublicContract.class.getDeclaredFields(); for (Field field : fields) { if (field.getName().endsWith("_URI")) { String tableName = field.getName().replaceAll("_URI", ""); Uri uriField = (Uri) field.get(null); assertThat(uriField).hasPath("/" + tableName); } } } @Test public void typeMatchesTableName() throws IllegalAccessException { Field[] fields = PublicContract.class.getDeclaredFields(); for (Field field : fields) { if (field.getName().startsWith("URI_TYPE")) { String tableName = field.getName().replaceAll("URI_TYPE_", "").toLowerCase(Locale.US); String type = (String) field.get(null); assertThat(type).isEqualTo("vnd.android.cursor.dir/vnd.truckmuncher." + tableName); } } } @Test public void convertListToStringWorks() { // Test none assertThat(PublicContract.convertListToString(Collections.<String>emptyList())) .isEmpty(); // Test single assertThat(PublicContract.convertListToString(Arrays.asList("cat"))) .isEqualTo("cat"); // Test multiple assertThat(PublicContract.convertListToString(Arrays.asList("cat", "dog"))) .isEqualTo("cat,dog"); } @Test public void convertStringToListWorks() { String input = "cat,dog,horse"; assertThat(PublicContract.convertStringToList(input)).containsExactly("cat", "dog", "horse"); } }