Skip to content

Commit

Permalink
Cut down on actual usages of the Aquarius class by introducing a supe…
Browse files Browse the repository at this point in the history
…rclass for certain unit test cases.
  • Loading branch information
jeroanan committed Jun 3, 2014
1 parent 91ff09a commit ae5488c
Show file tree
Hide file tree
Showing 14 changed files with 108 additions and 111 deletions.
6 changes: 2 additions & 4 deletions aquarius/Aquarius.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ class Aquarius(object):
def __init__(self, persistence_type, output_type, harvester_type, interactor_factory):
self.__is_harvesting = False
self.__config = Config()
self.__output = \
OutputFactory(self, self.__config).get_output(output_type)
self.__harvester = \
HarvesterFactory(self, self.__config).get_harvester(harvester_type)
self.__output = OutputFactory(self, self.__config).get_output(output_type)
self.__harvester = HarvesterFactory(self, self.__config).get_harvester(harvester_type)
self.__interactor_factory = interactor_factory

def main(self):
Expand Down
8 changes: 8 additions & 0 deletions tests/output/console/ConsoleTestBase.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import unittest
from aquarius.Aquarius import Aquarius


class ConsoleTestBase(unittest.TestCase):

def initialise_app_mock(self):
self.app = Aquarius(None, None, None, None)
25 changes: 12 additions & 13 deletions tests/output/console/TestConsole.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,37 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.output.console.Console import Console
from aquarius.output.console.SearchScreen import SearchScreen
from aquarius.output.console.FirstLetterScreen import FirstLetterScreen
from tests.output.console.ConsoleTestBase import ConsoleTestBase


class TestConsole(unittest.TestCase):
class TestConsole(ConsoleTestBase):

def setUp(self):
self.__inputKey = 0
self.__alreadyInput = False
self.__initialise_mock_app()
self.initialise_app_mock()
self.__initialise_mock_search_screen()
self.__initialise_mock_first_letter_screen()
self.__initialise_console()

def __initialise_mock_app(self):
self.__app = Aquarius(None, None, None, None)
self.__app.harvest_books = Mock()
def initialise_app_mock(self):
ConsoleTestBase.initialise_app_mock(self)
self.app.harvest_books = Mock()

def __initialise_mock_search_screen(self):
self.__search_screen = SearchScreen(self.__app)
self.__search_screen = SearchScreen(self.app)
self.__search_screen.input = self.__input
self.__search_screen.main = Mock()

def __initialise_mock_first_letter_screen(self):
self.__first_letter_screen = FirstLetterScreen(self.__app)
self.__first_letter_screen = FirstLetterScreen(self.app)
self.__first_letter_screen.input = self.__input
self.__first_letter_screen.main = Mock()

def __initialise_console(self):
self.__c = Console(self.__app, None)
self.__c = Console(self.app, None)
self.__c.set_search_screen(self.__search_screen)
self.__c.set_first_letter_screen(self.__first_letter_screen)
self.__c.input = self.__input
Expand All @@ -50,15 +49,15 @@ def test_listing_by_first_letter_calls_first_letter_object(self):
def test_doing_book_harvest_calls_app_object(self):
self.__inputKey = "3"
self.__c.main()
self.assertTrue(self.__app.harvest_books.called)
self.assertTrue(self.app.harvest_books.called)

def test_console_ignores_keyboard_interrupt(self):
self.__app.harvest_books = Mock(side_effect=KeyboardInterrupt)
self.app.harvest_books = Mock(side_effect=KeyboardInterrupt)
self.__inputKey = "3"
self.__c.main()

def test_console_ignores_eof_error(self):
self.__app.harvest_books = Mock(side_effect=EOFError)
self.app.harvest_books = Mock(side_effect=EOFError)
self.__inputKey = "3"
self.__c.main()

Expand Down
17 changes: 8 additions & 9 deletions tests/output/console/TestFirstLetterScreen.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.objects.Book import Book
from aquarius.output.console.ConsoleStrings import ConsoleStrings
from aquarius.output.console.FirstLetterScreen import FirstLetterScreen
from tests.output.console.ConsoleTestBase import ConsoleTestBase


class TestFirstLetterScreen(unittest.TestCase):
class TestFirstLetterScreen(ConsoleTestBase):
def setUp(self):
self.initialise_mock_app()
self.initialise_app_mock()
self.initialise_string_mock()
self.__f = FirstLetterScreen(self.__a)
self.__f = FirstLetterScreen(self.app)
self.__f.SetStringsObject(self.__strings)
self.__f.input = lambda: None

def initialise_mock_app(self):
self.__a = Aquarius(None, None, None, None)
self.__a.list_books_by_first_letter = Mock(return_value=[Book()])
def initialise_app_mock(self):
ConsoleTestBase.initialise_app_mock(self)
self.app.list_books_by_first_letter = Mock(return_value=[Book()])

def initialise_string_mock(self):
self.__strings = ConsoleStrings()
Expand All @@ -33,5 +32,5 @@ def __assert_first_letter_screen_rendered(self):
self.assertTrue(self.__strings.get_first_letter_string.called)
self.assertTrue(self.__strings.get_search_result_title_string.called)
self.assertTrue(self.__strings.get_search_result_footer_string.called)
self.assertTrue(self.__a.list_books_by_first_letter.called)
self.assertTrue(self.app.list_books_by_first_letter.called)

25 changes: 12 additions & 13 deletions tests/output/console/TestSearchScreen.py
Original file line number Diff line number Diff line change
@@ -1,35 +1,34 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.objects.Book import Book
from aquarius.output.console.ConsoleStrings import ConsoleStrings
from aquarius.output.console.SearchScreen import SearchScreen
from tests.output.console.ConsoleTestBase import ConsoleTestBase


class TestSearchScreen(unittest.TestCase):
class TestSearchScreen(ConsoleTestBase):

def setUp(self):
self.__initialise_app()
self.initialise_app_mock()
self.__initialise_search_screen()
self.__initialiseStringsMock()
self.__initialise_strings_mock()
self.__search_screen.SetStringsObject(self.__strings)

def __initialiseStringsMock(self):
def initialise_app_mock(self):
ConsoleTestBase.initialise_app_mock(self)
self.app.search_books = Mock(return_value=[Book()])

def __initialise_strings_mock(self):
self.__strings = ConsoleStrings()
self.__strings.get_search_result_title_string = Mock()
self.__strings.get_search_result_footer_string = Mock()

def __initialise_app(self):
self.__app = Aquarius("hardcoded", None, None, None)
self.__app.search_books = Mock(return_value=[Book()])

def __initialise_search_screen(self):
self.__search_screen = SearchScreen(self.__app)
self.__search_screen = SearchScreen(self.app)
self.__search_screen.input = lambda: None

def testMainDoesTheSearch(self):
def test_main_does_search(self):
self.__search_screen.main()
self.assertTrue(self.__strings.get_search_result_title_string.called)
self.assertTrue(self.__strings.get_search_result_footer_string.called)
self.assertTrue(self.__app.search_books.called)
self.assertTrue(self.app.search_books.called)
8 changes: 8 additions & 0 deletions tests/output/web/requesthandlers/RequestHandlerTestBase.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import unittest
from aquarius.Aquarius import Aquarius


class RequestHandlerTestBase(unittest.TestCase):

def initialise_app_mock(self):
self.app = Aquarius(None, None, None, None)
23 changes: 11 additions & 12 deletions tests/output/web/requesthandlers/TestHtmlRequestHandler.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.output.web.requesthandlers.HtmlRequestHandler \
import HtmlRequestHandler
from aquarius.output.web.requesthandlers.HtmlRequestHandlerBook import HtmlRequestHandlerBook
from aquarius.output.web.requesthandlers.HtmlRequestHandlerDownload import HtmlRequestHandlerDownload
from aquarius.output.web.requesthandlers.HtmlRequestHandlerFirstLetter import HtmlRequestHandlerFirstLetter
from aquarius.output.web.requesthandlers.HtmlRequestHandlerIndex import HtmlRequestHandlerIndex
from aquarius.output.web.requesthandlers.HtmlRequestHandlerSearch import HtmlRequestHandlerSearch
from tests.output.web.requesthandlers.RequestHandlerTestBase import RequestHandlerTestBase


class TestHtmlRequestHandler(unittest.TestCase):
class TestHtmlRequestHandler(RequestHandlerTestBase):

def setUp(self):
self.initialise_app_mock()
Expand All @@ -23,31 +22,31 @@ def setUp(self):
self.initialise_html_request_handler()

def initialise_app_mock(self):
self.__a = Aquarius(None, None, None, None)
self.__a.harvest_books = Mock(return_value=None)
RequestHandlerTestBase.initialise_app_mock(self)
self.app.harvest_books = Mock(return_value=None)

def initialise_search_handler_mock(self):
self.__search_handler = HtmlRequestHandlerSearch(self.__a)
self.__search_handler = HtmlRequestHandlerSearch(self.app)
self.__search_handler.handle = Mock()

def initialise_book_handler_mock(self):
self.__book_handler = HtmlRequestHandlerBook(self.__a)
self.__book_handler = HtmlRequestHandlerBook(self.app)
self.__book_handler.handle = Mock()

def initialise_first_letter_handler_mock(self):
self.__first_letter_handler = HtmlRequestHandlerFirstLetter(self.__a)
self.__first_letter_handler = HtmlRequestHandlerFirstLetter(self.app)
self.__first_letter_handler.handle = Mock()

def initialise_index_handler_mock(self):
self.__index_handler = HtmlRequestHandlerIndex(self.__a)
self.__index_handler = HtmlRequestHandlerIndex(self.app)
self.__index_handler.handle = Mock()

def initialise_download_handler_mock(self):
self.__download_handler = HtmlRequestHandlerDownload(self.__a)
self.__download_handler = HtmlRequestHandlerDownload(self.app)
self.__download_handler.handle = Mock()

def initialise_html_request_handler(self):
self.__h = HtmlRequestHandler(self.__a)
self.__h = HtmlRequestHandler(self.app)
self.__h.set_search_handler(self.__search_handler)
self.__h.set_book_handler(self.__book_handler)
self.__h.set_first_letter_handler(self.__first_letter_handler)
Expand All @@ -60,7 +59,7 @@ def test_search_handler_calls_search_handler_object(self):

def test_harvest_handler_calls_harvest_books(self):
self.__h.harvest_handler()
self.assertTrue(self.__a.harvest_books.called)
self.assertTrue(self.app.harvest_books.called)

def test_book_handler_calls_book_handler_object(self):
self.__h.book_handler("1")
Expand Down
11 changes: 5 additions & 6 deletions tests/output/web/requesthandlers/TestHtmlRequestHandlerBook.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.objects.Book import Book
from aquarius.output.web.requesthandlers.HtmlRequestHandlerBook import HtmlRequestHandlerBook
from tests.output.web.requesthandlers.RequestHandlerTestBase import RequestHandlerTestBase


class TestHtmlRequestHandlerBook(unittest.TestCase):
class TestHtmlRequestHandlerBook(RequestHandlerTestBase):

def setUp(self):
self.__app = Aquarius(None, None, None, None)
self.__app.get_book_details = Mock(return_value=(Book()))
self.__book_handler = HtmlRequestHandlerBook(self.__app)
RequestHandlerTestBase.initialise_app_mock(self)
self.app.get_book_details = Mock(return_value=(Book()))
self.__book_handler = HtmlRequestHandlerBook(self.app)

def test_book_handler_returns_html_document(self):
self.__assert_is_html_doc(self.__book_handler.handle("1"))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import unittest

from aquarius.Aquarius import Aquarius
from aquarius.output.web.requesthandlers.HtmlRequestHandlerDownload import HtmlRequestHandlerDownload
from tests.output.web.requesthandlers.TestHtmlRequestHandler import TestHtmlRequestHandler


class TestHtmlRequestHandlerDownload(unittest.TestCase):
class TestHtmlRequestHandlerDownload(TestHtmlRequestHandler):

def test_can_initialise(self):
HtmlRequestHandlerDownload(Aquarius(None, None, None, None))
self.initialise_app_mock()
HtmlRequestHandlerDownload(self.app)
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.output.web.requesthandlers.HtmlRequestHandlerFirstLetter import HtmlRequestHandlerFirstLetter
from aquarius.output.web.requesthandlers.SearchTemplateHandler import SearchTemplateHandler
from tests.output.web.requesthandlers.RequestHandlerTestBase import RequestHandlerTestBase


class TestHtmlRequestHandlerFirstLetter(unittest.TestCase):
class TestHtmlRequestHandlerFirstLetter(RequestHandlerTestBase):

def setUp(self):
self.initialise_mock_app()
self.initialise_app_mock()
self.initialise_mock_search_template_handler()
self.__h = HtmlRequestHandlerFirstLetter(self.__a)
self.__h = HtmlRequestHandlerFirstLetter(self.app)
self.__h.set_search_template_handler(self.__search_template_handler)

def initialise_mock_app(self):
self.__a = Aquarius(None, None, None, None)
self.__a.list_books_by_first_letter = Mock(return_value=[])
def initialise_app_mock(self):
RequestHandlerTestBase.initialise_app_mock(self)
self.app.list_books_by_first_letter = Mock(return_value=[])

def initialise_mock_search_template_handler(self):
self.__search_template_handler = SearchTemplateHandler()
self.__search_template_handler.render_search_template = Mock(return_value=None)

def test_first_letter_handler_calls_application(self):
self.__h.handle("t")
self.assertTrue(self.__a.list_books_by_first_letter.called)
self.assertTrue(self.app.list_books_by_first_letter.called)

def test_first_letter_handler_calls_search_template_handler(self):
self.__h.handle("t")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import unittest

from aquarius.Aquarius import Aquarius
from aquarius.output.web.requesthandlers.HtmlRequestHandlerIndex import HtmlRequestHandlerIndex
from tests.output.web.requesthandlers.RequestHandlerTestBase import RequestHandlerTestBase


class TestHtmlRequestHandlerIndex(unittest.TestCase):
class TestHtmlRequestHandlerIndex(RequestHandlerTestBase):

def test_can_instantiate(self):
HtmlRequestHandlerIndex(Aquarius(None, None, None, None))
RequestHandlerTestBase.initialise_app_mock(self)
HtmlRequestHandlerIndex(self.app)
16 changes: 8 additions & 8 deletions tests/output/web/requesthandlers/TestHtmlRequestHandlerSearch.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
import unittest
from unittest.mock import Mock

from aquarius.Aquarius import Aquarius
from aquarius.output.web.requesthandlers.HtmlRequestHandlerSearch import HtmlRequestHandlerSearch
from aquarius.output.web.requesthandlers.SearchTemplateHandler import SearchTemplateHandler
from tests.output.web.requesthandlers.RequestHandlerTestBase import RequestHandlerTestBase


class TestHtmlRequestHandlerSearch(unittest.TestCase):
class TestHtmlRequestHandlerSearch(RequestHandlerTestBase):

def setUp(self):
self.initialise_mock_app()
self.initialise_app_mock()
self.initialise_mock_search_template_handler()
self.__h = HtmlRequestHandlerSearch(self.__app)
self.__h = HtmlRequestHandlerSearch(self.app)
self.__h.set_search_template_handler(self.__search_template_handler)

def initialise_mock_search_template_handler(self):
self.__search_template_handler = SearchTemplateHandler()
self.__search_template_handler.render_search_template = Mock(return_value=None)

def initialise_mock_app(self):
self.__app = Aquarius(None, None, None, None)
self.__app.search_books = Mock(return_value=[])
def initialise_app_mock(self):
RequestHandlerTestBase.initialise_app_mock(self)
self.app.search_books = Mock(return_value=[])

def test_handle_calls_search(self):
self.__h.handle("test")
self.assertEquals(1, self.__app.search_books.called)
self.assertEquals(1, self.app.search_books.called)

def test_handle_calls_template_handler(self):
self.__h.handle("test")
Expand Down
Loading

0 comments on commit ae5488c

Please sign in to comment.