class TestHtmlRequestHandlerBook(RequestHandlerTestBase):

    def setUp(self):
        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"))

    def __assert_is_html_doc(self, test_string):
        return self.assertTrue(test_string.startswith("<!DOCTYPE html>"))
class HtmlRequestHandler(object):

    def __init__(self, app):
        self.__app = app
        self.__search_handler = HtmlRequestHandlerSearch(self.__app)
        self.__book_handler = HtmlRequestHandlerBook(self.__app)
        self.__first_letter_handler = HtmlRequestHandlerFirstLetter(self.__app)
        self.__index_handler = HtmlRequestHandlerIndex(self.__app)
        self.__download_handler = HtmlRequestHandlerDownload(self.__app)

    def index_handler(self):
        return self.__index_handler.handle()
    
    def search_handler(self, search_term):
        return self.__search_handler.handle(search_term)
        
    def harvest_handler(self):
        self.__app.harvest_books()
        return self.index_handler()
        
    def book_handler(self, book_id):
        return self.__book_handler.handle(book_id)
    
    def download_handler(self, book_id, format_code):
        self.__download_handler.handle(book_id, format_code)
    
    def first_letter_handler(self, first_letter):
        return self.__first_letter_handler.handle(first_letter)

    def set_search_handler(self, handler):
        self.__search_handler = handler

    def set_book_handler(self, handler):
        self.__book_handler = handler

    def set_first_letter_handler(self, handler):
        self.__first_letter_handler = handler

    def set_index_handler(self, handler):
        self.__index_handler = handler

    def set_download_handler(self, download_handler):
        self.__download_handler = download_handler