move stubed services to a tests class
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.borrowing;
|
||||
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
|
||||
|
||||
public class BorrowingEventPublisherFake implements BorrowingEventPublisher {
|
||||
|
||||
@Override
|
||||
public void publish(BookReservedEvent event) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -4,14 +4,19 @@ import io.wkrzywiec.hexagonal.library.domain.borrowing.core.BorrowingFacade;
|
||||
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.BookReservationCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowBookCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowedBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.GiveBackBookCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationId;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.ActiveUserNotFoundException;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.AvailableBookNotFoundExeption;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.TooManyBooksAssignedToUserException;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
|
||||
import org.apache.commons.lang3.reflect.FieldUtils;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -23,6 +28,10 @@ import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
@@ -214,3 +223,80 @@ public class BorrowingFacadeTest {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class InMemoryBorrowingDatabase implements BorrowingDatabase {
|
||||
|
||||
ConcurrentHashMap<Long, ActiveUser> activeUsers = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, AvailableBook> availableBooks = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, ReservedBook> reservedBooks = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, BorrowedBook> borrowedBooks = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void save(AvailableBook availableBook) {
|
||||
availableBooks.put(availableBook.getIdAsLong(), availableBook);
|
||||
reservedBooks.remove(availableBook.getIdAsLong());
|
||||
borrowedBooks.remove(availableBook.getIdAsLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<AvailableBook> getAvailableBook(Long bookId) {
|
||||
if (availableBooks.containsKey(bookId)) {
|
||||
return Optional.of(availableBooks.get(bookId));
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ActiveUser> getActiveUser(Long userId) {
|
||||
if (activeUsers.containsKey(userId)) {
|
||||
return Optional.of(activeUsers.get(userId));
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReservationDetails save(ReservedBook reservedBook) {
|
||||
Long reservationId = new Random().nextLong();
|
||||
availableBooks.remove(reservedBook.getIdAsLong());
|
||||
reservedBooks.put(reservationId, reservedBook);
|
||||
return new ReservationDetails(new ReservationId(reservationId), reservedBook);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(BorrowedBook borrowedBook) {
|
||||
reservedBooks.remove(borrowedBook.getIdAsLong());
|
||||
borrowedBooks.put(borrowedBook.getIdAsLong(), borrowedBook);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OverdueReservation> findReservationsForMoreThan(Long days) {
|
||||
return reservedBooks.values().stream()
|
||||
.filter(reservedBook ->
|
||||
Instant.now().isAfter(
|
||||
reservedBook.getReservedDateAsInstant().plus(days, ChronoUnit.DAYS)))
|
||||
.map(reservedBook ->
|
||||
new OverdueReservation(
|
||||
1L,
|
||||
reservedBook.getIdAsLong()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ReservedBook> getReservedBook(Long bookId) {
|
||||
return Optional.of(reservedBooks.get(bookId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<BorrowedBook> getBorrowedBook(Long bookId) {
|
||||
return Optional.of(borrowedBooks.get(bookId));
|
||||
}
|
||||
}
|
||||
|
||||
class BorrowingEventPublisherFake implements BorrowingEventPublisher {
|
||||
|
||||
@Override
|
||||
public void publish(BookReservedEvent event) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,89 +0,0 @@
|
||||
package io.wkrzywiec.hexagonal.library.domain.borrowing;
|
||||
|
||||
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;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.DueDate;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationId;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
|
||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class InMemoryBorrowingDatabase implements BorrowingDatabase {
|
||||
|
||||
ConcurrentHashMap<Long, ActiveUser> activeUsers = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, AvailableBook> availableBooks = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, ReservedBook> reservedBooks = new ConcurrentHashMap<>();
|
||||
ConcurrentHashMap<Long, BorrowedBook> borrowedBooks = new ConcurrentHashMap<>();
|
||||
|
||||
@Override
|
||||
public void save(AvailableBook availableBook) {
|
||||
availableBooks.put(availableBook.getIdAsLong(), availableBook);
|
||||
reservedBooks.remove(availableBook.getIdAsLong());
|
||||
borrowedBooks.remove(availableBook.getIdAsLong());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<AvailableBook> getAvailableBook(Long bookId) {
|
||||
if (availableBooks.containsKey(bookId)) {
|
||||
return Optional.of(availableBooks.get(bookId));
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ActiveUser> getActiveUser(Long userId) {
|
||||
if (activeUsers.containsKey(userId)) {
|
||||
return Optional.of(activeUsers.get(userId));
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReservationDetails save(ReservedBook reservedBook) {
|
||||
Long reservationId = new Random().nextLong();
|
||||
availableBooks.remove(reservedBook.getIdAsLong());
|
||||
reservedBooks.put(reservationId, reservedBook);
|
||||
return new ReservationDetails(new ReservationId(reservationId), reservedBook);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(BorrowedBook borrowedBook) {
|
||||
reservedBooks.remove(borrowedBook.getIdAsLong());
|
||||
borrowedBooks.put(borrowedBook.getIdAsLong(), borrowedBook);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OverdueReservation> findReservationsForMoreThan(Long days) {
|
||||
return reservedBooks.values().stream()
|
||||
.filter(reservedBook ->
|
||||
Instant.now().isAfter(
|
||||
reservedBook.getReservedDateAsInstant().plus(days, ChronoUnit.DAYS)))
|
||||
.map(reservedBook ->
|
||||
new OverdueReservation(
|
||||
1L,
|
||||
reservedBook.getIdAsLong()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ReservedBook> getReservedBook(Long bookId) {
|
||||
return Optional.of(reservedBooks.get(bookId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<BorrowedBook> getBorrowedBook(Long bookId) {
|
||||
return Optional.of(borrowedBooks.get(bookId));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user