diff --git a/version-number/src/test/java/com/iluwatar/versionnumber/BookRepositoryTest.java b/version-number/src/test/java/com/iluwatar/versionnumber/BookRepositoryTest.java index 325dea87b..6b7b2b39a 100644 --- a/version-number/src/test/java/com/iluwatar/versionnumber/BookRepositoryTest.java +++ b/version-number/src/test/java/com/iluwatar/versionnumber/BookRepositoryTest.java @@ -23,6 +23,7 @@ package com.iluwatar.versionnumber; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -31,40 +32,54 @@ import static org.junit.jupiter.api.Assertions.*; * Tests for {@link BookRepository} */ class BookRepositoryTest { - @Test - void testBookRepository() throws BookDuplicateException, BookNotFoundException, VersionMismatchException { - final var bookId = 1; + private final long bookId = 1; + private final BookRepository bookRepository = new BookRepository(); - var bookRepository = new BookRepository(); + @BeforeEach + public void setUp() throws BookDuplicateException { var book = new Book(); book.setId(bookId); bookRepository.add(book); + } + @Test + void testDefaultVersionRemainsZeroAfterAdd() throws BookNotFoundException { + var book = bookRepository.get(bookId); assertEquals(0, book.getVersion()); + } + @Test + void testAliceAndBobHaveDifferentVersionsAfterAliceUpdate() throws BookNotFoundException, VersionMismatchException { final var aliceBook = bookRepository.get(bookId); final var bobBook = bookRepository.get(bookId); - assertEquals(aliceBook.getTitle(), bobBook.getTitle()); - assertEquals(aliceBook.getAuthor(), bobBook.getAuthor()); - assertEquals(aliceBook.getVersion(), bobBook.getVersion()); - aliceBook.setTitle("Kama Sutra"); bookRepository.update(aliceBook); assertEquals(1, aliceBook.getVersion()); assertEquals(0, bobBook.getVersion()); - assertEquals(aliceBook.getVersion(), bookRepository.get(bookId).getVersion()); - assertEquals(aliceBook.getTitle(), bookRepository.get(bookId).getTitle()); + var actualBook = bookRepository.get(bookId); + assertEquals(aliceBook.getVersion(), actualBook.getVersion()); + assertEquals(aliceBook.getTitle(), actualBook.getTitle()); assertNotEquals(aliceBook.getTitle(), bobBook.getTitle()); + } + + @Test + void testShouldThrowVersionMismatchExceptionOnStaleUpdate() throws BookNotFoundException, VersionMismatchException { + final var aliceBook = bookRepository.get(bookId); + final var bobBook = bookRepository.get(bookId); + + aliceBook.setTitle("Kama Sutra"); + bookRepository.update(aliceBook); bobBook.setAuthor("Vatsyayana Mallanaga"); try { bookRepository.update(bobBook); } catch (VersionMismatchException e) { assertEquals(0, bobBook.getVersion()); - assertEquals(1, bookRepository.get(bookId).getVersion()); - assertEquals(aliceBook.getVersion(), bookRepository.get(bookId).getVersion()); + var actualBook = bookRepository.get(bookId); + assertEquals(1, actualBook.getVersion()); + assertEquals(aliceBook.getVersion(), actualBook.getVersion()); assertEquals("", bobBook.getTitle()); assertNotEquals(aliceBook.getAuthor(), bobBook.getAuthor()); }