Completed
Push — develop ( 86b58f...0a86d2 )
by Jace
03:19
created

tests/test_persistence_models.py (1 issue)

1
"""Integration tests using YORM as a persistence model."""
2
# pylint: disable=missing-docstring,no-self-use,misplaced-comparison-constant
3
4
import os
5
6
from expecter import expect
0 ignored issues
show
The import expecter could not be resolved.

This can be caused by one of the following:

1. Missing Dependencies

This error could indicate a configuration issue of Pylint. Make sure that your libraries are available by adding the necessary commands.

# .scrutinizer.yml
before_commands:
    - sudo pip install abc # Python2
    - sudo pip3 install abc # Python3
Tip: We are currently not using virtualenv to run pylint, when installing your modules make sure to use the command for the correct version.

2. Missing __init__.py files

This error could also result from missing __init__.py files in your module folders. Make sure that you place one file in each sub-folder.

Loading history...
7
8
import yorm
9
from yorm.types import String
10
11
12
# CLASSES ######################################################################
13
14
15
class Config:
16
    """Domain model."""
17
18
    def __init__(self, key, name=None, root=None):
19
        self.key = key
20
        self.name = name or ""
21
        self.root = root or ""
22
23
24
@yorm.attr(key=String)
25
@yorm.attr(name=String)
26
@yorm.sync("{self.root}/{self.key}/config.yml",
27
           auto_create=False, auto_save=False)
28
class ConfigModel:
29
    """Persistence model."""
30
31
    def __init__(self, key, root):
32
        self.key = key
33
        self.root = root
34
        print(self.key)
35
        self.unmapped = 0
36
37
    @staticmethod
38
    def pm_to_dm(model):
39
        config = Config(model.key)
40
        config.name = model.name
41
        config.root = model.root
42
        return config
43
44
45
class ConfigStore:
46
47
    def __init__(self, root):
48
        self.root = root
49
50
    def read(self, key):
51
        return yorm.find(ConfigModel, self.root, key)
52
53
54
# TESTS ########################################################################
55
56
57
class TestPersistanceMapping:  # pylint: disable=no-member
58
59
    root = os.path.join(os.path.dirname(__file__), 'files')
60
61
    def test_load_pm(self):
62
        model = ConfigModel('my_key', self.root)
63
64
        print(model.__dict__)
65
        assert model.key == "my_key"
66
        assert model.root == self.root
67
        assert model.name == "my_name"
68
69
    def test_create_dm_from_pm(self):
70
        model = ConfigModel('my_key', self.root)
71
        config = ConfigModel.pm_to_dm(model)
72
73
        print(config.__dict__)
74
        assert config.key == "my_key"
75
        assert config.root == self.root
76
        assert config.name == "my_name"
77
78
    def test_nonmapped_attribute_is_kept(self):
79
        model = ConfigModel('my_key', self.root)
80
        model.unmapped = 42
81
        assert 42 == model.unmapped
82
83
    def test_missing_files_are_handled(self):
84
        model = ConfigModel('my_key_manual', self.root)
85
86
        with expect.raises(yorm.exceptions.MissingFileError):
87
            print(model.name)
88
89
90
class TestStore:
91
92
    def test_read_missing(self, tmpdir):
93
        store = ConfigStore(str(tmpdir))
94
        assert None is store.read('unknown')
95