#1284 Divide tests

This commit is contained in:
Pavel Manannikov
2020-11-23 20:59:00 +02:00
parent 97e3a3debc
commit 9ead3adf73

View File

@ -23,6 +23,7 @@
package com.iluwatar.versionnumber; package com.iluwatar.versionnumber;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
@ -31,40 +32,54 @@ import static org.junit.jupiter.api.Assertions.*;
* Tests for {@link BookRepository} * Tests for {@link BookRepository}
*/ */
class BookRepositoryTest { class BookRepositoryTest {
@Test private final long bookId = 1;
void testBookRepository() throws BookDuplicateException, BookNotFoundException, VersionMismatchException { private final BookRepository bookRepository = new BookRepository();
final var bookId = 1;
var bookRepository = new BookRepository(); @BeforeEach
public void setUp() throws BookDuplicateException {
var book = new Book(); var book = new Book();
book.setId(bookId); book.setId(bookId);
bookRepository.add(book); bookRepository.add(book);
}
@Test
void testDefaultVersionRemainsZeroAfterAdd() throws BookNotFoundException {
var book = bookRepository.get(bookId);
assertEquals(0, book.getVersion()); assertEquals(0, book.getVersion());
}
@Test
void testAliceAndBobHaveDifferentVersionsAfterAliceUpdate() throws BookNotFoundException, VersionMismatchException {
final var aliceBook = bookRepository.get(bookId); final var aliceBook = bookRepository.get(bookId);
final var bobBook = 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"); aliceBook.setTitle("Kama Sutra");
bookRepository.update(aliceBook); bookRepository.update(aliceBook);
assertEquals(1, aliceBook.getVersion()); assertEquals(1, aliceBook.getVersion());
assertEquals(0, bobBook.getVersion()); assertEquals(0, bobBook.getVersion());
assertEquals(aliceBook.getVersion(), bookRepository.get(bookId).getVersion()); var actualBook = bookRepository.get(bookId);
assertEquals(aliceBook.getTitle(), bookRepository.get(bookId).getTitle()); assertEquals(aliceBook.getVersion(), actualBook.getVersion());
assertEquals(aliceBook.getTitle(), actualBook.getTitle());
assertNotEquals(aliceBook.getTitle(), bobBook.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"); bobBook.setAuthor("Vatsyayana Mallanaga");
try { try {
bookRepository.update(bobBook); bookRepository.update(bobBook);
} catch (VersionMismatchException e) { } catch (VersionMismatchException e) {
assertEquals(0, bobBook.getVersion()); assertEquals(0, bobBook.getVersion());
assertEquals(1, bookRepository.get(bookId).getVersion()); var actualBook = bookRepository.get(bookId);
assertEquals(aliceBook.getVersion(), bookRepository.get(bookId).getVersion()); assertEquals(1, actualBook.getVersion());
assertEquals(aliceBook.getVersion(), actualBook.getVersion());
assertEquals("", bobBook.getTitle()); assertEquals("", bobBook.getTitle());
assertNotEquals(aliceBook.getAuthor(), bobBook.getAuthor()); assertNotEquals(aliceBook.getAuthor(), bobBook.getAuthor());
} }