package org.socialsignin.spring.data.dynamodb.repository.support;
import java.lang.reflect.Method;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.socialsignin.spring.data.dynamodb.domain.sample.PlaylistId;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
@RunWith(MockitoJUnitRunner.class)
@SuppressWarnings("unused")
public class DynamoDBHashAndRangeKeyMethodExtractorImplUnitTest {
private DynamoDBHashAndRangeKeyMethodExtractor<PlaylistId> playlistIdMetadata;
private DynamoDBHashAndRangeKeyMethodExtractor<IdClassWithNoAnnotatedMethods> idClassWithNoHashOrRangeKeyMethodMetadata;
private DynamoDBHashAndRangeKeyMethodExtractor<IdClassWithOnlyAnnotatedHashKeyMethod> idClassWithOnlyHashKeyMethodMetadata;
private DynamoDBHashAndRangeKeyMethodExtractor<IdClassWithOnlyAnnotatedRangeKeyMethod> idClassWithOnlyRangeKeyMethodMetadata;
private DynamoDBHashAndRangeKeyMethodExtractor<IdClassWithMulitpleAnnotatedHashKeyMethods> idClassWitMultipleAnnotatedHashKeysMetadata;
private DynamoDBHashAndRangeKeyMethodExtractor<IdClassWithMulitpleAnnotatedRangeKeyMethods> idClassWitMultipleAnnotatedRangeKeysMetadata;
@Test
public void testConstruct_WhenHashKeyMethodExists_WhenRangeKeyMethodExists()
{
playlistIdMetadata = new DynamoDBHashAndRangeKeyMethodExtractorImpl<PlaylistId>(PlaylistId.class);
Method hashKeyMethod = playlistIdMetadata.getHashKeyMethod();
Assert.assertNotNull(hashKeyMethod);
Assert.assertEquals("getUserName", hashKeyMethod.getName());
Method rangeKeyMethod = playlistIdMetadata.getRangeKeyMethod();
Assert.assertNotNull(rangeKeyMethod);
Assert.assertEquals("getPlaylistName", rangeKeyMethod.getName());
Assert.assertEquals(PlaylistId.class,playlistIdMetadata.getJavaType());
}
@Test(expected=IllegalArgumentException.class)
public void testConstruct_WhenHashKeyMethodExists_WhenRangeKeyMethodDoesNotExist()
{
idClassWithOnlyHashKeyMethodMetadata = new DynamoDBHashAndRangeKeyMethodExtractorImpl<IdClassWithOnlyAnnotatedHashKeyMethod>(IdClassWithOnlyAnnotatedHashKeyMethod.class);
}
@Test(expected=IllegalArgumentException.class)
public void testConstruct_WhenHashKeyMethodDoesNotExist_WhenRangeKeyMethodExists()
{
idClassWithOnlyRangeKeyMethodMetadata = new DynamoDBHashAndRangeKeyMethodExtractorImpl<IdClassWithOnlyAnnotatedRangeKeyMethod>(IdClassWithOnlyAnnotatedRangeKeyMethod.class);
}
@Test(expected=IllegalArgumentException.class)
public void testConstruct_WhenMultipleHashKeyMethodsExist()
{
idClassWitMultipleAnnotatedHashKeysMetadata = new DynamoDBHashAndRangeKeyMethodExtractorImpl<IdClassWithMulitpleAnnotatedHashKeyMethods>(IdClassWithMulitpleAnnotatedHashKeyMethods.class);
}
@Test(expected=IllegalArgumentException.class)
public void testGetConstruct_WhenMultipleRangeKeyMethodsExist()
{
idClassWitMultipleAnnotatedRangeKeysMetadata = new DynamoDBHashAndRangeKeyMethodExtractorImpl<IdClassWithMulitpleAnnotatedRangeKeyMethods>(IdClassWithMulitpleAnnotatedRangeKeyMethods.class);
}
@Test(expected=IllegalArgumentException.class)
public void testConstruct_WhenNeitherHashKeyOrRangeKeyMethodExist()
{
idClassWithNoHashOrRangeKeyMethodMetadata = new DynamoDBHashAndRangeKeyMethodExtractorImpl<IdClassWithNoAnnotatedMethods>(IdClassWithNoAnnotatedMethods.class);
}
private class IdClassWithNoAnnotatedMethods {
public String getHashKey(){ return null;}
public String getRangeKey(){ return null;}
}
private class IdClassWithOnlyAnnotatedHashKeyMethod {
@DynamoDBHashKey
public String getHashKey(){ return null;}
public String getRangeKey(){ return null;}
}
private class IdClassWithOnlyAnnotatedRangeKeyMethod {
public String getHashKey(){ return null;}
@DynamoDBRangeKey
public String getRangeKey(){ return null;}
}
private class IdClassWithMulitpleAnnotatedHashKeyMethods {
@DynamoDBHashKey
public String getHashKey(){ return null;}
@DynamoDBHashKey
public String getOtherHashKey(){ return null;}
@DynamoDBRangeKey
public String getRangeKey(){ return null;}
}
private class IdClassWithMulitpleAnnotatedRangeKeyMethods {
@DynamoDBHashKey
public String getHashKey(){ return null;}
@DynamoDBRangeKey
public String getOtherRangeKey(){ return null;}
@DynamoDBRangeKey
public String getRangeKey(){ return null;}
}
}