package io.katharsis.resource.registry.repository; import io.katharsis.locator.JsonServiceLocator; import io.katharsis.locator.SampleJsonServiceLocator; import io.katharsis.repository.RepositoryInstanceBuilder; import io.katharsis.repository.annotations.JsonApiRelationshipRepository; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; @SuppressWarnings("unchecked") public class AnnotatedRelationshipEntryBuilderTest { @Test public void onInstanceOfAnnotatedRelationshipRepositoryShouldReturnTargetClass() { // GIVEN final AnnotatedRelationshipEntryBuilder builder = new AnnotatedRelationshipEntryBuilder( new RepositoryInstanceBuilder(new SampleJsonServiceLocator(), SimpleRelationshipRepository.class)); // WHEN final Class<?> targetClass = builder.getTargetAffiliation(); // THEN assertThat(targetClass).isEqualTo(Character.class); } @Test public void onInstanceOfAnonymousDescendantOfAnnotatedRelationshipRepositoryShouldReturnTargetClass() { // GIVEN final AnnotatedRelationshipEntryBuilder builder = new AnnotatedRelationshipEntryBuilder( new RepositoryInstanceBuilder(new JsonServiceLocator() { @Override public <T> T getInstance(Class<T> clazz) { return (T) new SimpleRelationshipRepository() {}; } }, SimpleRelationshipRepository.class) ); // WHEN final Class<?> targetClass = builder.getTargetAffiliation(); // THEN assertThat(targetClass).isEqualTo(Character.class); } @Test public void onInstanceOfNonAnnotatedClassShouldThrowIllegalArgumentException() { // GIVEN final AnnotatedRelationshipEntryBuilder builder = new AnnotatedRelationshipEntryBuilder( new RepositoryInstanceBuilder(new JsonServiceLocator() { @Override public <T> T getInstance(Class<T> clazz) { return (T) new Object(); } }, SimpleRelationshipRepository.class) ); // WHEN try { builder.getTargetAffiliation(); } catch (Exception e) { // THEN assertThat(e).isInstanceOf(IllegalArgumentException.class); } } @JsonApiRelationshipRepository(source = String.class, target = Character.class) public static class SimpleRelationshipRepository { } }