Add Transient, Stream and Flux Pair tests. (#1175)

Closes #1174.
This commit is contained in:
Michael Reiche
2021-08-11 14:45:01 -07:00
committed by GitHub
parent 7d5e33ad71
commit 51b0d32636
4 changed files with 62 additions and 5 deletions

View File

@@ -14,6 +14,7 @@ import org.springframework.data.couchbase.core.RemoveResult;
import org.springframework.data.couchbase.util.Capabilities;
import org.springframework.data.couchbase.util.ClusterType;
import org.springframework.data.couchbase.util.IgnoreWhen;
import org.springframework.data.util.Pair;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.publisher.ParallelFlux;
@@ -130,6 +131,26 @@ public class FluxTest extends JavaIntegrationTests {
assertEquals(0, airports.size(), "should have been all deleted");
}
@Test
@IgnoreWhen(missesCapabilities = { Capabilities.QUERY }, clusterTypes = ClusterType.MOCKED)
public void pairIdAndResult() {
LinkedList<Airport> list = new LinkedList<>();
Airport a = new Airport(UUID.randomUUID().toString(), "iata", "lowp");
for (int i = 0; i < 5; i++) {
list.add(a.withId(UUID.randomUUID().toString()));
}
Flux<Object> af = Flux.fromIterable(list).concatMap((entity) -> airportRepository.save(entity));
List<Object> saved = af.collectList().block();
System.out.println("results.size() : " + saved.size());
Flux<Pair<String, Mono<Airport>>> pairFlux = Flux.fromIterable(list)
.map((airport) -> Pair.of(airport.getId(), airportRepository.findById(airport.getId())));
List<Pair<String, Mono<Airport>>> airportPairs = pairFlux.collectList().block();
for (Pair<String, Mono<Airport>> airportPair : airportPairs) {
System.out.println("id: " + airportPair.getFirst() + " airport: " + airportPair.getSecond().block());
}
}
@Test
public void flatMapCB() throws Exception {
System.out.println("Start flatMapCB");

View File

@@ -24,6 +24,7 @@ import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.PersistenceConstructor;
import org.springframework.data.annotation.Transient;
import org.springframework.data.annotation.Version;
import org.springframework.data.couchbase.core.mapping.Document;
@@ -41,6 +42,8 @@ public class User extends ComparableEntity {
@Id private String id;
private String firstname;
private String lastname;
@Transient
private String transientInfo;
@CreatedBy private String createdBy;
@CreatedDate private long createdDate;
@LastModifiedBy private String lastModifiedBy;
@@ -94,4 +97,10 @@ public class User extends ComparableEntity {
return Objects.hash(id, firstname, lastname);
}
public String getTransientInfo(){
return transientInfo;
}
public void setTransientInfo(String something) {
transientInfo = something;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors
* Copyright 2012-2021 the original author or authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,7 +17,9 @@
package org.springframework.data.couchbase.domain;
import java.util.List;
import java.util.stream.Stream;
import com.couchbase.client.java.query.QueryScanConsistency;
import org.springframework.data.couchbase.repository.CouchbaseRepository;
import org.springframework.data.couchbase.repository.Query;
import org.springframework.data.couchbase.repository.ScanConsistency;
@@ -25,7 +27,6 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import com.couchbase.client.java.json.JsonArray;
import com.couchbase.client.java.query.QueryScanConsistency;
/**
* User Repository for tests
@@ -34,11 +35,13 @@ import com.couchbase.client.java.query.QueryScanConsistency;
* @author Michael Reiche
*/
@Repository
@ScanConsistency(query = QueryScanConsistency.REQUEST_PLUS)
@ScanConsistency(query=QueryScanConsistency.REQUEST_PLUS)
public interface UserRepository extends CouchbaseRepository<User, String> {
List<User> findByFirstname(String firstname);
Stream<User> findByLastname(String lastname);
List<User> findByFirstnameIn(String... firstnames);
List<User> findByFirstnameIn(JsonArray firstnames);
@@ -54,5 +57,4 @@ public interface UserRepository extends CouchbaseRepository<User, String> {
List<User> findByIdIsNotNullAndFirstnameEquals(String firstname);
List<User> findByVersionEqualsAndFirstnameEquals(Long version, String firstname);
}

View File

@@ -35,6 +35,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.Optional;
import java.util.stream.Collectors;
import org.junit.jupiter.api.BeforeEach;
@@ -354,11 +355,20 @@ public class CouchbaseRepositoryQueryIntegrationTests extends ClusterAwareIntegr
assertNull(airport2, "airport2 should have likely been null at least once");
}
@Test
public void testTransient() {
User user = new User("1", "Dave", "Wilson");
user.setTransientInfo("something");
userRepository.save(user);
Optional<User> foundUser = userRepository.findById(user.getId());
assertEquals(null, foundUser.get().getTransientInfo());
userRepository.delete(user);
}
@Test
public void testCas() {
User user = new User("1", "Dave", "Wilson");
userRepository.save(user);
userRepository.findByFirstname("Dave");
user.setVersion(user.getVersion() - 1);
assertThrows(DataIntegrityViolationException.class, () -> userRepository.save(user));
user.setVersion(0);
@@ -366,6 +376,21 @@ public class CouchbaseRepositoryQueryIntegrationTests extends ClusterAwareIntegr
userRepository.delete(user);
}
@Test
public void testStreamQuery() {
User user1 = new User("1", "Dave", "Wilson");
User user2 = new User("2", "Brian", "Wilson");
userRepository.save(user1);
userRepository.save(user2);
List<User> users = userRepository.findByLastname("Wilson").collect(Collectors.toList());
assertEquals(2,users.size());
assertTrue(users.contains(user1));
assertTrue(users.contains(user2));
userRepository.delete(user1);
userRepository.delete(user2);
}
@Test
public void testExpiryAnnotation() {
UserAnnotated user = new UserAnnotated("1", "Dave", "Wilson");