edq.config.testing

 1import enum
 2import os
 3import typing
 4
 5import edq.config.app
 6import edq.config.settings
 7import edq.testing.cli
 8import edq.testing.unittest
 9import edq.util.crypto
10import edq.util.json
11
12class TestEnumStr(enum.Enum):
13    """ A test enum that only has strings. """
14
15    FIRST = 'a'
16    SECOND = 'b'
17
18class TestApplicationConfig(edq.config.app.BaseApplicationConfig):
19    """ A test application config. """
20
21    serialization_omit_none = True
22
23    def __init__(self,
24            user: typing.Union[str, None] = None,
25            token: typing.Union[edq.util.crypto.Secret, None] = None,
26            number: typing.Union[int, None] = None,
27            enum_value: typing.Union[TestEnumStr, None] = None,
28            **kwargs: typing.Any) -> None:
29        super().__init__(**kwargs)
30
31        self.user: typing.Union[str, None] = user
32        self.token: typing.Union[edq.util.crypto.Secret, None] = token
33        self.number: typing.Union[int, None] = number
34        self.enum_value: typing.Union[TestEnumStr, None] = enum_value
35
36def clear_env() -> None:
37    """ Clear out any EDQ-looking environment variables. """
38
39    for key in os.environ.keys():
40        if (key.startswith(edq.config.settings.get_env_prefix())):
41            os.environ.pop(key, None)
42
43def verify_cli_test_config_content(
44        test: edq.testing.unittest.BaseTest,
45        test_info: edq.testing.cli.CLITestInfo,
46        ) -> None:
47    """ Verify the contents of a config file created by a CLI test. """
48
49    path = os.path.join(test_info.work_dir, *test_info.extra_options["path"].split('/'))
50
51    data_actual = edq.util.json.load_path(path)
52    data_expected = test_info.extra_options["data"]
53
54    test.assertJSONDictEqual(data_expected, data_actual)
55
56def set_testing_application_config_class(
57        test: edq.testing.unittest.BaseTest,
58        test_info: edq.testing.cli.CLITestInfo,
59        ) -> None:
60    """ Set the application config class to a more varied testing one. """
61
62    edq.config.settings.set_application_config_class(TestApplicationConfig)
63
64def clear_testing_application_config_class(
65        test: edq.testing.unittest.BaseTest,
66        test_info: edq.testing.cli.CLITestInfo,
67        ) -> None:
68    """ Clear the application config class. """
69
70    edq.config.settings.set_application_config_class()
class TestEnumStr(enum.Enum):
13class TestEnumStr(enum.Enum):
14    """ A test enum that only has strings. """
15
16    FIRST = 'a'
17    SECOND = 'b'

A test enum that only has strings.

FIRST = <TestEnumStr.FIRST: 'a'>
SECOND = <TestEnumStr.SECOND: 'b'>
class TestApplicationConfig(edq.config.app.BaseApplicationConfig):
19class TestApplicationConfig(edq.config.app.BaseApplicationConfig):
20    """ A test application config. """
21
22    serialization_omit_none = True
23
24    def __init__(self,
25            user: typing.Union[str, None] = None,
26            token: typing.Union[edq.util.crypto.Secret, None] = None,
27            number: typing.Union[int, None] = None,
28            enum_value: typing.Union[TestEnumStr, None] = None,
29            **kwargs: typing.Any) -> None:
30        super().__init__(**kwargs)
31
32        self.user: typing.Union[str, None] = user
33        self.token: typing.Union[edq.util.crypto.Secret, None] = token
34        self.number: typing.Union[int, None] = number
35        self.enum_value: typing.Union[TestEnumStr, None] = enum_value

A test application config.

TestApplicationConfig( user: Optional[str] = None, token: Optional[edq.util.crypto.Secret] = None, number: Optional[int] = None, enum_value: Optional[TestEnumStr] = None, **kwargs: Any)
24    def __init__(self,
25            user: typing.Union[str, None] = None,
26            token: typing.Union[edq.util.crypto.Secret, None] = None,
27            number: typing.Union[int, None] = None,
28            enum_value: typing.Union[TestEnumStr, None] = None,
29            **kwargs: typing.Any) -> None:
30        super().__init__(**kwargs)
31
32        self.user: typing.Union[str, None] = user
33        self.token: typing.Union[edq.util.crypto.Secret, None] = token
34        self.number: typing.Union[int, None] = number
35        self.enum_value: typing.Union[TestEnumStr, None] = enum_value
serialization_omit_none = True

Do not include None (null) fields in serialization.

user: Optional[str]
token: Optional[edq.util.crypto.Secret]
number: Optional[int]
enum_value: Optional[TestEnumStr]
def clear_env() -> None:
37def clear_env() -> None:
38    """ Clear out any EDQ-looking environment variables. """
39
40    for key in os.environ.keys():
41        if (key.startswith(edq.config.settings.get_env_prefix())):
42            os.environ.pop(key, None)

Clear out any EDQ-looking environment variables.

def verify_cli_test_config_content( test: edq.testing.unittest.BaseTest, test_info: edq.testing.cli.CLITestInfo) -> None:
44def verify_cli_test_config_content(
45        test: edq.testing.unittest.BaseTest,
46        test_info: edq.testing.cli.CLITestInfo,
47        ) -> None:
48    """ Verify the contents of a config file created by a CLI test. """
49
50    path = os.path.join(test_info.work_dir, *test_info.extra_options["path"].split('/'))
51
52    data_actual = edq.util.json.load_path(path)
53    data_expected = test_info.extra_options["data"]
54
55    test.assertJSONDictEqual(data_expected, data_actual)

Verify the contents of a config file created by a CLI test.

def set_testing_application_config_class( test: edq.testing.unittest.BaseTest, test_info: edq.testing.cli.CLITestInfo) -> None:
57def set_testing_application_config_class(
58        test: edq.testing.unittest.BaseTest,
59        test_info: edq.testing.cli.CLITestInfo,
60        ) -> None:
61    """ Set the application config class to a more varied testing one. """
62
63    edq.config.settings.set_application_config_class(TestApplicationConfig)

Set the application config class to a more varied testing one.

def clear_testing_application_config_class( test: edq.testing.unittest.BaseTest, test_info: edq.testing.cli.CLITestInfo) -> None:
65def clear_testing_application_config_class(
66        test: edq.testing.unittest.BaseTest,
67        test_info: edq.testing.cli.CLITestInfo,
68        ) -> None:
69    """ Clear the application config class. """
70
71    edq.config.settings.set_application_config_class()

Clear the application config class.