database helper for tests

This commit is contained in:
Wojtek Krzywiec
2020-06-08 06:41:30 +02:00
parent 36316de3f7
commit b7db201e7b
10 changed files with 89 additions and 123 deletions

View File

@@ -1,6 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain;
import io.restassured.RestAssured;
import io.wkrzywiec.hexagonal.library.DatabaseHelper;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@@ -12,15 +13,16 @@ public abstract class BaseComponentTest {
@LocalServerPort
private int port;
protected String baseURL;
@Autowired
protected JdbcTemplate jdbcTemplate;
protected DatabaseHelper databaseHelper;
@BeforeEach
public void init() {
this.baseURL = "http://localhost:" + port;
RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
databaseHelper = new DatabaseHelper(jdbcTemplate);
}
}

View File

@@ -1,7 +1,5 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.UserTestData;
import io.wkrzywiec.hexagonal.library.domain.BaseComponentTest;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowBookCommand;
import org.junit.jupiter.api.DisplayName;
@@ -20,15 +18,8 @@ public class BorrowBookComponentTest extends BaseComponentTest {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenBookIsReserved_thenBorrowIt_thenBookIsBorrowed() {
//given
Long homoDeusBookId = jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
Long activeUserId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
Long homoDeusBookId = databaseHelper.getHomoDeusBookId();
Long activeUserId = databaseHelper.getJohnDoeUserId();
BorrowBookCommand borrowBookCommand =
BorrowBookCommand.builder()
@@ -45,11 +36,7 @@ public class BorrowBookComponentTest extends BaseComponentTest {
.prettyPeek()
.then();
Long borrowId = jdbcTemplate.queryForObject(
"SELECT id FROM borrowed WHERE book_id = ?",
Long.class,
homoDeusBookId);
Long borrowId = databaseHelper.getPrimaryKeyOfBorrowedByBookId(homoDeusBookId);
assertTrue(borrowId > 0);
}
}

View File

@@ -1,7 +1,5 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.UserTestData;
import io.wkrzywiec.hexagonal.library.domain.BaseComponentTest;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.GiveBackBookCommand;
import org.junit.jupiter.api.DisplayName;
@@ -18,17 +16,10 @@ public class GiveBackBookComponentTest extends BaseComponentTest {
@DisplayName("Give back borrowed book")
@Sql({"/book-and-user.sql", "/borrowed-book.sql"})
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenBookIsReserved_thenBorrowIt_thenBookIsBorrowed() {
public void givenBookIsBorrowed_thenGiveBackIt_thenItIsAvailable() {
//given
Long homoDeusBookId = jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
Long activeUserId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
Long homoDeusBookId = databaseHelper.getHomoDeusBookId();
Long activeUserId = databaseHelper.getJohnDoeUserId();
GiveBackBookCommand giveBackBookCommand =
GiveBackBookCommand.builder()
@@ -45,10 +36,7 @@ public class GiveBackBookComponentTest extends BaseComponentTest {
.prettyPeek()
.then();
Long bookId = jdbcTemplate.queryForObject(
"SELECT book_id FROM available WHERE book_id = ?",
Long.class,
homoDeusBookId);
Long bookId = databaseHelper.getPrimaryKeyOfAvailableByBookBy(homoDeusBookId);
assertEquals(homoDeusBookId, bookId);
}

View File

@@ -1,7 +1,5 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.UserTestData;
import io.wkrzywiec.hexagonal.library.domain.BaseComponentTest;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
import io.wkrzywiec.hexagonal.library.domain.inventory.infrastructure.BookRepository;
@@ -25,15 +23,8 @@ public class MakeReservationComponentTest extends BaseComponentTest {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenBookIsAvailable_thenMakeReservation_thenBookIsReserved() {
//given
Long homoDeusBookId = jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
Long activeUserId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
Long homoDeusBookId = databaseHelper.getHomoDeusBookId();
Long activeUserId = databaseHelper.getJohnDoeUserId();
BookReservationCommand reservationCommand =
BookReservationCommand.builder()
@@ -50,11 +41,7 @@ public class MakeReservationComponentTest extends BaseComponentTest {
.prettyPeek()
.then();
Long reservationId = jdbcTemplate.queryForObject(
"SELECT id FROM reserved WHERE book_id = ?",
Long.class,
homoDeusBookId);
Long reservationId = databaseHelper.getPrimaryKeyOfReservationByBookId(homoDeusBookId);
assertTrue(reservationId > 0);
}
}

View File

@@ -53,17 +53,10 @@ public class AddNewBookComponentTest extends BaseComponentTest {
.then();
//then
Long savedBookId = jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE book_external_id = ?",
Long.class,
BookTestData.homoDeusBookGoogleId());
Long savedBookId = databaseHelper.getHomoDeusBookId();
assertTrue(savedBookId > 0);
Long availableBookId = jdbcTemplate.queryForObject(
"SELECT id FROM available WHERE book_id = ?",
Long.class,
savedBookId);
Long availableBookId = databaseHelper.getPrimaryKeyOfAvailableByBookBy(savedBookId);
assertTrue(availableBookId > 0);
}

View File

@@ -33,11 +33,7 @@ public class AddNewUserComponentTest extends BaseComponentTest {
.then();
//then
Long savedUserId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
"john.doe@test.com");
Long savedUserId = databaseHelper.getJohnDoeUserId();
assertTrue(savedUserId > 0);
}

View File

@@ -0,0 +1,45 @@
package io.wkrzywiec.hexagonal.library;
import lombok.RequiredArgsConstructor;
import org.springframework.jdbc.core.JdbcTemplate;
@RequiredArgsConstructor
public class DatabaseHelper {
private final JdbcTemplate jdbcTemplate;
public Long getHomoDeusBookId(){
return jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
}
public Long getJohnDoeUserId(){
return jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
}
public Long getPrimaryKeyOfAvailableByBookBy(Long bookId){
return jdbcTemplate.queryForObject(
"SELECT book_id FROM available WHERE book_id = ?",
Long.class,
bookId);
}
public Long getPrimaryKeyOfReservationByBookId(Long bookId){
return jdbcTemplate.queryForObject(
"SELECT id FROM reserved WHERE book_id = ?",
Long.class,
bookId);
}
public Long getPrimaryKeyOfBorrowedByBookId(Long bookId){
return jdbcTemplate.queryForObject(
"SELECT book_id FROM borrowed WHERE book_id = ?",
Long.class,
bookId);
}
}

View File

@@ -1,7 +1,6 @@
package io.wkrzywiec.hexagonal.library.domain.borrowing.infrastructure;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.UserTestData;
import io.wkrzywiec.hexagonal.library.DatabaseHelper;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowedBook;
@@ -10,7 +9,6 @@ import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReserva
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,12 +29,13 @@ public class BorrowingDatabaseAdapterITCase {
@Autowired
private JdbcTemplate jdbcTemplate;
private DatabaseHelper databaseHelper;
private BorrowingDatabaseAdapter database;
@BeforeEach
public void init(){
database = new BorrowingDatabaseAdapter(jdbcTemplate);
databaseHelper = new DatabaseHelper(jdbcTemplate);
}
@Test
@@ -45,17 +44,14 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldSaveAvailableBook(){
//given
Long bookId = getHomoDeusBookIdFromDb();
Long bookId = databaseHelper.getHomoDeusBookId();
//when
database.save(new AvailableBook(bookId));
//then
Long savedBookId = jdbcTemplate.queryForObject(
"SELECT book_id FROM available WHERE book_id = ?",
Long.class,
bookId);
assertEquals(bookId, savedBookId);
Long id = databaseHelper.getPrimaryKeyOfAvailableByBookBy(bookId);
assertTrue(id > 0);
}
@Test
@@ -64,7 +60,7 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldGetAvailableBook(){
//given
Long bookId = getHomoDeusBookIdFromDb();
Long bookId = databaseHelper.getHomoDeusBookId();
//when
Optional<AvailableBook> availableBookOptional = database.getAvailableBook(bookId);
@@ -80,7 +76,7 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldGetActiveUser() {
//given
Long activeUserId = getJohnDoeUserIdFromDb();
Long activeUserId = databaseHelper.getJohnDoeUserId();
//when
Optional<ActiveUser> activeUserOptional = database.getActiveUser(activeUserId);
@@ -96,9 +92,8 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldSaveReservedBook(){
//given
Long bookId = getHomoDeusBookIdFromDb();
Long activeUserId = getJohnDoeUserIdFromDb();
Long bookId = databaseHelper.getHomoDeusBookId();
Long activeUserId = databaseHelper.getJohnDoeUserId();
ReservedBook reservedBook = new ReservedBook(bookId, activeUserId);
@@ -117,7 +112,7 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldFindReservedBook(){
//given
Long bookId = getHomoDeusBookIdFromDb();
Long bookId = databaseHelper.getHomoDeusBookId();
//when
Optional<ReservedBook> reservedBook = database.getReservedBook(bookId);
@@ -133,8 +128,8 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldSaveBorrowedBook(){
//given
Long bookId = getHomoDeusBookIdFromDb();
Long activeUserId = getJohnDoeUserIdFromDb();
Long bookId = databaseHelper.getHomoDeusBookId();
Long activeUserId = databaseHelper.getJohnDoeUserId();
BorrowedBook borrowedBook = new BorrowedBook(bookId, activeUserId);
@@ -142,10 +137,7 @@ public class BorrowingDatabaseAdapterITCase {
database.save(borrowedBook);
//then
Long savedBookId = jdbcTemplate.queryForObject(
"SELECT book_id FROM borrowed WHERE book_id = ?",
Long.class,
bookId);
Long savedBookId = databaseHelper.getPrimaryKeyOfBorrowedByBookId(bookId);
assertEquals(bookId, savedBookId);
}
@@ -156,8 +148,8 @@ public class BorrowingDatabaseAdapterITCase {
public void shouldFindOverdueReservations(){
//given
DueDate thirdDayAfterReservation = new DueDate(Instant.now().plus(3, ChronoUnit.DAYS));
Long overdueBookId = getHomoDeusBookIdFromDb();
Long johnDoeUserId = getJohnDoeUserIdFromDb();
Long overdueBookId = databaseHelper.getHomoDeusBookId();
Long johnDoeUserId = databaseHelper.getJohnDoeUserId();
jdbcTemplate.update(
"INSERT INTO public.reserved (book_id, user_id, reserved_date) VALUES (?, ?, ?)",
overdueBookId,
@@ -177,7 +169,7 @@ public class BorrowingDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void shouldFindBorrowedBook(){
//given
Long bookId = getHomoDeusBookIdFromDb();
Long bookId = databaseHelper.getHomoDeusBookId();
//when
Optional<BorrowedBook> borrowedBook = database.getBorrowedBook(bookId);
@@ -186,18 +178,4 @@ public class BorrowingDatabaseAdapterITCase {
assertTrue(borrowedBook.isPresent());
assertEquals(bookId, borrowedBook.get().getIdAsLong());
}
private Long getHomoDeusBookIdFromDb(){
return jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
}
private Long getJohnDoeUserIdFromDb(){
return jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
}
}

View File

@@ -1,6 +1,7 @@
package io.wkrzywiec.hexagonal.library.domain.email.infrastructure;
import io.wkrzywiec.hexagonal.library.BookTestData;
import io.wkrzywiec.hexagonal.library.DatabaseHelper;
import io.wkrzywiec.hexagonal.library.UserTestData;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
@@ -20,12 +21,13 @@ public class EmailDatabaseAdapterITCase {
@Autowired
private JdbcTemplate jdbcTemplate;
private DatabaseHelper databaseHelper;
private EmailDatabaseAdapter emailDatabase;
@BeforeEach
public void init(){
emailDatabase = new EmailDatabaseAdapter(jdbcTemplate);
databaseHelper = new DatabaseHelper(jdbcTemplate);
}
@Test
@@ -34,10 +36,7 @@ public class EmailDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenBookId_whenGetBookTitle_thenGetBookTitle() {
//given
Long bookId = jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
Long bookId = databaseHelper.getHomoDeusBookId();
//when
Optional<String> bookTitle = emailDatabase.getTitleByBookId(bookId);
@@ -52,10 +51,7 @@ public class EmailDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenWrongBookId_whenGetBookTitle_thenGetEmptyResult() {
//given
Long bookId = jdbcTemplate.queryForObject(
"SELECT id FROM book WHERE title = ?",
Long.class,
BookTestData.homoDeusBookTitle());
Long bookId = databaseHelper.getHomoDeusBookId();
//when
Optional<String> bookTitle = emailDatabase.getTitleByBookId(bookId + 1124);
@@ -70,10 +66,7 @@ public class EmailDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenUserId_whenGetEmail_thenGetEmailAddress() {
//given
Long userId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
Long userId = databaseHelper.getJohnDoeUserId();
//when
Optional<String> emailAddress = emailDatabase.getUserEmailAddress(userId);
@@ -88,10 +81,7 @@ public class EmailDatabaseAdapterITCase {
@Sql(scripts = "/clean-database.sql", executionPhase = AFTER_TEST_METHOD)
public void givenWrongUserId_whenGetEmail_thenGetEmptyResult() {
//given
Long userId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
Long userId = databaseHelper.getJohnDoeUserId();
//when
Optional<String> emailAddress = emailDatabase.getUserEmailAddress(userId + 1124);

View File

@@ -1,5 +1,6 @@
package io.wkrzywiec.hexagonal.library.domain.user.infrastructure;
import io.wkrzywiec.hexagonal.library.DatabaseHelper;
import io.wkrzywiec.hexagonal.library.UserTestData;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.EmailAddress;
import io.wkrzywiec.hexagonal.library.domain.user.core.model.User;
@@ -20,6 +21,7 @@ public class UserDatabaseAdapterITCase {
@Autowired
private JdbcTemplate jdbcTemplate;
private DatabaseHelper databaseHelper;
@Autowired
private UserRepository userRepository;
@@ -29,6 +31,7 @@ public class UserDatabaseAdapterITCase {
@BeforeEach
public void init(){
userDatabase = new UserDatabaseAdapter(userRepository);
databaseHelper = new DatabaseHelper(jdbcTemplate);
}
@Test
@@ -45,10 +48,7 @@ public class UserDatabaseAdapterITCase {
UserIdentifier userIdentifier = userDatabase.save(user);
//then
Long savedUserId = jdbcTemplate.queryForObject(
"SELECT id FROM user WHERE email = ?",
Long.class,
UserTestData.johnDoeEmail());
Long savedUserId = databaseHelper.getJohnDoeUserId();
assertEquals(userIdentifier.getAsLong(), savedUserId);
}