2323import com .amazonaws .services .dynamodbv2 .AmazonDynamoDB ;
2424import com .amazonaws .services .dynamodbv2 .AmazonDynamoDBClientBuilder ;
2525
26+ import com .amazonaws .services .dynamodbv2 .datamodeling .DynamoDBMapper ;
27+ import com .amazonaws .services .dynamodbv2 .model .CreateTableRequest ;
28+ import com .amazonaws .services .dynamodbv2 .model .ProvisionedThroughput ;
2629import org .junit .Before ;
2730import org .junit .Test ;
2831import org .junit .runner .RunWith ;
2932import org .slf4j .Logger ;
3033import org .slf4j .LoggerFactory ;
3134import org .socialsignin .spring .data .dynamodb .domain .sample .AuditableUser ;
3235import org .socialsignin .spring .data .dynamodb .domain .sample .AuditableUserRepository ;
36+ import org .socialsignin .spring .data .dynamodb .domain .sample .CRUDOperationsIT ;
37+ import org .socialsignin .spring .data .dynamodb .domain .sample .Playlist ;
38+ import org .socialsignin .spring .data .dynamodb .mapping .DynamoDBMappingContext ;
3339import org .socialsignin .spring .data .dynamodb .repository .config .EnableDynamoDBRepositories ;
40+ import org .socialsignin .spring .data .dynamodb .utils .DynamoDBLocalResource ;
41+ import org .socialsignin .spring .data .dynamodb .utils .TableCreationListener ;
3442import org .springframework .beans .factory .annotation .Autowired ;
3543import org .springframework .context .annotation .Bean ;
3644import org .springframework .context .annotation .Configuration ;
3745import org .springframework .data .domain .AuditorAware ;
3846import org .springframework .test .context .ContextConfiguration ;
47+ import org .springframework .test .context .TestExecutionListeners ;
3948import org .springframework .test .context .junit4 .SpringJUnit4ClassRunner ;
4049import org .springframework .util .Assert ;
4150
4756import static org .junit .Assert .assertTrue ;
4857import static org .mockito .Mockito .doReturn ;
4958import static org .mockito .Mockito .mock ;
59+ import static org .springframework .test .context .TestExecutionListeners .MergeMode .MERGE_WITH_DEFAULTS ;
5060
5161/**
5262 * Integration tests for auditing via Java config.
5363 *
5464 * @author Vito Limandibhrata
5565 */
5666@ RunWith (SpringJUnit4ClassRunner .class )
57- @ ContextConfiguration (classes = AuditingViaJavaConfigRepositoriesIT .class )
58- @ Configuration
59- @ EnableDynamoDBAuditing (auditorAwareRef = "auditorProvider" )
60- @ EnableDynamoDBRepositories (basePackageClasses = AuditableUserRepository .class )
61- public class AuditingViaJavaConfigRepositoriesIT extends AbstractDynamoDBConfiguration {
67+ @ ContextConfiguration (classes = {DynamoDBLocalResource .class , AuditingViaJavaConfigRepositoriesIT .TestAppConfig .class })
68+ @ TestExecutionListeners (listeners = TableCreationListener .class , mergeMode = MERGE_WITH_DEFAULTS )
69+
70+ public class AuditingViaJavaConfigRepositoriesIT {
6271
6372 private static final Logger LOGGER = LoggerFactory .getLogger (AuditingViaJavaConfigRepositoriesIT .class );
6473
65- private static final String DYNAMODB_PORT_PROPERTY = "dynamodb.port" ;
66- private static final String PORT = System .getProperty (DYNAMODB_PORT_PROPERTY );
74+ @ Configuration
75+ @ EnableDynamoDBAuditing (auditorAwareRef = "auditorProvider" )
76+ @ EnableDynamoDBRepositories (mappingContextRef = "dynamoDBMappingContext" , basePackages = "org.socialsignin.spring.data.dynamodb.domain.sample" )
77+ public static class TestAppConfig {
78+
79+ @ Bean (name = "auditorProvider" )
80+ public AuditorAware <AuditableUser > auditorProvider () {
81+ LOGGER .info ("auditorProvider" );
82+ return mock (AuditorAware .class );
83+ }
84+
85+ @ Bean
86+ public DynamoDBMappingContext dynamoDBMappingContext () {
87+ DynamoDBMappingContext mappingContext = new DynamoDBMappingContext ();
88+ // Register entity
89+ // TODO but this shouldn't be nessassary?!
90+ mappingContext .getPersistentEntity (AuditableUser .class );
91+ return mappingContext ;
92+ }
93+ }
6794
6895 @ Autowired
6996 AuditableUserRepository auditableUserRepository ;
@@ -73,48 +100,16 @@ public class AuditingViaJavaConfigRepositoriesIT extends AbstractDynamoDBConfigu
73100
74101 AuditableUser auditor ;
75102
76- @ Override
77- protected String [] getMappingBasePackages () {
78- return new String []{"org.socialsignin.spring.data.dynamodb.domain.sample" };
79- }
80-
81- @ Bean (name = "auditorProvider" )
82- @ SuppressWarnings ("unchecked" )
83- public AuditorAware <AuditableUser > auditorProvider () {
84- LOGGER .info ("auditorProvider" );
85- return mock (AuditorAware .class );
86- }
87-
88- @ Bean
89- @ Override
90- public AmazonDynamoDB amazonDynamoDB () {
91- Assert .notNull (PORT , "System property '" + DYNAMODB_PORT_PROPERTY + " not set!" );
92-
93- AmazonDynamoDB amazonDynamoDB = AmazonDynamoDBClientBuilder .standard ()
94- .withCredentials (new AWSStaticCredentialsProvider (amazonAWSCredentials ()))
95- .withEndpointConfiguration (new EndpointConfiguration (String .format ("http://localhost:%s" , PORT ),
96- Regions .DEFAULT_REGION .getName ()))
97- .build ();
98- return amazonDynamoDB ;
99- }
100-
101- /**
102- * Must return the same credential as
103- * {@link org.socialsignin.spring.data.dynamodb.core.ConfigurationTI} otherwise
104- * the repository will connect to different local DynamoDB instance hence it
105- * will return no table found
106- *
107- * @return
108- */
109- @ Bean
110- @ Override
111- public AWSCredentials amazonAWSCredentials () {
112- return new BasicAWSCredentials ("AWS-Key" , "" );
113- }
103+ @ Autowired
104+ private AmazonDynamoDB ddb ;
114105
115106 @ Before
116- public void setup () {
117- auditableUserRepository .deleteAll ();
107+ public void setUp () throws InterruptedException {
108+ CreateTableRequest ctr = new DynamoDBMapper (ddb ).generateCreateTableRequest (AuditableUser .class );
109+ ctr .withProvisionedThroughput (new ProvisionedThroughput (10L , 10L ));
110+ ddb .createTable (ctr );
111+ // Thread.sleep(5 * 1000);
112+
118113 this .auditor = auditableUserRepository .save (new AuditableUser ("auditor" ));
119114 assertThat (this .auditor , is (notNullValue ()));
120115
0 commit comments