use of com.sanctionco.thunder.dao.DatabaseException in project thunder by RohanNagar.
the class MongoDbUsersDaoTest method testUpdatePutRequestRejected.
@Test
void testUpdatePutRequestRejected() {
MongoCollection<Document> collection = mock(MongoCollection.class);
FindIterable<Document> findIterable = mock(FindIterable.class);
MongoCommandException exception = mock(MongoCommandException.class);
when(exception.getErrorMessage()).thenReturn("Test error");
when(findIterable.first()).thenReturn(DOCUMENT);
doReturn(findIterable).when(collection).find(any(Bson.class));
doThrow(exception).when(collection).updateOne(any(Bson.class), any(Bson.class));
MongoDbUsersDao usersDao = new MongoDbUsersDao(collection, MAPPER);
CompletionException e = assertThrows(CompletionException.class, () -> usersDao.update(null, USER).join());
assertTrue(e.getCause() instanceof DatabaseException);
var exp = (DatabaseException) e.getCause();
assertEquals(DatabaseException.Error.REQUEST_REJECTED, exp.getError());
verify(collection, times(1)).find(any(Bson.class));
verify(collection, times(1)).updateOne(argThat((Bson bson) -> {
BsonDocument doc = bson.toBsonDocument(BsonDocument.class, MongoClientSettings.getDefaultCodecRegistry());
return doc.containsKey("version");
}), any(Bson.class));
}
use of com.sanctionco.thunder.dao.DatabaseException in project thunder by RohanNagar.
the class MongoDbUsersDaoTest method testUpdatePutTimeout.
@Test
void testUpdatePutTimeout() {
MongoCollection<Document> collection = mock(MongoCollection.class);
FindIterable<Document> findIterable = mock(FindIterable.class);
var exception = mock(MongoWriteException.class);
var error = mock(WriteError.class);
when(findIterable.first()).thenReturn(DOCUMENT);
when(exception.getError()).thenReturn(error);
when(error.getCategory()).thenReturn(ErrorCategory.EXECUTION_TIMEOUT);
doReturn(findIterable).when(collection).find(any(Bson.class));
doThrow(exception).when(collection).updateOne(any(Bson.class), any(Bson.class));
MongoDbUsersDao usersDao = new MongoDbUsersDao(collection, MAPPER);
CompletionException e = assertThrows(CompletionException.class, () -> usersDao.update(null, USER).join());
assertTrue(e.getCause() instanceof DatabaseException);
var exp = (DatabaseException) e.getCause();
assertEquals(DatabaseException.Error.DATABASE_DOWN, exp.getError());
verify(collection, times(1)).find(any(Bson.class));
verify(collection, times(1)).updateOne(argThat((Bson bson) -> {
BsonDocument doc = bson.toBsonDocument(BsonDocument.class, MongoClientSettings.getDefaultCodecRegistry());
return doc.containsKey("version");
}), any(Bson.class));
}
use of com.sanctionco.thunder.dao.DatabaseException in project thunder by RohanNagar.
the class MongoDbUsersDaoTest method testFindByEmailUnknownException.
@Test
void testFindByEmailUnknownException() {
MongoCollection<Document> collection = mock(MongoCollection.class);
MongoDbUsersDao usersDao = new MongoDbUsersDao(collection, MAPPER);
doThrow(new IllegalStateException()).when(collection).find(any(Bson.class));
CompletionException e = assertThrows(CompletionException.class, () -> usersDao.findByEmail("test@test.com").join());
assertTrue(e.getCause() instanceof DatabaseException);
var exp = (DatabaseException) e.getCause();
assertEquals(DatabaseException.Error.DATABASE_DOWN, exp.getError());
verify(collection, times(1)).find(eq(Filters.eq("_id", "test@test.com")));
}
use of com.sanctionco.thunder.dao.DatabaseException in project thunder by RohanNagar.
the class MongoDbUsersDaoTest method testUnsuccessfulDeleteDatabaseDown.
@Test
void testUnsuccessfulDeleteDatabaseDown() {
MongoCollection<Document> collection = mock(MongoCollection.class);
FindIterable<Document> findIterable = mock(FindIterable.class);
when(findIterable.first()).thenReturn(DOCUMENT);
doReturn(findIterable).when(collection).find(any(Bson.class));
doThrow(MongoTimeoutException.class).when(collection).deleteOne(any(Bson.class));
MongoDbUsersDao usersDao = new MongoDbUsersDao(collection, MAPPER);
CompletionException e = assertThrows(CompletionException.class, () -> usersDao.delete("test@test.com").join());
assertTrue(e.getCause() instanceof DatabaseException);
var exp = (DatabaseException) e.getCause();
assertEquals(DatabaseException.Error.DATABASE_DOWN, exp.getError());
verify(collection, times(1)).find(eq(Filters.eq("_id", "test@test.com")));
verify(collection, times(1)).deleteOne(eq(Filters.eq("_id", "test@test.com")));
}
use of com.sanctionco.thunder.dao.DatabaseException in project thunder by RohanNagar.
the class DynamoDbUsersDao method findByEmail.
@Override
public CompletableFuture<User> findByEmail(String email) {
Objects.requireNonNull(email);
GetItemRequest request = GetItemRequest.builder().tableName(tableName).key(Collections.singletonMap("email", AttributeValue.builder().s(email).build())).build();
return dynamoDbClient.getItem(request).thenApply(response -> {
if (response.item().size() <= 0) {
LOG.warn("The email {} was not found in the database.", email);
throw new DatabaseException("User not found in the database.", DatabaseException.Error.USER_NOT_FOUND);
}
return UsersDao.fromJson(mapper, response.item().get("document").s()).withTime(Long.parseLong(response.item().get("creation_time").n()), Long.parseLong(response.item().get("update_time").n()));
}).exceptionally(throwable -> {
throw convertToDatabaseException(throwable.getCause(), email);
});
}
Aggregations