diff --git a/src/main/java/com/twu/biblioteca/App.java b/src/main/java/com/twu/biblioteca/App.java index 09d0bf0..fa8da61 100644 --- a/src/main/java/com/twu/biblioteca/App.java +++ b/src/main/java/com/twu/biblioteca/App.java @@ -2,17 +2,20 @@ import com.twu.biblioteca.books.application.BookShelvesInteractor; import com.twu.biblioteca.books.infrastructure.AbstractBookPresenter; +import com.twu.biblioteca.books.infrastructure.BookInputController; import com.twu.biblioteca.books.infrastructure.BookPresenter; public class App { public static void main(String[] args) { - OptionPresenter optionPresenter = new OptionPresenter(System.out); - optionPresenter.sayWelcome(); - optionPresenter.showMenu(); - MenuInputController user = new MenuInputController(System.in); + AppPresenter appPresenter = new AppPresenter(System.out); + appPresenter.sayWelcome(); + appPresenter.showMenu(); + AppInputController user = new AppInputController(System.in); + BookShelvesInteractor bookShelves = new BookShelvesInteractor(); bookShelves.preloadBooks(); + BookInputController bookInputController = new BookInputController(System.in); AbstractBookPresenter bookPresenter = new BookPresenter(bookShelves, System.out); while (!user.wantsToExit()) { switch (user.getSelectedOption()) { @@ -20,21 +23,21 @@ public static void main(String[] args) { bookPresenter.listBooks(); break; case 2: - optionPresenter.askForCheckOut(); - String bookTitle = user.readBookTitle(); + appPresenter.askForBookCheckOut(); + String bookTitle = bookInputController.readBookTitle(); bookPresenter.checkOut(bookTitle); break; case 3: - optionPresenter.askForReturn(); - bookTitle = user.readBookTitle(); + appPresenter.askForBookReturn(); + bookTitle = bookInputController.readBookTitle(); bookPresenter.returnBook(bookTitle); break; default: - optionPresenter.sayInvalidOption(); + appPresenter.sayInvalidOption(); } - optionPresenter.showMenu(); + appPresenter.showMenu(); } - System.out.println("Thanks for using our system"); + appPresenter.sayFarewell(); } } diff --git a/src/main/java/com/twu/biblioteca/MenuInputController.java b/src/main/java/com/twu/biblioteca/AppInputController.java similarity index 77% rename from src/main/java/com/twu/biblioteca/MenuInputController.java rename to src/main/java/com/twu/biblioteca/AppInputController.java index e6ababd..9e6155c 100644 --- a/src/main/java/com/twu/biblioteca/MenuInputController.java +++ b/src/main/java/com/twu/biblioteca/AppInputController.java @@ -3,11 +3,11 @@ import java.io.InputStream; import java.util.Scanner; -class MenuInputController { +class AppInputController { private final Scanner scanner; private Integer selectedOption; - MenuInputController(InputStream inputScanner) { + AppInputController(InputStream inputScanner) { this.scanner = new Scanner(inputScanner); } @@ -23,7 +23,4 @@ Integer getSelectedOption() { return this.selectedOption; } - String readBookTitle() { - return scanner.nextLine(); - } } diff --git a/src/main/java/com/twu/biblioteca/OptionPresenter.java b/src/main/java/com/twu/biblioteca/AppPresenter.java similarity index 80% rename from src/main/java/com/twu/biblioteca/OptionPresenter.java rename to src/main/java/com/twu/biblioteca/AppPresenter.java index 7ec62ec..998ecc1 100644 --- a/src/main/java/com/twu/biblioteca/OptionPresenter.java +++ b/src/main/java/com/twu/biblioteca/AppPresenter.java @@ -2,17 +2,20 @@ import java.io.PrintStream; -class OptionPresenter { +class AppPresenter { private static final String WELCOME_MESSAGE = "Welcome to the Bangalore Public Library system"; private static final String FANCY_LINE = "----------------------------------------------"; - private static final String END_OF_LINE = "\n"; private final PrintStream output; - OptionPresenter(PrintStream output) { + AppPresenter(PrintStream output) { this.output = output; } + void sayFarewell() { + output.println("Thanks for using our system"); + } + void sayWelcome() { output.println(FANCY_LINE); output.println(WELCOME_MESSAGE); @@ -27,16 +30,16 @@ void showMenu() { output.println("\t0. Exit"); } - void askForCheckOut() { + void askForBookCheckOut() { output.println("What book do you want to checkout?"); } - void askForReturn() { + void askForBookReturn() { output.println("What book do you want to return?"); } void sayInvalidOption() { output.println("Select a valid option!"); - System.out.println(); + output.println(); } } diff --git a/src/main/java/com/twu/biblioteca/books/infrastructure/BookInputController.java b/src/main/java/com/twu/biblioteca/books/infrastructure/BookInputController.java new file mode 100644 index 0000000..c1c51ea --- /dev/null +++ b/src/main/java/com/twu/biblioteca/books/infrastructure/BookInputController.java @@ -0,0 +1,16 @@ +package com.twu.biblioteca.books.infrastructure; + +import java.io.InputStream; +import java.util.Scanner; + +public class BookInputController { + private final Scanner scanner; + + public BookInputController(InputStream inputStream) { + this.scanner = new Scanner(inputStream); + } + + public String readBookTitle() { + return scanner.nextLine(); + } +} diff --git a/src/test/java/com/twu/biblioteca/MenuInputControllerShould.java b/src/test/java/com/twu/biblioteca/AppInputControllerShould.java similarity index 76% rename from src/test/java/com/twu/biblioteca/MenuInputControllerShould.java rename to src/test/java/com/twu/biblioteca/AppInputControllerShould.java index 007cc01..8194007 100644 --- a/src/test/java/com/twu/biblioteca/MenuInputControllerShould.java +++ b/src/test/java/com/twu/biblioteca/AppInputControllerShould.java @@ -8,9 +8,9 @@ import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; -public class MenuInputControllerShould { +public class AppInputControllerShould { - private MenuInputController inputController; + private AppInputController inputController; @Before public void setUp() { @@ -19,21 +19,21 @@ public void setUp() { @Test public void returnTrueWhenUserWantsToExit() { System.setIn(new ByteArrayInputStream("0".getBytes())); - inputController = new MenuInputController(System.in); + inputController = new AppInputController(System.in); assertThat(inputController.wantsToExit(), is(true)); } @Test public void returnFalseWhenUserDoesNotWantToExit() { System.setIn(new ByteArrayInputStream("1".getBytes())); - inputController = new MenuInputController(System.in); + inputController = new AppInputController(System.in); assertThat(inputController.wantsToExit(), is(false)); } @Test public void keepSelectedOptionWhenAskingIfUserWantsToExit() { System.setIn(new ByteArrayInputStream("34".getBytes())); - inputController = new MenuInputController(System.in); + inputController = new AppInputController(System.in); inputController.wantsToExit(); assertThat(inputController.getSelectedOption(), is(not(nullValue()))); } diff --git a/src/test/java/com/twu/biblioteca/OptionPresenterShould.java b/src/test/java/com/twu/biblioteca/AppPresenterShould.java similarity index 65% rename from src/test/java/com/twu/biblioteca/OptionPresenterShould.java rename to src/test/java/com/twu/biblioteca/AppPresenterShould.java index 4ee3f30..b137db0 100644 --- a/src/test/java/com/twu/biblioteca/OptionPresenterShould.java +++ b/src/test/java/com/twu/biblioteca/AppPresenterShould.java @@ -8,32 +8,32 @@ import static org.mockito.Mockito.*; -public class OptionPresenterShould { +public class AppPresenterShould { private PrintStream outMock; - private OptionPresenter optionPresenter; + private AppPresenter appPresenter; @Before public void setUp() { outMock = mock(PrintStream.class); - optionPresenter = new OptionPresenter(outMock); + appPresenter = new AppPresenter(outMock); } @Test public void showAWelcomeMessage() { - optionPresenter.sayWelcome(); + appPresenter.sayWelcome(); verify(outMock).println("Welcome to the Bangalore Public Library system"); } @Test public void showTwoFancyLinesWhenWelcoming() { - optionPresenter.sayWelcome(); + appPresenter.sayWelcome(); verify(outMock, times(2)).println("----------------------------------------------"); } @Test public void showMenuOptions() { - optionPresenter.showMenu(); + appPresenter.showMenu(); InOrder inOrder = inOrder(outMock); inOrder.verify(outMock).println("Choose an option:"); inOrder.verify(outMock).println("\t1. List books"); @@ -42,4 +42,16 @@ public void showMenuOptions() { inOrder.verify(outMock).println("\t0. Exit"); verifyNoMoreInteractions(outMock); } + + @Test + public void askForBookCheckOut() { + appPresenter.askForBookCheckOut(); + verify(outMock).println("What book do you want to checkout?"); + } + + @Test + public void askForBookReturn() { + appPresenter.askForBookReturn(); + verify(outMock).println("What book do you want to return?"); + } } diff --git a/src/test/java/com/twu/biblioteca/books/infrastructure/BookInputControllerShould.java b/src/test/java/com/twu/biblioteca/books/infrastructure/BookInputControllerShould.java new file mode 100644 index 0000000..6a5253b --- /dev/null +++ b/src/test/java/com/twu/biblioteca/books/infrastructure/BookInputControllerShould.java @@ -0,0 +1,17 @@ +package com.twu.biblioteca.books.infrastructure; + +import org.junit.Test; + +import java.io.ByteArrayInputStream; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +public class BookInputControllerShould { + @Test + public void readUserBookTitleInput() { + System.setIn(new ByteArrayInputStream("some input".getBytes())); + BookInputController bookInputController = new BookInputController(System.in); + assertThat(bookInputController.readBookTitle(), is("some input")); + } +} \ No newline at end of file