fix(journey): reorder() throws 404 when Geschichte does not exist
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,7 @@ import org.raddatz.familienarchiv.document.DocumentService;
|
|||||||
import org.raddatz.familienarchiv.exception.DomainException;
|
import org.raddatz.familienarchiv.exception.DomainException;
|
||||||
import org.raddatz.familienarchiv.exception.ErrorCode;
|
import org.raddatz.familienarchiv.exception.ErrorCode;
|
||||||
import org.raddatz.familienarchiv.geschichte.Geschichte;
|
import org.raddatz.familienarchiv.geschichte.Geschichte;
|
||||||
|
import org.raddatz.familienarchiv.geschichte.GeschichteQueryService;
|
||||||
import org.raddatz.familienarchiv.geschichte.GeschichteRepository;
|
import org.raddatz.familienarchiv.geschichte.GeschichteRepository;
|
||||||
import org.raddatz.familienarchiv.geschichte.GeschichteType;
|
import org.raddatz.familienarchiv.geschichte.GeschichteType;
|
||||||
import org.raddatz.familienarchiv.geschichte.DocumentSummary;
|
import org.raddatz.familienarchiv.geschichte.DocumentSummary;
|
||||||
@@ -34,6 +35,7 @@ public class JourneyItemService {
|
|||||||
|
|
||||||
private final JourneyItemRepository journeyItemRepository;
|
private final JourneyItemRepository journeyItemRepository;
|
||||||
private final GeschichteRepository geschichteRepository;
|
private final GeschichteRepository geschichteRepository;
|
||||||
|
private final GeschichteQueryService geschichteQueryService;
|
||||||
private final DocumentService documentService;
|
private final DocumentService documentService;
|
||||||
private final AuditService auditService;
|
private final AuditService auditService;
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
@@ -135,6 +137,10 @@ public class JourneyItemService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<JourneyItemView> reorder(UUID geschichteId, JourneyReorderDTO dto) {
|
public List<JourneyItemView> reorder(UUID geschichteId, JourneyReorderDTO dto) {
|
||||||
|
if (!geschichteQueryService.existsById(geschichteId)) {
|
||||||
|
throw DomainException.notFound(ErrorCode.GESCHICHTE_NOT_FOUND,
|
||||||
|
"Journey not found: " + geschichteId);
|
||||||
|
}
|
||||||
Set<UUID> existingIds = journeyItemRepository.findIdsByGeschichteId(geschichteId);
|
Set<UUID> existingIds = journeyItemRepository.findIdsByGeschichteId(geschichteId);
|
||||||
List<UUID> requestedIds = dto.getItemIds() != null ? dto.getItemIds() : List.of();
|
List<UUID> requestedIds = dto.getItemIds() != null ? dto.getItemIds() : List.of();
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import org.raddatz.familienarchiv.document.DocumentStatus;
|
|||||||
import org.raddatz.familienarchiv.exception.DomainException;
|
import org.raddatz.familienarchiv.exception.DomainException;
|
||||||
import org.raddatz.familienarchiv.exception.ErrorCode;
|
import org.raddatz.familienarchiv.exception.ErrorCode;
|
||||||
import org.raddatz.familienarchiv.geschichte.Geschichte;
|
import org.raddatz.familienarchiv.geschichte.Geschichte;
|
||||||
|
import org.raddatz.familienarchiv.geschichte.GeschichteQueryService;
|
||||||
import org.raddatz.familienarchiv.geschichte.GeschichteRepository;
|
import org.raddatz.familienarchiv.geschichte.GeschichteRepository;
|
||||||
import org.raddatz.familienarchiv.geschichte.GeschichteStatus;
|
import org.raddatz.familienarchiv.geschichte.GeschichteStatus;
|
||||||
import org.raddatz.familienarchiv.geschichte.GeschichteType;
|
import org.raddatz.familienarchiv.geschichte.GeschichteType;
|
||||||
@@ -48,6 +49,7 @@ class JourneyItemServiceTest {
|
|||||||
|
|
||||||
@Mock JourneyItemRepository journeyItemRepository;
|
@Mock JourneyItemRepository journeyItemRepository;
|
||||||
@Mock GeschichteRepository geschichteRepository;
|
@Mock GeschichteRepository geschichteRepository;
|
||||||
|
@Mock GeschichteQueryService geschichteQueryService;
|
||||||
@Mock DocumentService documentService;
|
@Mock DocumentService documentService;
|
||||||
@Mock AuditService auditService;
|
@Mock AuditService auditService;
|
||||||
@Mock UserService userService;
|
@Mock UserService userService;
|
||||||
@@ -63,6 +65,7 @@ class JourneyItemServiceTest {
|
|||||||
void setupAuth() {
|
void setupAuth() {
|
||||||
AppUser actor = AppUser.builder().id(actorId).email("test@test.de").build();
|
AppUser actor = AppUser.builder().id(actorId).email("test@test.de").build();
|
||||||
lenient().when(userService.findByEmail("test@test.de")).thenReturn(actor);
|
lenient().when(userService.findByEmail("test@test.de")).thenReturn(actor);
|
||||||
|
lenient().when(geschichteQueryService.existsById(geschichteId)).thenReturn(true);
|
||||||
SecurityContextHolder.getContext().setAuthentication(
|
SecurityContextHolder.getContext().setAuthentication(
|
||||||
new UsernamePasswordAuthenticationToken("test@test.de", null,
|
new UsernamePasswordAuthenticationToken("test@test.de", null,
|
||||||
List.of(new SimpleGrantedAuthority("BLOG_WRITE"))));
|
List.of(new SimpleGrantedAuthority("BLOG_WRITE"))));
|
||||||
@@ -448,6 +451,20 @@ class JourneyItemServiceTest {
|
|||||||
|
|
||||||
// ─── reorder ─────────────────────────────────────────────────────────────
|
// ─── reorder ─────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void reorder_unknownGeschichteId_throws404() {
|
||||||
|
UUID unknownId = UUID.randomUUID();
|
||||||
|
// geschichteQueryService is not lenient-stubbed for unknownId → returns false
|
||||||
|
|
||||||
|
JourneyReorderDTO dto = new JourneyReorderDTO();
|
||||||
|
dto.setItemIds(List.of());
|
||||||
|
|
||||||
|
assertThatThrownBy(() -> journeyItemService.reorder(unknownId, dto))
|
||||||
|
.isInstanceOf(DomainException.class)
|
||||||
|
.satisfies(e -> assertThat(((DomainException) e).getCode())
|
||||||
|
.isEqualTo(ErrorCode.GESCHICHTE_NOT_FOUND));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void reorder_returns400_when_itemIds_contain_duplicates() {
|
void reorder_returns400_when_itemIds_contain_duplicates() {
|
||||||
UUID id1 = UUID.randomUUID();
|
UUID id1 = UUID.randomUUID();
|
||||||
|
|||||||
Reference in New Issue
Block a user