Skip to content

Commit

Permalink
fix: remove to-read flag when book is finished
Browse files Browse the repository at this point in the history
  • Loading branch information
bayang committed May 23, 2022
1 parent 6215202 commit c88a4fe
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,10 @@ class ReadingEventRepository {
logger.debug { "found ${userBook.readingEvents.count()} older events in CURRENTLY_READING state for book ${userBook.book.id}" }
alreadyReadingEvent.eventType = createReadingEventDto.eventType
alreadyReadingEvent.modificationDate = createReadingEventDto.eventDate ?: instant
// if we mark book as read, remove to-read flag from the userbook
if (alreadyReadingEvent.userBook.toRead == true) {
alreadyReadingEvent.userBook.toRead = null
}
return alreadyReadingEvent
}
// FIXME else : alreadyReadingEvent is not null and createReadingEventDto.eventDate is before an already existing CURRENTLY_READING EVENT
Expand All @@ -138,6 +142,9 @@ class ReadingEventRepository {
this.eventType = updateReadingEventDto.eventType
val lastEvent = this.userBook.readingEvents
.maxByOrNull { e -> e.modificationDate }
if (updateReadingEventDto.eventType == ReadingEventType.FINISHED && this.userBook.toRead == true) {
this.userBook.toRead = null
}
if (lastEvent == null) {
this.userBook.lastReadingEvent = null
this.userBook.lastReadingEventDate = null
Expand Down
4 changes: 2 additions & 2 deletions src/test/kotlin/io/github/bayang/jelu/TestHelpers.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ import io.github.bayang.jelu.dto.ImportConfigurationDto
import io.github.bayang.jelu.dto.TagDto
import java.time.Instant

fun createUserBookDto(bookDto: BookCreateDto, lastReadingEvent: ReadingEventType? = null, lastreadingEventDate: Instant? = null): CreateUserBookDto {
fun createUserBookDto(bookDto: BookCreateDto, lastReadingEvent: ReadingEventType? = null, lastreadingEventDate: Instant? = null, toRead: Boolean = false): CreateUserBookDto {
return CreateUserBookDto(
personalNotes = "test personal notes\nwith a newline",
lastReadingEvent = lastReadingEvent,
lastReadingEventDate = lastreadingEventDate,
owned = true,
toRead = false,
toRead = toRead,
percentRead = null,
book = bookDto
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,58 @@ class ReadingEventServiceTest(
Assertions.assertTrue(userbook.lastReadingEventDate?.isAfter(nowInstant().minus(2, ChronoUnit.MINUTES))!!)
}

@Test
fun testCreateFinishedEventRemovesToReadFlagAndDeleteOnlyEventMakesNullLastEventOnUserbook() {
val createBook = bookDto()
val createUserBookDto = createUserBookDto(createBook, ReadingEventType.CURRENTLY_READING, nowInstant(), true)
val saved: UserBookLightDto = bookService.save(createUserBookDto, user(), null)
Assertions.assertEquals(createBook.title, saved.book.title)
Assertions.assertEquals(createBook.isbn10, saved.book.isbn10)
Assertions.assertEquals(createBook.isbn13?.trim(), saved.book.isbn13)
Assertions.assertEquals("This is a test summary with a newline", saved.book.summary)
Assertions.assertEquals(createBook.publisher, saved.book.publisher)
Assertions.assertEquals(createBook.pageCount, saved.book.pageCount)
Assertions.assertEquals(createBook.goodreadsId, saved.book.goodreadsId)
Assertions.assertNull(saved.book.librarythingId)
Assertions.assertEquals(createUserBookDto.owned, saved.owned)
Assertions.assertEquals(createUserBookDto.toRead, saved.toRead)
Assertions.assertEquals(createUserBookDto.personalNotes, saved.personalNotes)
Assertions.assertNull(saved.percentRead)
Assertions.assertNotNull(saved.creationDate)
Assertions.assertNotNull(saved.modificationDate)
Assertions.assertNotNull(saved.book.creationDate)
Assertions.assertNotNull(saved.book.modificationDate)
Assertions.assertEquals(ReadingEventType.CURRENTLY_READING, saved.lastReadingEvent)
Assertions.assertNotNull(saved.lastReadingEventDate)
Assertions.assertEquals(1, readingEventService.findAll(null, null, null, Pageable.ofSize(30)).totalElements)
Assertions.assertEquals(0, File(jeluProperties.files.images).listFiles().size)

val thirtyDaysAfter = nowInstant().plus(30, ChronoUnit.DAYS)
val newEvent = readingEventService.save(
CreateReadingEventDto(
ReadingEventType.FINISHED,
saved.book.id,
thirtyDaysAfter
),
user()
)
Assertions.assertEquals(ReadingEventType.FINISHED, newEvent.eventType)

var userbook = bookService.findUserBookById(saved.id!!)
Assertions.assertEquals(ReadingEventType.FINISHED, userbook.lastReadingEvent)
Assertions.assertTrue(userbook.lastReadingEventDate?.isAfter(nowInstant().plus(29, ChronoUnit.DAYS))!!)
Assertions.assertNull(userbook.toRead)

Assertions.assertEquals(1, readingEventService.findAll(null, null, null, Pageable.ofSize(30)).totalElements)
Assertions.assertEquals(0, File(jeluProperties.files.images).listFiles().size)

readingEventService.deleteReadingEventById(newEvent.id!!)
Assertions.assertEquals(0, readingEventService.findAll(null, null, null, Pageable.ofSize(30)).totalElements)
userbook = bookService.findUserBookById(saved.id!!)
Assertions.assertNull(userbook.lastReadingEvent)
Assertions.assertNull(userbook.lastReadingEventDate)
}

@Test
fun newEventWithoutExistingUserbookShouldCreateUserbook() {
val user = user()
Expand Down Expand Up @@ -344,7 +396,7 @@ class ReadingEventServiceTest(
@Test
fun testUpdateEvent() {
val createBook = bookDto()
val createUserBookDto = createUserBookDto(createBook, ReadingEventType.FINISHED, nowInstant())
val createUserBookDto = createUserBookDto(createBook, ReadingEventType.FINISHED, nowInstant(), true)
val saved: UserBookLightDto = bookService.save(createUserBookDto, user(), null)
Assertions.assertEquals(createBook.title, saved.book.title)
Assertions.assertEquals(createBook.isbn10, saved.book.isbn10)
Expand Down Expand Up @@ -397,6 +449,7 @@ class ReadingEventServiceTest(
Assertions.assertTrue(updated.modificationDate?.isAfter(nowInstant().plus(39, ChronoUnit.DAYS))!!)
userbook = bookService.findUserBookById(saved.id!!)
Assertions.assertEquals(ReadingEventType.FINISHED, userbook.lastReadingEvent)
Assertions.assertNull(userbook.toRead)
Assertions.assertTrue(userbook.lastReadingEventDate?.isAfter(nowInstant().plus(39, ChronoUnit.DAYS))!!)
}

Expand Down

0 comments on commit c88a4fe

Please sign in to comment.