diff --git a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java index f98cbf7e5..8e08c0898 100644 --- a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateKeyValueIntegrationTests.java @@ -38,6 +38,7 @@ import org.springframework.data.couchbase.core.ExecutableRemoveByIdOperation.ExecutableRemoveById; import org.springframework.data.couchbase.core.ExecutableReplaceByIdOperation.ExecutableReplaceById; import org.springframework.data.couchbase.core.support.OneAndAllEntity; +import org.springframework.data.couchbase.domain.NaiveAuditorAware; import org.springframework.data.couchbase.domain.PersonValue; import org.springframework.data.couchbase.domain.User; import org.springframework.data.couchbase.domain.UserAnnotated; @@ -77,16 +78,31 @@ void upsertAndFindById() { User user = new User(UUID.randomUUID().toString(), "firstname", "lastname"); User modified = couchbaseTemplate.upsertById(User.class).one(user); assertEquals(user, modified); - - modified = couchbaseTemplate.replaceById(User.class).one(user); - assertEquals(user, modified); - - user.setVersion(12345678); - assertThrows(DataIntegrityViolationException.class, () -> couchbaseTemplate.replaceById(User.class).one(user)); + // create a new object so that the object returned by replaceById() is a different object from the original user + // don't need to copy the ModifiedDate/ModifiedTime as they are not read and are overwritten. + User modifying = new User(user.getId(), user.getFirstname(), user.getLastname()); + modifying.setCreatedDate(user.getCreatedDate()); + modifying.setCreatedBy(user.getCreatedBy()); + modifying.setVersion(user.getVersion()); + modified = couchbaseTemplate.replaceById(User.class).one(modifying); + assertEquals(modifying, modified); + if(user == modified){ + throw new RuntimeException ( " user == modified "); + } + assertNotEquals(user, modified); + assertEquals(NaiveAuditorAware.AUDITOR, modified.getCreatedBy()); + assertEquals(NaiveAuditorAware.AUDITOR, modified.getLastModifiedBy()); + assertNotEquals(0, modified.getCreatedDate()); + assertNotEquals(0, modified.getLastModifiedDate()); + // The FixedDateTimeService of the AuditingDateTimeProvider will guarantee these are equal + assertEquals(user.getLastModifiedDate(), modified.getLastModifiedDate()); + + User badUser = new User(user.getId(), user.getFirstname(), user.getLastname()); + badUser.setVersion(12345678); + assertThrows(DataIntegrityViolationException.class, () -> couchbaseTemplate.replaceById(User.class).one(badUser)); User found = couchbaseTemplate.findById(User.class).one(user.getId()); - user.setVersion(found.getVersion()); - assertEquals(user, found); + assertEquals(modified, found); couchbaseTemplate.removeById().one(user.getId()); } diff --git a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryCollectionIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryCollectionIntegrationTests.java index 586986afe..c84e09eae 100644 --- a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryCollectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryCollectionIntegrationTests.java @@ -150,7 +150,7 @@ void findByQueryAll() { for (User u : foundUsers) { assertTrue(u.equals(user1) || u.equals(user2)); - assertEquals(auditUser, u.getCreator()); + assertEquals(auditUser, u.getCreatedBy()); assertEquals(auditMillis, u.getCreatedDate()); assertEquals(auditUser, u.getLastModifiedBy()); assertEquals(auditMillis, u.getLastModifiedDate()); diff --git a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryIntegrationTests.java index 22518fdcc..db0b797c5 100644 --- a/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryIntegrationTests.java @@ -99,7 +99,7 @@ void findByQueryAll() { for (User u : foundUsers) { assertTrue(u.equals(user1) || u.equals(user2)); - assertEquals(auditUser, u.getCreator()); + assertEquals(auditUser, u.getCreatedBy()); assertEquals(auditMillis, u.getCreatedDate()); assertEquals(auditUser, u.getLastModifiedBy()); assertEquals(auditMillis, u.getLastModifiedDate()); diff --git a/src/test/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateKeyValueIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateKeyValueIntegrationTests.java index 4fc5e998b..5971a078d 100644 --- a/src/test/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateKeyValueIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateKeyValueIntegrationTests.java @@ -37,7 +37,9 @@ import org.springframework.dao.DuplicateKeyException; import org.springframework.data.couchbase.core.ExecutableRemoveByIdOperation.ExecutableRemoveById; import org.springframework.data.couchbase.core.support.OneAndAllEntityReactive; +import org.springframework.data.couchbase.domain.NaiveAuditorAware; import org.springframework.data.couchbase.domain.PersonValue; +import org.springframework.data.couchbase.domain.ReactiveNaiveAuditorAware; import org.springframework.data.couchbase.domain.User; import org.springframework.data.couchbase.domain.UserAnnotated; import org.springframework.data.couchbase.domain.UserAnnotated2; @@ -72,17 +74,33 @@ void upsertAndFindById() { User user = new User(UUID.randomUUID().toString(), "firstname", "lastname"); User modified = reactiveCouchbaseTemplate.upsertById(User.class).one(user).block(); assertEquals(user, modified); - - modified = reactiveCouchbaseTemplate.replaceById(User.class).one(user).block(); - assertEquals(user, modified); - - user.setVersion(12345678); + // create a new object so that the object returned by replaceById() is a different object from the original user + // don't need to copy the ModifiedDate/ModifiedTime as they are not read and are overwritten. + User modifying = new User(user.getId(), user.getFirstname(), user.getLastname()); + modifying.setCreatedDate(user.getCreatedDate()); + modifying.setCreatedBy(user.getCreatedBy()); + modifying.setVersion(user.getVersion()); + modified = reactiveCouchbaseTemplate.replaceById(User.class).one(modifying).block(); + assertEquals(modifying, modified); + if(user == modified){ + throw new RuntimeException ( " user == modified "); + } + assertNotEquals(user, modified); + assertEquals(ReactiveNaiveAuditorAware.AUDITOR, modified.getCreatedBy()); + assertEquals(ReactiveNaiveAuditorAware.AUDITOR, modified.getLastModifiedBy()); + assertNotEquals(0, modified.getCreatedDate()); + assertNotEquals(0, modified.getLastModifiedDate()); + // The FixedDateTimeService of the AuditingDateTimeProvider will guarantee these are equal + assertEquals(user.getLastModifiedDate(), modified.getLastModifiedDate()); + + User badUser = new User(user.getId(), user.getFirstname(), user.getLastname()); + badUser.setVersion(12345678); assertThrows(DataIntegrityViolationException.class, - () -> reactiveCouchbaseTemplate.replaceById(User.class).one(user).block()); + () -> reactiveCouchbaseTemplate.replaceById(User.class).one(badUser).block()); User found = reactiveCouchbaseTemplate.findById(User.class).one(user.getId()).block(); user.setVersion(found.getVersion()); - assertEquals(user, found); + assertEquals(modified, found); reactiveCouchbaseTemplate.removeById().one(user.getId()).block(); } diff --git a/src/test/java/org/springframework/data/couchbase/core/query/ReactiveCouchbaseTemplateQueryCollectionIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/core/query/ReactiveCouchbaseTemplateQueryCollectionIntegrationTests.java index 8c3cd9437..afc7f5c15 100644 --- a/src/test/java/org/springframework/data/couchbase/core/query/ReactiveCouchbaseTemplateQueryCollectionIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/query/ReactiveCouchbaseTemplateQueryCollectionIntegrationTests.java @@ -148,7 +148,7 @@ void findByQueryAll() { for (User u : foundUsers) { assertTrue(u.equals(user1) || u.equals(user2)); - assertEquals(auditUser, u.getCreator()); + assertEquals(auditUser, u.getCreatedBy()); assertEquals(auditMillis, u.getCreatedDate()); assertEquals(auditUser, u.getLastModifiedBy()); assertEquals(auditMillis, u.getLastModifiedDate()); diff --git a/src/test/java/org/springframework/data/couchbase/domain/Config.java b/src/test/java/org/springframework/data/couchbase/domain/Config.java index 78b780773..fbdf3d57e 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/Config.java +++ b/src/test/java/org/springframework/data/couchbase/domain/Config.java @@ -54,9 +54,8 @@ @Configuration @EnableCouchbaseRepositories @EnableReactiveCouchbaseRepositories -@EnableCouchbaseAuditing(auditorAwareRef = "auditorAwareRef", dateTimeProviderRef = "dateTimeProviderRef") -@EnableReactiveCouchbaseAuditing(auditorAwareRef = "reactiveAuditorAwareRef", - dateTimeProviderRef = "dateTimeProviderRef") +@EnableCouchbaseAuditing(dateTimeProviderRef = "dateTimeProviderRef") +@EnableReactiveCouchbaseAuditing(dateTimeProviderRef = "dateTimeProviderRef") public class Config extends AbstractCouchbaseConfiguration { String bucketname = "travel-sample"; @@ -128,11 +127,11 @@ public void configureReactiveRepositoryOperationsMapping(ReactiveRepositoryOpera try { // comment out references to 'protected' and 'mybucket' - they are only to show how multi-bucket would work // ReactiveCouchbaseTemplate personTemplate = myReactiveCouchbaseTemplate(myCouchbaseClientFactory("protected"), - // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); + // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); // baseMapping.mapEntity(Person.class, personTemplate); // Person goes in "protected" bucket // ReactiveCouchbaseTemplate userTemplate = myReactiveCouchbaseTemplate(myCouchbaseClientFactory("mybucket"), - // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); - //baseMapping.mapEntity(User.class, userTemplate); // User goes in "mybucket" + // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); + // baseMapping.mapEntity(User.class, userTemplate); // User goes in "mybucket" // everything else goes in getBucketName() ( which is travel-sample ) } catch (Exception e) { throw e; @@ -144,11 +143,11 @@ public void configureRepositoryOperationsMapping(RepositoryOperationsMapping bas try { // comment out references to 'protected' and 'mybucket' - they are only to show how multi-bucket would work // CouchbaseTemplate personTemplate = myCouchbaseTemplate(myCouchbaseClientFactory("protected"), - // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); + // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); // baseMapping.mapEntity(Person.class, personTemplate); // Person goes in "protected" bucket // MappingCouchbaseConverter cvtr = (MappingCouchbaseConverter)baseMapping.getDefault().getConverter(); // CouchbaseTemplate userTemplate = myCouchbaseTemplate(myCouchbaseClientFactory("mybucket"), - // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); + // (MappingCouchbaseConverter) (baseMapping.getDefault().getConverter())); // baseMapping.mapEntity(User.class, userTemplate); // User goes in "mybucket" // everything else goes in getBucketName() ( which is travel-sample ) } catch (Exception e) { diff --git a/src/test/java/org/springframework/data/couchbase/domain/NaiveAuditorAware.java b/src/test/java/org/springframework/data/couchbase/domain/NaiveAuditorAware.java index 797a2dabb..2635f16a3 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/NaiveAuditorAware.java +++ b/src/test/java/org/springframework/data/couchbase/domain/NaiveAuditorAware.java @@ -32,7 +32,7 @@ */ public class NaiveAuditorAware implements AuditorAware { - static public final String AUDITOR = "auditor"; + static public final String AUDITOR = "nonreactive_auditor"; private Optional auditor = Optional.of(AUDITOR); @Override diff --git a/src/test/java/org/springframework/data/couchbase/domain/User.java b/src/test/java/org/springframework/data/couchbase/domain/User.java index f29146c09..d005e7a99 100644 --- a/src/test/java/org/springframework/data/couchbase/domain/User.java +++ b/src/test/java/org/springframework/data/couchbase/domain/User.java @@ -71,10 +71,18 @@ public long getCreatedDate() { return createdDate; } - public String getCreator() { + public void setCreatedDate(long createdDate) { + this.createdDate = createdDate; + } + + public String getCreatedBy() { return createdBy; } + public void setCreatedBy(String createdBy) { + this.createdBy = createdBy; + } + public long getLastModifiedDate() { return lastModifiedDate; } diff --git a/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java index c5b1e757c..49d12f4ba 100644 --- a/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/repository/CouchbaseRepositoryQueryIntegrationTests.java @@ -636,7 +636,7 @@ private void sleep(int millis) { @Configuration @EnableCouchbaseRepositories("org.springframework.data.couchbase") - @EnableCouchbaseAuditing(auditorAwareRef = "auditorAwareRef", dateTimeProviderRef = "dateTimeProviderRef") + @EnableCouchbaseAuditing(dateTimeProviderRef = "dateTimeProviderRef") static class Config extends AbstractCouchbaseConfiguration { @Override diff --git a/src/test/java/org/springframework/data/couchbase/repository/ReactiveCouchbaseRepositoryKeyValueIntegrationTests.java b/src/test/java/org/springframework/data/couchbase/repository/ReactiveCouchbaseRepositoryKeyValueIntegrationTests.java index 81a6b077a..6c1a89863 100644 --- a/src/test/java/org/springframework/data/couchbase/repository/ReactiveCouchbaseRepositoryKeyValueIntegrationTests.java +++ b/src/test/java/org/springframework/data/couchbase/repository/ReactiveCouchbaseRepositoryKeyValueIntegrationTests.java @@ -82,7 +82,7 @@ void findByIdAudited() { @Configuration @EnableReactiveCouchbaseRepositories("org.springframework.data.couchbase") - @EnableReactiveCouchbaseAuditing + @EnableReactiveCouchbaseAuditing(dateTimeProviderRef = "dateTimeProviderRef") static class Config extends AbstractCouchbaseConfiguration { @Override