Skip to content

Commit 331d8b8

Browse files
committed
Fixed null pages causing page reordering to fail [#2482]
1 parent 11e576c commit 331d8b8

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

comixed-services/src/main/java/org/comixedproject/service/comicbooks/ComicBookService.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -563,14 +563,16 @@ public void savePageOrder(final long comicId, final List<PageOrderEntry> entryLi
563563
log.trace("Applying order");
564564
for (int index = 0; index < comicBook.getPages().size(); index++) {
565565
final ComicPage page = comicBook.getPages().get(index);
566-
final Optional<PageOrderEntry> position =
567-
entryList.stream()
568-
.filter(pageOrderEntry -> pageOrderEntry.getFilename().equals(page.getFilename()))
569-
.findFirst();
570-
if (position.isEmpty())
571-
throw new ComicBookException("No such order entry: filename=" + page.getFilename());
572-
log.trace("Applying position");
573-
page.setPageNumber(position.get().getPosition());
566+
if (Objects.nonNull(page)) {
567+
final Optional<PageOrderEntry> position =
568+
entryList.stream()
569+
.filter(pageOrderEntry -> pageOrderEntry.getFilename().equals(page.getFilename()))
570+
.findFirst();
571+
if (position.isEmpty())
572+
throw new ComicBookException("No such order entry: filename=" + page.getFilename());
573+
log.trace("Applying position");
574+
page.setPageNumber(position.get().getPosition());
575+
}
574576
}
575577

576578
log.trace("Firing event: details updated");

comixed-services/src/test/java/org/comixedproject/service/comicbooks/ComicBookServiceTest.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -820,16 +820,26 @@ void savePageOrder_invalidId() {
820820
}
821821

822822
@Test
823-
void savePageOrder_containsGap() {
823+
void savePageOrder_containsGap() throws ComicBookException {
824824
List<PageOrderEntry> entryList = new ArrayList<>();
825+
List<ComicPage> pageList = new ArrayList<>();
825826
for (int index = 0; index < 25; index++) {
826-
entryList.add(new PageOrderEntry(String.format("filename-%d", index), index + 1));
827+
entryList.add(new PageOrderEntry(String.format("filename-%d", index), index));
828+
if (index % 2 == 0) {
829+
final String filename = String.format("filename-%d", index);
830+
final ComicPage page = new ComicPage();
831+
page.setFilename(filename);
832+
pageList.add(page);
833+
}
827834
}
828835

829836
Mockito.when(comicBookRepository.getById(Mockito.anyLong())).thenReturn(comicBook);
837+
Mockito.when(comicBook.getPages()).thenReturn(pageList);
830838

831-
assertThrows(
832-
ComicBookException.class, () -> service.savePageOrder(TEST_COMIC_BOOK_ID, entryList));
839+
service.savePageOrder(TEST_COMIC_BOOK_ID, entryList);
840+
841+
Mockito.verify(comicStateHandler, Mockito.times(1))
842+
.fireEvent(comicBook, ComicEvent.detailsUpdated);
833843
}
834844

835845
@Test

0 commit comments

Comments
 (0)