package org.springframework.data.simpledb.util; import static org.junit.Assert.*; import java.lang.reflect.Field; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.junit.Test; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.simpledb.annotation.Attributes; import org.springframework.data.simpledb.annotation.DomainPrefix; import org.springframework.data.simpledb.reflection.MetadataParser; public class MetadataParserTest { private static final String SAMPLE_ITEM = "SAMPLE_ITEM"; @DomainPrefix(value = "testDB") static class SampleAnnotatedId { @Id private final String itemName = SAMPLE_ITEM; @Attributes private final Map<String, String> atts = new LinkedHashMap<String, String>(); } @Test public void should_read_annotated_id_value() { SampleAnnotatedId entity = new SampleAnnotatedId(); String itemName = MetadataParser.getItemName(entity); assertEquals(SAMPLE_ITEM, itemName); } @Test public void should_read_Attributes() { SampleAnnotatedId entity = new SampleAnnotatedId(); Map<String, String> attributes = MetadataParser.getAttributes(entity); assertNotNull(attributes); } static class SampleDeclaredId { @SuppressWarnings("unused") private final String id = SAMPLE_ITEM; @Attributes private final Map<String, String> atts = new LinkedHashMap<String, String>(); } @Test public void should_read_declared_id_value() { SampleDeclaredId entity = new SampleDeclaredId(); String itemName = MetadataParser.getItemName(entity); assertEquals(SAMPLE_ITEM, itemName); } @Test public void getPrimitiveFields_should_return_list_of_primitives_bypassing_ID_Attributes_and_Transient() throws Exception { List<Field> returnedPrimitives = MetadataParser.getSupportedFields(SampleDeclaredPrimitives.class); assertTrue(returnedPrimitives.contains(SampleDeclaredPrimitives.class.getDeclaredField("intPrimitive"))); assertTrue(returnedPrimitives.contains(SampleDeclaredPrimitives.class.getDeclaredField("longPrimitive"))); assertTrue(returnedPrimitives.contains(SampleDeclaredPrimitives.class.getDeclaredField("doublePrimitive"))); assertTrue(returnedPrimitives.contains(SampleDeclaredPrimitives.class.getDeclaredField("booleanPrimitive"))); assertFalse(returnedPrimitives.contains(SampleDeclaredPrimitives.class.getDeclaredField("shouldBeTransient"))); assertFalse(returnedPrimitives.contains(SampleDeclaredPrimitives.class .getDeclaredField("someUsefullAttributes"))); } @Test public void getPrimitiveFields_should_return_list_of_primitives_bypassing_ID_by_convention() throws Exception { List<Field> returnedPrimitivesConvention = MetadataParser .getSupportedFields(SampleDeclaredPrimitivesConventionId.class); assertFalse(returnedPrimitivesConvention.contains(SampleDeclaredPrimitivesConventionId.class .getDeclaredField("id"))); assertTrue(returnedPrimitivesConvention.contains(SampleDeclaredPrimitivesConventionId.class .getDeclaredField("intPrimitive"))); } @Test(expected = RuntimeException.class) public void two_ids_from_entity_should_fail_on_runtime() { MetadataParser.getIdField(new TwoIdsShouldFail()); } static class SampleDeclaredPrimitives { @Transient private int shouldBeTransient; @Id private int idField; private int intPrimitive; private long longPrimitive; private double doublePrimitive; private boolean booleanPrimitive; @Attributes Map<String, String> someUsefullAttributes = new HashMap<String, String>(); public int getShouldBeTransient() { return shouldBeTransient; } public void setShouldBeTransient(int shouldBeTransient) { this.shouldBeTransient = shouldBeTransient; } public int getIdField() { return idField; } public void setIdField(int idField) { this.idField = idField; } public int getIntPrimitive() { return intPrimitive; } public void setIntPrimitive(int intPrimitive) { this.intPrimitive = intPrimitive; } public long getLongPrimitive() { return longPrimitive; } public void setLongPrimitive(long longPrimitive) { this.longPrimitive = longPrimitive; } public double getDoublePrimitive() { return doublePrimitive; } public void setDoublePrimitive(double doublePrimitive) { this.doublePrimitive = doublePrimitive; } public boolean isBooleanPrimitive() { return booleanPrimitive; } public void setBooleanPrimitive(boolean booleanPrimitive) { this.booleanPrimitive = booleanPrimitive; } public Map<String, String> getSomeUsefullAttributes() { return someUsefullAttributes; } public void setSomeUsefullAttributes(Map<String, String> someUsefullAttributes) { this.someUsefullAttributes = someUsefullAttributes; } } static class SampleDeclaredPrimitivesConventionId { String id; int intPrimitive; public int getIntPrimitive() { return intPrimitive; } public void setIntPrimitive(int intPrimitive) { this.intPrimitive = intPrimitive; } } static class TwoIdsShouldFail { String id; @Id String anotherId; } }