from unit.applications.lang.python import TestApplicationPython


class TestPythonEnvironment(TestApplicationPython):
    prerequisites = {'modules': {'python': 'any'}}

    def test_python_environment_name_null(self):
        self.load('environment')

        assert 'error' in self.conf(
            {"va\0r": "val1"}, 'applications/environment/environment'
        ), 'name null'

    def test_python_environment_name_equals(self):
        self.load('environment')

        assert 'error' in self.conf(
            {"var=": "val1"}, 'applications/environment/environment'
        ), 'name equals'

    def test_python_environment_value_null(self):
        self.load('environment')

        assert 'error' in self.conf(
            {"var": "\0val"}, 'applications/environment/environment'
        ), 'value null'

    def test_python_environment_update(self):
        self.load('environment')

        self.conf({"var": "val1"}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'var',
                    'Connection': 'close',
                }
            )['body']
            == 'val1,'
        ), 'set'

        self.conf({"var": "val2"}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'var',
                    'Connection': 'close',
                }
            )['body']
            == 'val2,'
        ), 'update'

    def test_python_environment_replace(self):
        self.load('environment')

        self.conf({"var1": "val1"}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'var1',
                    'Connection': 'close',
                }
            )['body']
            == 'val1,'
        ), 'set'

        self.conf({"var2": "val2"}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'var1,var2',
                    'Connection': 'close',
                }
            )['body']
            == 'val2,'
        ), 'replace'

    def test_python_environment_clear(self):
        self.load('environment')

        self.conf(
            {"var1": "val1", "var2": "val2"},
            'applications/environment/environment',
        )

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'var1,var2',
                    'Connection': 'close',
                }
            )['body']
            == 'val1,val2,'
        ), 'set'

        self.conf({}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'var1,var2',
                    'Connection': 'close',
                }
            )['body']
            == ''
        ), 'clear'

    def test_python_environment_replace_default(self):
        self.load('environment')

        home_default = self.get(
            headers={
                'Host': 'localhost',
                'X-Variables': 'HOME',
                'Connection': 'close',
            }
        )['body']

        assert len(home_default) > 1, 'get default'

        self.conf({"HOME": "/"}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'HOME',
                    'Connection': 'close',
                }
            )['body']
            == '/,'
        ), 'replace default'

        self.conf({}, 'applications/environment/environment')

        assert (
            self.get(
                headers={
                    'Host': 'localhost',
                    'X-Variables': 'HOME',
                    'Connection': 'close',
                }
            )['body']
            == home_default
        ), 'restore default'