mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 11:59:35 +01:00
refactor(inventory): UnitOfWork-Pattern + JdbcClient-Migration
Letzter BC migriert: JPA/Hibernate durch JdbcClient ersetzt, @Transactional durch UnitOfWork-Pattern in allen schreibenden Use Cases. - 3 neue Jdbc-Repos: JdbcStorageLocationRepository, JdbcStockMovementRepository, JdbcStockRepository (4-Tabellen-Aggregat mit Batches, Reservations, Allocations) - 20 Use Cases angepasst (UoW für schreibende, @Transactional entfernt für lesende) - 15 alte JPA-Dateien gelöscht (6 Entities, 3 Mapper, 3 Adapter, 3 Spring Data Repos) - 9 Unit-Tests mit UoW-Mock-Pattern aktualisiert
This commit is contained in:
parent
c89ee359d1
commit
d4ac8cb1b9
48 changed files with 1024 additions and 1388 deletions
|
|
@ -6,6 +6,7 @@ import de.effigenix.shared.common.Quantity;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -28,6 +29,7 @@ import static org.mockito.Mockito.*;
|
|||
class AddStockBatchTest {
|
||||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private AddStockBatch addStockBatch;
|
||||
private AddStockBatchCommand validCommand;
|
||||
|
|
@ -35,7 +37,8 @@ class AddStockBatchTest {
|
|||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
addStockBatch = new AddStockBatch(stockRepository);
|
||||
addStockBatch = new AddStockBatch(stockRepository, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
existingStock = Stock.reconstitute(
|
||||
StockId.of("stock-1"),
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import de.effigenix.shared.common.Quantity;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import de.effigenix.shared.security.ActorId;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
|
|
@ -32,6 +33,7 @@ class BlockStockBatchTest {
|
|||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private AuditLogger auditLogger;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private BlockStockBatch blockStockBatch;
|
||||
private StockBatchId batchId;
|
||||
|
|
@ -41,7 +43,8 @@ class BlockStockBatchTest {
|
|||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
blockStockBatch = new BlockStockBatch(stockRepository, auditLogger);
|
||||
blockStockBatch = new BlockStockBatch(stockRepository, auditLogger, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
batchId = StockBatchId.of("batch-1");
|
||||
var batch = StockBatch.reconstitute(
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import de.effigenix.domain.inventory.*;
|
|||
import de.effigenix.domain.masterdata.ArticleId;
|
||||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import de.effigenix.shared.security.ActorId;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
|
|
@ -17,9 +18,8 @@ import java.util.Optional;
|
|||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
@DisplayName("DeactivateStorageLocation Use Case")
|
||||
|
|
@ -27,13 +27,15 @@ class DeactivateStorageLocationTest {
|
|||
|
||||
@Mock private StorageLocationRepository storageLocationRepository;
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private DeactivateStorageLocation deactivateStorageLocation;
|
||||
private ActorId performedBy;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
deactivateStorageLocation = new DeactivateStorageLocation(storageLocationRepository, stockRepository);
|
||||
deactivateStorageLocation = new DeactivateStorageLocation(storageLocationRepository, stockRepository, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
performedBy = ActorId.of("admin-user");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import de.effigenix.application.inventory.command.RecordStockMovementCommand;
|
|||
import de.effigenix.domain.inventory.*;
|
||||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import de.effigenix.shared.security.ActorId;
|
||||
import de.effigenix.shared.security.AuthorizationPort;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
|
|
@ -19,6 +20,7 @@ class RecordStockMovementTest {
|
|||
|
||||
private StockMovementRepository repository;
|
||||
private AuthorizationPort authPort;
|
||||
private UnitOfWork unitOfWork;
|
||||
private RecordStockMovement useCase;
|
||||
private final ActorId actor = ActorId.of("user-1");
|
||||
|
||||
|
|
@ -26,7 +28,9 @@ class RecordStockMovementTest {
|
|||
void setUp() {
|
||||
repository = mock(StockMovementRepository.class);
|
||||
authPort = mock(AuthorizationPort.class);
|
||||
useCase = new RecordStockMovement(repository, authPort);
|
||||
unitOfWork = mock(UnitOfWork.class);
|
||||
useCase = new RecordStockMovement(repository, authPort, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
when(authPort.can(any(ActorId.class), any())).thenReturn(true);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import de.effigenix.shared.common.Quantity;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -29,6 +30,7 @@ import static org.mockito.Mockito.*;
|
|||
class ReleaseReservationTest {
|
||||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private ReleaseReservation releaseReservation;
|
||||
private Stock existingStock;
|
||||
|
|
@ -36,7 +38,8 @@ class ReleaseReservationTest {
|
|||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
releaseReservation = new ReleaseReservation(stockRepository);
|
||||
releaseReservation = new ReleaseReservation(stockRepository, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
var batch = StockBatch.reconstitute(
|
||||
StockBatchId.generate(),
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import de.effigenix.shared.common.Quantity;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -29,6 +30,7 @@ import static org.mockito.Mockito.*;
|
|||
class RemoveStockBatchTest {
|
||||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private RemoveStockBatch removeStockBatch;
|
||||
private StockBatchId batchId;
|
||||
|
|
@ -37,7 +39,8 @@ class RemoveStockBatchTest {
|
|||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
removeStockBatch = new RemoveStockBatch(stockRepository);
|
||||
removeStockBatch = new RemoveStockBatch(stockRepository, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
batchId = StockBatchId.of("batch-1");
|
||||
var batch = StockBatch.reconstitute(
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import de.effigenix.shared.common.Quantity;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -29,6 +30,7 @@ import static org.mockito.Mockito.*;
|
|||
class ReserveStockTest {
|
||||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private ReserveStock reserveStock;
|
||||
private ReserveStockCommand validCommand;
|
||||
|
|
@ -36,7 +38,8 @@ class ReserveStockTest {
|
|||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
reserveStock = new ReserveStock(stockRepository);
|
||||
reserveStock = new ReserveStock(stockRepository, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
var batch = StockBatch.reconstitute(
|
||||
StockBatchId.generate(),
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import de.effigenix.shared.common.Quantity;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import de.effigenix.shared.security.ActorId;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
|
|
@ -32,6 +33,7 @@ class UnblockStockBatchTest {
|
|||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private AuditLogger auditLogger;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private UnblockStockBatch unblockStockBatch;
|
||||
private StockBatchId batchId;
|
||||
|
|
@ -41,7 +43,8 @@ class UnblockStockBatchTest {
|
|||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
unblockStockBatch = new UnblockStockBatch(stockRepository, auditLogger);
|
||||
unblockStockBatch = new UnblockStockBatch(stockRepository, auditLogger, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
batchId = StockBatchId.of("batch-1");
|
||||
var batch = StockBatch.reconstitute(
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import de.effigenix.domain.inventory.*;
|
|||
import de.effigenix.shared.common.RepositoryError;
|
||||
import de.effigenix.shared.common.Result;
|
||||
import de.effigenix.shared.common.UnitOfMeasure;
|
||||
import de.effigenix.shared.persistence.UnitOfWork;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
|
@ -18,19 +19,22 @@ import java.util.Optional;
|
|||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
@DisplayName("UpdateStock Use Case")
|
||||
class UpdateStockTest {
|
||||
|
||||
@Mock private StockRepository stockRepository;
|
||||
@Mock private UnitOfWork unitOfWork;
|
||||
|
||||
private UpdateStock updateStock;
|
||||
private Stock existingStock;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
updateStock = new UpdateStock(stockRepository);
|
||||
updateStock = new UpdateStock(stockRepository, unitOfWork);
|
||||
lenient().when(unitOfWork.executeAtomically(any())).thenAnswer(inv -> ((java.util.function.Supplier<?>) inv.getArgument(0)).get());
|
||||
|
||||
existingStock = Stock.reconstitute(
|
||||
StockId.of("stock-1"),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue