diff --git a/openlp/core/api/__init__.py b/openlp/core/api/__init__.py index 73a1737f5..bf22beee9 100644 --- a/openlp/core/api/__init__.py +++ b/openlp/core/api/__init__.py @@ -51,7 +51,7 @@ def register_endpoint(end_point): from .endpoint import Endpoint from .apitab import ApiTab from .poll import OpenLPPoll -from .wsserver import OpenWSServer +from .wsserver import OpenLPWSServer from .httpserver import OpenLPHttpServer from .apicontroller import ApiController diff --git a/openlp/core/api/apicontroller.py b/openlp/core/api/apicontroller.py index c63e41be2..4fcac8858 100644 --- a/openlp/core/api/apicontroller.py +++ b/openlp/core/api/apicontroller.py @@ -21,7 +21,7 @@ ############################################################################### import logging -from openlp.core.api import OpenWSServer, OpenLPPoll, OpenLPHttpServer +from openlp.core.api import OpenLPWSServer, OpenLPPoll, OpenLPHttpServer from openlp.core.common import OpenLPMixin, Registry, RegistryMixin, RegistryProperties # These are here to load the endpoints @@ -33,15 +33,9 @@ log = logging.getLogger(__name__) class ApiController(RegistryMixin, OpenLPMixin, RegistryProperties): """ - The implementation of the Media Controller. The Media Controller adds an own class for every Player. - Currently these are QtWebkit, Phonon and Vlc. display_controllers are an array of controllers keyed on the - slidecontroller or plugin which built them. - - ControllerType is the class containing the key values. - - media_players are an array of media players keyed on player name. - - current_media_players is an array of player instances keyed on ControllerType. + The APIController handles the starting of the API middleware. + The HTTP and Websocket servers are started + The core endpoints are generated (just by their declaration). """ def __init__(self, parent=None): @@ -49,13 +43,12 @@ class ApiController(RegistryMixin, OpenLPMixin, RegistryProperties): Constructor """ super(ApiController, self).__init__(parent) - print("apic") def bootstrap_post_set_up(self): """ - process the bootstrap post setup request + Register the poll return service and start the servers. """ self.poll = OpenLPPoll() Registry().register('OpenLPPoll', self.poll) - self.wsserver = OpenWSServer() + self.wsserver = OpenLPWSServer() self.httpserver = OpenLPHttpServer() diff --git a/openlp/core/api/wsserver.py b/openlp/core/api/wsserver.py index 729eda796..0020943cb 100644 --- a/openlp/core/api/wsserver.py +++ b/openlp/core/api/wsserver.py @@ -60,7 +60,7 @@ class WSThread(QtCore.QObject): self.ws_server.stop = True -class OpenWSServer(RegistryProperties, OpenLPMixin): +class OpenLPWSServer(RegistryProperties, OpenLPMixin): """ Wrapper round a server instance """ @@ -68,7 +68,7 @@ class OpenWSServer(RegistryProperties, OpenLPMixin): """ Initialise the http server, and start the server of the correct type http / https """ - super(OpenWSServer, self).__init__() + super(OpenLPWSServer, self).__init__() self.settings_section = 'remotes' self.thread = QtCore.QThread() self.worker = WSThread(self) diff --git a/tests/functional/openlp_core_api/test_apicontroller.py b/tests/functional/openlp_core_api/test_apicontroller.py new file mode 100644 index 000000000..36ac53cfa --- /dev/null +++ b/tests/functional/openlp_core_api/test_apicontroller.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2016 OpenLP Developers # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +""" +Functional tests to test the API Error Class. +""" + +from unittest import TestCase + +from openlp.core.api import ApiController +from openlp.core.common import Registry + +from tests.functional import patch + + +class TestApiController(TestCase): + """ + A test suite to test out the Error in the API code + """ + @patch('openlp.core.api.apicontroller.OpenLPPoll') + @patch('openlp.core.api.apicontroller.OpenLPWSServer') + @patch('openlp.core.api.apicontroller.OpenLPHttpServer') + def test_bootstrap(self, mock_http, mock_ws, mock_poll): + """ + Test the Not Found error displays the correct information + """ + # GIVEN: A controller + Registry.create() + apicontroller = ApiController() + + # WHEN: I call the bootstrap + apicontroller.bootstrap_post_set_up() + + # THEN: the api environment should have been created + self.assertEquals(1, mock_http.call_count, 'The Http server should have been called once') + self.assertEquals(1, mock_ws.call_count, 'The WS server should have been called once') + self.assertEquals(1, mock_poll.call_count, 'The OpenLPPoll should have been called once') diff --git a/tests/functional/openlp_core_api/test_error.py b/tests/functional/openlp_core_api/test_error.py index 893b9e789..6a121e17a 100644 --- a/tests/functional/openlp_core_api/test_error.py +++ b/tests/functional/openlp_core_api/test_error.py @@ -36,9 +36,12 @@ class TestApiError(TestCase): """ Test the Not Found error displays the correct information """ + # GIVEN: + # WHEN: I raise an exception with self.assertRaises(Exception) as context: raise NotFound() + # THEN: we get an error and a status self.assertEquals('Not Found', context.exception.message, 'A Not Found exception should be thrown') self.assertEquals(404, context.exception.status, 'A 404 status should be thrown') @@ -46,8 +49,11 @@ class TestApiError(TestCase): """ Test the server error displays the correct information """ + # GIVEN: + # WHEN: I raise an exception with self.assertRaises(Exception) as context: raise ServerError() + # THEN: we get an error and a status self.assertEquals('Server Error', context.exception.message, 'A Not Found exception should be thrown') self.assertEquals(500, context.exception.status, 'A 500 status should be thrown') \ No newline at end of file diff --git a/tests/functional/openlp_plugins/remotes/test_router.py b/tests/functional/openlp_plugins/remotes/test_router.py index 7081d6d05..3fd72cf1f 100644 --- a/tests/functional/openlp_plugins/remotes/test_router.py +++ b/tests/functional/openlp_plugins/remotes/test_router.py @@ -26,7 +26,7 @@ import os import urllib.request from unittest import TestCase -from openlp.core.api.api import OpenLPPoll +from openlp.core.api.poll import OpenLPPoll from openlp.core.common import Settings, Registry from openlp.core.ui import ServiceManager from openlp.plugins.remotes.lib.httpserver import HttpRouter