class RequestHandler(object): def __init__(self, app): self.__app = app self.__htmlHandler = HtmlRequestHandler(app) self.__opdsHandler = OpdsRequestHandler(app, Jinja2Loader()) def index_handler(self, user_agent): if self.__is_opds_browser(user_agent): return self.__opdsHandler.index_handler() else: return self.__htmlHandler.index_handler() def by_title_handler(self, user_agent): if self.__is_opds_browser(user_agent): return self.__opdsHandler.by_title_handler() def first_letter_handler(self, user_agent, first_letter): if self.__is_opds_browser(user_agent): return self.__opdsHandler.first_letter_handler(first_letter) else: return self.__htmlHandler.first_letter_handler(first_letter) def book_handler(self, user_agent, book_id): if self.__is_opds_browser(user_agent): return self.__opdsHandler.book_handler(book_id) else: return self.__htmlHandler.book_handler(book_id) def download_handler(self, user_agent, book_id, book_format): if self.__is_opds_browser(user_agent): return self.__opdsHandler.download_handler(book_id, book_format) def search_handler(self, user_agent, search_term): if self.__is_opds_browser(user_agent): return self.__opdsHandler.search_handler(search_term) else: return self.__htmlHandler.search_handler(search_term) def harvest_handler(self): return self.__htmlHandler.harvest_handler() def set_html_request_handler(self, handler): self.__htmlHandler = handler def set_opds_request_handler(self, handler): self.__opdsHandler = handler @staticmethod def __is_opds_browser(user_agent): #Stanza iPhone/Aldiko/Moon+ Reader(Android)t.app) return user_agent.find("Aldiko") > -1
class TestHtmlRequestHandler(RequestHandlerTestBase): def setUp(self): self.initialise_app_mock() self.initialise_search_handler_mock() self.initialise_book_handler_mock() self.initialise_first_letter_handler_mock() self.initialise_index_handler_mock() self.initialise_download_handler_mock() self.initialise_html_request_handler() def initialise_app_mock(self): RequestHandlerTestBase.initialise_app_mock(self) self.app.harvest_books = Mock(return_value=None) def initialise_search_handler_mock(self): self.__search_handler = HtmlRequestHandlerSearch(self.app) self.__search_handler.handle = Mock() def initialise_book_handler_mock(self): self.__book_handler = HtmlRequestHandlerBook(self.app) self.__book_handler.handle = Mock() def initialise_first_letter_handler_mock(self): self.__first_letter_handler = HtmlRequestHandlerFirstLetter(self.app) self.__first_letter_handler.handle = Mock() def initialise_index_handler_mock(self): self.__index_handler = HtmlRequestHandlerIndex(self.app) self.__index_handler.handle = Mock() def initialise_download_handler_mock(self): self.__download_handler = HtmlRequestHandlerDownload(self.app) self.__download_handler.handle = Mock() def initialise_html_request_handler(self): 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) self.__h.set_index_handler(self.__index_handler) self.__h.set_download_handler(self.__download_handler) def test_search_handler_calls_search_handler_object(self): self.__h.search_handler("searchTerm") self.assert_called(self.__search_handler.handle) def test_harvest_handler_calls_harvest_books(self): self.__h.harvest_handler() self.assert_called(self.app.harvest_books) def test_book_handler_calls_book_handler_object(self): self.__h.book_handler("1") self.assert_called(self.__book_handler.handle) def test_download_handler_calls_download_handler_object(self): self.__h.download_handler(None, None) self.assert_called(self.__download_handler.handle) def test_first_letter_calls_first_letter_handler_object(self): self.__h.first_letter_handler("T") self.assert_called(self.__first_letter_handler.handle) def test_index_calls_index_handler_object(self): self.__h.index_handler() self.assert_called(self.__index_handler.handle)