Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,14 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.couchbase.CouchbaseClientFactory;
import org.springframework.data.couchbase.core.CouchbaseTemplate;
import org.springframework.data.couchbase.domain.User;
import org.springframework.data.couchbase.domain.UserRepository;
import org.springframework.data.couchbase.domain.UserCol;
import org.springframework.data.couchbase.domain.UserColRepository;
import org.springframework.data.couchbase.transaction.error.TransactionSystemUnambiguousException;
import org.springframework.data.couchbase.util.ClusterType;
import org.springframework.data.couchbase.util.CollectionAwareIntegrationTests;
import org.springframework.data.couchbase.util.IgnoreWhen;
import org.springframework.data.couchbase.util.JavaIntegrationTests;
import org.springframework.stereotype.Service;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;

/**
Expand All @@ -51,14 +48,13 @@
* @author Michael Reiche
*/
@IgnoreWhen(clusterTypes = ClusterType.MOCKED)
@SpringJUnitConfig(
classes = { TransactionsConfig.class, CouchbaseTransactionalRepositoryIntegrationTests.UserService.class })
public class CouchbaseTransactionalRepositoryIntegrationTests extends JavaIntegrationTests {
@SpringJUnitConfig(classes = { TransactionsConfig.class,
CouchbaseTransactionalRepositoryCollectionIntegrationTests.UserService.class })
public class CouchbaseTransactionalRepositoryCollectionIntegrationTests extends CollectionAwareIntegrationTests {
// intellij flags "Could not autowire" when config classes are specified with classes={...}. But they are populated.
@Autowired UserRepository userRepo;
@Autowired CouchbaseClientFactory couchbaseClientFactory;
@Autowired UserColRepository userRepo;
@Autowired UserService userService;
@Autowired CouchbaseTemplate operations;
//@Autowired CouchbaseTemplate operations;

@BeforeAll
public static void beforeAll() {
Expand All @@ -77,9 +73,9 @@ public void afterEachTest() {

@Test
public void findByFirstname() {
operations.insertById(User.class).one(new User(UUID.randomUUID().toString(), "Ada", "Lovelace"));
userRepo.getOperations().insertById(UserCol.class).one(new UserCol(UUID.randomUUID().toString(), "Ada", "Lovelace"));

List<User> users = userService.findByFirstname("Ada");
List<UserCol> users = userService.findByFirstname("Ada");

assertNotEquals(0, users.size());
}
Expand All @@ -91,19 +87,19 @@ public void save() {
userService.run(repo -> {
assertInTransaction();

User user0 = repo.save(new User(id, "Ada", "Lovelace"));
UserCol user0 = repo.save(new UserCol(id, "Ada", "Lovelace"));

assertInTransaction();

// read your own write
User user1 = operations.findById(User.class).one(id);
UserCol user1 = userRepo.getOperations().findById(UserCol.class).one(id);
assertNotNull(user1);

assertInTransaction();

});

User user = operations.findById(User.class).one(id);
UserCol user = userRepo.getOperations().findById(UserCol.class).one(id);
assertNotNull(user);
}

Expand All @@ -114,26 +110,26 @@ public void saveRolledBack() {

assertThrowsWithCause(() -> {
userService.run(repo -> {
User user = repo.save(new User(id, "Ada", "Lovelace"));
UserCol user = repo.save(new UserCol(id, "Ada", "Lovelace"));
SimulateFailureException.throwEx("fail");
});
}, TransactionSystemUnambiguousException.class, SimulateFailureException.class);

User user = operations.findById(User.class).one(id);
UserCol user = userRepo.getOperations().findById(UserCol.class).one(id);
assertNull(user);
}

@Service // this will work in the unit tests even without @Service because of explicit loading by @SpringJUnitConfig
static class UserService {
@Autowired UserRepository userRepo;
@Autowired UserColRepository userRepo;

@Transactional
public void run(Consumer<UserRepository> callback) {
public void run(Consumer<UserColRepository> callback) {
callback.accept(userRepo);
}

@Transactional
public List<User> findByFirstname(String name) {
public List<UserCol> findByFirstname(String name) {
return userRepo.findByFirstname(name);
}

Expand Down