Search in sources :

Example 16 with User

use of com.google.cloud.spring.data.firestore.entities.User in project spring-cloud-gcp by GoogleCloudPlatform.

the class FirestoreIntegrationTests method transactionTest.

@Test
void transactionTest() {
    User alice = new User("Alice", 29);
    User bob = new User("Bob", 60);
    User user = new User(null, 40);
    DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
    transactionDefinition.setReadOnly(false);
    TransactionalOperator operator = TransactionalOperator.create(this.txManager, transactionDefinition);
    reset(this.txManager);
    this.firestoreTemplate.save(alice).then(this.firestoreTemplate.save(bob)).then(this.firestoreTemplate.save(user)).as(operator::transactional).block();
    assertThat(this.firestoreTemplate.findAll(User.class).collectList().block()).containsExactlyInAnyOrder(bob, alice, user);
    verify(this.txManager, times(1)).commit(any());
    verify(this.txManager, times(0)).rollback(any());
    verify(this.txManager, times(1)).getReactiveTransaction(any());
    reset(this.txManager);
    // test rollback
    this.firestoreTemplate.saveAll(Mono.defer(() -> {
        throw new FirestoreDataException("BOOM!");
    })).then(this.firestoreTemplate.deleteAll(User.class)).as(operator::transactional).onErrorResume(throwable -> Mono.empty()).block();
    verify(this.txManager, times(0)).commit(any());
    verify(this.txManager, times(1)).rollback(any());
    verify(this.txManager, times(1)).getReactiveTransaction(any());
    assertThat(this.firestoreTemplate.count(User.class).block()).isEqualTo(3);
    this.firestoreTemplate.findAll(User.class).flatMap(a -> {
        a.setAge(a.getAge() - 1);
        return this.firestoreTemplate.save(a);
    }).as(operator::transactional).collectList().block();
    List<User> users = this.firestoreTemplate.findAll(User.class).collectList().block();
    assertThat(users).extracting("age").containsExactlyInAnyOrder(28, 59, 39);
    assertThat(users).extracting("name").doesNotContainNull();
    this.firestoreTemplate.deleteAll(User.class).as(operator::transactional).block();
    assertThat(this.firestoreTemplate.findAll(User.class).collectList().block()).isEmpty();
}
Also used : TransactionalOperator(org.springframework.transaction.reactive.TransactionalOperator) ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) BeforeEach(org.junit.jupiter.api.BeforeEach) StepVerifier(reactor.test.StepVerifier) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) Timestamp(com.google.cloud.Timestamp) FirestoreTemplate(com.google.cloud.spring.data.firestore.FirestoreTemplate) User(com.google.cloud.spring.data.firestore.entities.User) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) BeforeAll(org.junit.jupiter.api.BeforeAll) EnabledIfSystemProperty(org.junit.jupiter.api.condition.EnabledIfSystemProperty) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) FirestoreReactiveOperations(com.google.cloud.spring.data.firestore.FirestoreReactiveOperations) FirestoreDataException(com.google.cloud.spring.data.firestore.FirestoreDataException) SpringExtension(org.springframework.test.context.junit.jupiter.SpringExtension) TransactionalOperator(org.springframework.transaction.reactive.TransactionalOperator) Mockito.times(org.mockito.Mockito.times) Mono(reactor.core.publisher.Mono) UUID(java.util.UUID) ReactiveFirestoreTransactionManager(com.google.cloud.spring.data.firestore.transaction.ReactiveFirestoreTransactionManager) Mockito.verify(org.mockito.Mockito.verify) StatusRuntimeException(io.grpc.StatusRuntimeException) Test(org.junit.jupiter.api.Test) Flux(reactor.core.publisher.Flux) Level(ch.qos.logback.classic.Level) PhoneNumber(com.google.cloud.spring.data.firestore.entities.PhoneNumber) List(java.util.List) ContextConfiguration(org.springframework.test.context.ContextConfiguration) Mockito.reset(org.mockito.Mockito.reset) User(com.google.cloud.spring.data.firestore.entities.User) DefaultTransactionDefinition(org.springframework.transaction.support.DefaultTransactionDefinition) FirestoreDataException(com.google.cloud.spring.data.firestore.FirestoreDataException) Test(org.junit.jupiter.api.Test)

Example 17 with User

use of com.google.cloud.spring.data.firestore.entities.User in project spring-cloud-gcp by GoogleCloudPlatform.

the class FirestoreIntegrationTests method deleteAllByIdTest.

@Test
void deleteAllByIdTest() {
    User alice = new User("Alice", 29);
    User bob = new User("Bob", 60);
    this.firestoreTemplate.save(alice).block();
    this.firestoreTemplate.save(bob).block();
    StepVerifier.create(this.firestoreTemplate.deleteById(Flux.just("Bob", "Saitama", "Alice"), User.class).then(this.firestoreTemplate.count(User.class))).expectNext(0L).verifyComplete();
}
Also used : User(com.google.cloud.spring.data.firestore.entities.User) Test(org.junit.jupiter.api.Test)

Example 18 with User

use of com.google.cloud.spring.data.firestore.entities.User in project spring-cloud-gcp by GoogleCloudPlatform.

the class FirestoreIntegrationTests method deleteTest.

@Test
void deleteTest() {
    this.firestoreTemplate.save(new User("alpha", 45)).block();
    this.firestoreTemplate.save(new User("beta", 23)).block();
    this.firestoreTemplate.save(new User("gamma", 44)).block();
    this.firestoreTemplate.save(new User("Joe Hogan", 22)).block();
    assertThat(this.firestoreTemplate.count(User.class).block()).isEqualTo(4);
    this.firestoreTemplate.delete(Mono.just(new User("alpha", 45))).block();
    assertThat(this.firestoreTemplate.findAll(User.class).map(User::getName).collectList().block()).containsExactlyInAnyOrder("beta", "gamma", "Joe Hogan");
    this.firestoreTemplate.deleteById(Mono.just("beta"), User.class).block();
    assertThat(this.firestoreTemplate.findAll(User.class).map(User::getName).collectList().block()).containsExactlyInAnyOrder("gamma", "Joe Hogan");
    this.firestoreTemplate.deleteAll(User.class).block();
    assertThat(this.firestoreTemplate.count(User.class).block()).isZero();
}
Also used : User(com.google.cloud.spring.data.firestore.entities.User) Test(org.junit.jupiter.api.Test)

Example 19 with User

use of com.google.cloud.spring.data.firestore.entities.User in project spring-cloud-gcp by GoogleCloudPlatform.

the class FirestoreIntegrationTests method updateTimeTest.

@Test
void updateTimeTest() {
    User bob = new User("Bob", 60, null);
    this.firestoreTemplate.saveAll(Flux.just(bob)).collectList().block();
    List<User> users = this.firestoreTemplate.findAll(User.class).collectList().block();
    assertThat(users).containsExactly(bob);
    assertThat(bob.getUpdateTime()).isNotNull();
}
Also used : User(com.google.cloud.spring.data.firestore.entities.User) Test(org.junit.jupiter.api.Test)

Example 20 with User

use of com.google.cloud.spring.data.firestore.entities.User in project spring-cloud-gcp by GoogleCloudPlatform.

the class FirestoreRepositoryIntegrationTests method transactionPropagationTest.

@Test
void transactionPropagationTest() {
    User alice = new User("Alice", 29);
    User bob = new User("Bob", 60);
    this.userRepository.save(alice).then(this.userRepository.save(bob)).block();
    this.userService.updateUsersTransactionPropagation().block();
    verify(this.transactionManager, times(1)).commit(any());
    verify(this.transactionManager, times(0)).rollback(any());
    verify(this.transactionManager, times(1)).getReactiveTransaction(any());
    assertThat(this.userRepository.findAll().map(User::getAge).collectList().block()).containsExactlyInAnyOrder(28, 59);
}
Also used : User(com.google.cloud.spring.data.firestore.entities.User) Test(org.junit.jupiter.api.Test)

Aggregations

User (com.google.cloud.spring.data.firestore.entities.User)23 Test (org.junit.jupiter.api.Test)23 TransactionalOperator (org.springframework.transaction.reactive.TransactionalOperator)5 StepVerifier (reactor.test.StepVerifier)5 Address (com.google.cloud.spring.data.firestore.entities.User.Address)4 ReactiveFirestoreTransactionManager (com.google.cloud.spring.data.firestore.transaction.ReactiveFirestoreTransactionManager)4 List (java.util.List)4 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)4 BeforeEach (org.junit.jupiter.api.BeforeEach)4 EnabledIfSystemProperty (org.junit.jupiter.api.condition.EnabledIfSystemProperty)4 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)4 ArgumentMatchers.any (org.mockito.ArgumentMatchers.any)4 Mockito.reset (org.mockito.Mockito.reset)4 Mockito.times (org.mockito.Mockito.times)4 Mockito.verify (org.mockito.Mockito.verify)4 Autowired (org.springframework.beans.factory.annotation.Autowired)4 ContextConfiguration (org.springframework.test.context.ContextConfiguration)4 SpringExtension (org.springframework.test.context.junit.jupiter.SpringExtension)4 DefaultTransactionDefinition (org.springframework.transaction.support.DefaultTransactionDefinition)4 Flux (reactor.core.publisher.Flux)4