Skip to content

Commit

Permalink
All persistence operations in the Aquarius class now use interactors …
Browse files Browse the repository at this point in the history
…rather than persistence directly.
  • Loading branch information
jeroanan committed Jun 1, 2014
1 parent 62b45a8 commit ee38b37
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 6 deletions.
3 changes: 2 additions & 1 deletion aquarius/Aquarius.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ def get_book_details(self, book_id):
return i.execute(book_id)

def get_book_type(self, format_code):
return self.__persistence.get_book_type(format_code)
i = self.__interactor_factory.get_book_type_interactor(self.__persistence)
return i.execute(format_code)

def add_book(self, book):
i = self.__interactor_factory.get_add_book_interactor(self.__persistence)
Expand Down
5 changes: 4 additions & 1 deletion aquarius/InteractorFactory.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,8 @@ def get_list_books_by_first_letter_interactor(self, persistence):
def get_search_book_interactor(self, persistence):
raise NotImplementedError

def get_book_details_interactor(self, param):
def get_book_details_interactor(self, persistence):
raise NotImplementedError

def get_book_type_interactor(self, persistence):
raise NotImplementedError
6 changes: 5 additions & 1 deletion aquarius/interactors/BasicInteractorFactory.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from aquarius.InteractorFactory import InteractorFactory
from aquarius.interactors.AddBookInteractor import AddBookInteractor
from aquarius.interactors.GetBookDetailsInteractor import GetBookDetailsInteractor
from aquarius.interactors.GetBookTypeInteractor import GetBookTypeInteractor
from aquarius.interactors.ListBooksByFirstLetterInteractor import ListBooksByFirstLetterInteractor
from aquarius.interactors.SearchBookInteractor import SearchBookInteractor

Expand All @@ -17,4 +18,7 @@ def get_search_book_interactor(self, persistence):
return SearchBookInteractor(persistence)

def get_book_details_interactor(self, persistence):
return GetBookDetailsInteractor(persistence)
return GetBookDetailsInteractor(persistence)

def get_book_type_interactor(self, persistence):
return GetBookTypeInteractor(persistence)
7 changes: 7 additions & 0 deletions aquarius/interactors/GetBookTypeInteractor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class GetBookTypeInteractor(object):

def __init__(self, persistence):
self.__persistence = persistence

def execute(self, format_code):
self.__persistence.get_book_type(format_code)
11 changes: 9 additions & 2 deletions tests/TestAquarius.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from aquarius.bookharvesting.HardcodedHarvester import HardcodedHarvester
from aquarius.interactors.AddBookInteractor import AddBookInteractor
from aquarius.interactors.GetBookDetailsInteractor import GetBookDetailsInteractor
from aquarius.interactors.GetBookTypeInteractor import GetBookTypeInteractor
from aquarius.interactors.ListBooksByFirstLetterInteractor import ListBooksByFirstLetterInteractor
from aquarius.output.web.Web import Web
from aquarius.persistence.hardcodedpersistence.HardcodedPersistence import HardcodedPersistence
Expand All @@ -26,12 +27,14 @@ def setup_interactors(self):
self.__add_book_interactor = Mock(AddBookInteractor)
self.__list_books_by_first_letter_interactor = Mock(ListBooksByFirstLetterInteractor)
self.__get_book_details_interactor = Mock(GetBookDetailsInteractor)
self.__get_book_type_interactor = Mock(GetBookTypeInteractor)
self.__interactor_factory = InteractorFactory()
self.__interactor_factory.get_search_book_interactor = Mock(return_value=self.__search_book_interactor)
self.__interactor_factory.get_add_book_interactor = Mock(return_value=self.__add_book_interactor)
self.__interactor_factory.get_list_books_by_first_letter_interactor = \
Mock(return_value=self.__list_books_by_first_letter_interactor)
self.__interactor_factory.get_book_details_interactor = Mock(return_value=self.__get_book_details_interactor)
self.__interactor_factory.get_book_type_interactor = Mock(return_value=self.__get_book_type_interactor)

def __setup_harvester_mock(self):
self.__harvester = harvester = HardcodedHarvester(self.__app, None)
Expand Down Expand Up @@ -70,9 +73,13 @@ def test_get_book_details_calls_interactor(self):
self.__app.get_book_details(0)
self.assertTrue(self.__get_book_details_interactor.execute.called)

def test_get_book_type_calls_persistence(self):
def test_get_book_type_uses_interactor_factory(self):
self.__app.get_book_type("EPUB")
self.assertTrue(self.__persistence.get_book_type.called)
self.assertTrue(self.__interactor_factory.get_book_type_interactor.called)

def test_get_book_type_calls_interactor(self):
self.__app.get_book_type("EPUB")
self.assertTrue(self.__get_book_type_interactor.execute.called)

def test_add_book_uses_interactor_factory(self):
self.__app.add_book(None)
Expand Down
3 changes: 3 additions & 0 deletions tests/TestInteractorFactory.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,8 @@ def test_get_search_book_interactor(self):
def test_get_book_details_interactor(self):
self.__assertNotImplemented(self.__target.get_book_details_interactor)

def test_get_book_type_interactor(self):
self.__assertNotImplemented(self.__target.get_book_type_interactor)

def __assertNotImplemented(self, method):
self.assertRaises(NotImplementedError, method, "persistence")
7 changes: 6 additions & 1 deletion tests/interactors/TestBasicInteractorFactory.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import unittest
from aquarius.interactors.BasicInteractorFactory import BasicInteractorFactory
from aquarius.interactors.GetBookDetailsInteractor import GetBookDetailsInteractor
from aquarius.interactors.GetBookTypeInteractor import GetBookTypeInteractor
from aquarius.interactors.SearchBookInteractor import SearchBookInteractor
from aquarius.interactors.AddBookInteractor import AddBookInteractor
from aquarius.interactors.ListBooksByFirstLetterInteractor import ListBooksByFirstLetterInteractor
Expand All @@ -25,4 +26,8 @@ def test_get_search_book_interactor(self):

def test_get_get_book_details_interactor(self):
i = self.__target.get_book_details_interactor("persistence")
self.assertIsInstance(i, GetBookDetailsInteractor)
self.assertIsInstance(i, GetBookDetailsInteractor)

def test_get_book_type_interactor(self):
i = self.__target.get_book_type_interactor("persistence")
self.assertIsInstance(i, GetBookTypeInteractor)
13 changes: 13 additions & 0 deletions tests/interactors/TestGetBookTypeInteractor.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import unittest
from unittest.mock import Mock
from aquarius.interactors.GetBookTypeInteractor import GetBookTypeInteractor
from aquarius.persistence.sqlitepersistence.SqlitePersistence import SqlitePersistence


class TestGetBookTypeInteractor(unittest.TestCase):

def test_get_book_type_interactor(self):
persistence = Mock(SqlitePersistence)
target = GetBookTypeInteractor(persistence)
target.execute("format_code")
self.assertTrue(persistence.get_book_type.called)

0 comments on commit ee38b37

Please sign in to comment.