from mock import Mock, patch

from django.test import TestCase

from . import general_context


class TestGeneralContext(TestCase):
    maxDiff = None

    @patch('evennia.web.utils.general_context.GAME_NAME', "test_name")
    @patch('evennia.web.utils.general_context.GAME_SLOGAN', "test_game_slogan")
    @patch('evennia.web.utils.general_context.WEBSOCKET_CLIENT_ENABLED', "websocket_client_enabled_testvalue")
    @patch('evennia.web.utils.general_context.WEBCLIENT_ENABLED', "webclient_enabled_testvalue")
    @patch('evennia.web.utils.general_context.WEBSOCKET_PORT', "websocket_client_port_testvalue")
    @patch('evennia.web.utils.general_context.WEBSOCKET_URL', "websocket_client_url_testvalue")
    def test_general_context(self):
        request = Mock()
        self.assertEqual(general_context.general_context(request), {
            'game_name': "test_name",
            'game_slogan': "test_game_slogan",
            'evennia_userapps': ['Accounts'],
            'evennia_entityapps': ['Objects', 'Scripts', 'Comms', 'Help'],
            'evennia_setupapps': ['Permissions', 'Config'],
            'evennia_connectapps': ['Irc'],
            'evennia_websiteapps': ['Flatpages', 'News', 'Sites'],
            "webclient_enabled": "webclient_enabled_testvalue",
            "websocket_enabled": "websocket_client_enabled_testvalue",
            "websocket_port": "websocket_client_port_testvalue",
            "websocket_url": "websocket_client_url_testvalue"
        })

    # spec being an empty list will initially raise AttributeError in set_game_name_and_slogan to test defaults
    @patch('evennia.web.utils.general_context.settings', spec=[])
    @patch('evennia.web.utils.general_context.get_evennia_version')
    def test_set_game_name_and_slogan(self, mock_get_version, mock_settings):
        mock_get_version.return_value = "version 1"
        # test default/fallback values
        general_context.set_game_name_and_slogan()
        self.assertEqual(general_context.GAME_NAME, "Evennia")
        self.assertEqual(general_context.GAME_SLOGAN, "version 1")
        # test values when the settings are defined
        mock_settings.SERVERNAME = "test_name"
        mock_settings.GAME_SLOGAN = "test_game_slogan"
        general_context.set_game_name_and_slogan()
        self.assertEqual(general_context.GAME_NAME, "test_name")
        self.assertEqual(general_context.GAME_SLOGAN, "test_game_slogan")

    @patch('evennia.web.utils.general_context.settings')
    def test_set_webclient_settings(self, mock_settings):
        mock_settings.WEBCLIENT_ENABLED = "webclient"
        mock_settings.WEBSOCKET_CLIENT_URL = "websocket_url"
        mock_settings.WEBSOCKET_CLIENT_ENABLED = "websocket_client"
        mock_settings.WEBSOCKET_CLIENT_PORT = "websocket_port"
        general_context.set_webclient_settings()
        self.assertEqual(general_context.WEBCLIENT_ENABLED, "webclient")
        self.assertEqual(general_context.WEBSOCKET_URL, "websocket_url")
        self.assertEqual(general_context.WEBSOCKET_CLIENT_ENABLED, "websocket_client")
        self.assertEqual(general_context.WEBSOCKET_PORT, "websocket_port")

@@ -2764,32 +2764,20 @@
 _PORT = 
-%22websocket_port%22
+5000
 %0A       
@@ -3108,26 +3108,14 @@
 T_PORT, 
-%22websocket_port%22
+5000
 )%0A

fix unittests