Passed
Push — master ( 00d837...bc5250 )
by Jace
49s
created

TestTemplateService   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 79
rs 10
c 0
b 0
f 0
wmc 19
1
# pylint: disable=no-self-use,misplaced-comparison-constant
2
3
from unittest.mock import patch, Mock
4
5
import pytest
6
7
from memegen.domain import Template
8
9
10
@patch('memegen.domain.Template.validate', Mock(return_value=True))
11
class TestTemplateService:
12
13
    def test_find_template_not_found(self, template_service):
14
        template_service.template_store.read.return_value = None
15
        template_service.template_store.filter.return_value = []
16
17
        with pytest.raises(KeyError):
18
            template_service.find('unknown_key')
19
20
    def test_find_template_allow_missing(self, template_service):
21
        template_service.template_store.read.return_value = None
22
        template_service.template_store.filter.return_value = []
23
24
        template = template_service.find('unknown_key', allow_missing=True)
25
26
        assert 'unknown_key' == template.key
27
        assert template.get_path().endswith("/static/images/missing.png")
28
29
    def test_find_template_by_alias(self, template_service):
30
        template = Template('hello', aliases=['hello-world', 'helloworld'])
31
        template_service.template_store.read.return_value = None
32
        template_service.template_store.filter.return_value = [template]
33
34
        template = template_service.find('HELLO_WORLD')
35
36
        assert 'hello' == template.key
37
38
    def test_aliases(self, template_service):
39
        template = Template('a', aliases=['b', 'c'])
40
        template_service.template_store.filter.return_value = [template]
41
42
        aliases = template_service.aliases()
43
44
        assert ['a', 'b', 'c'] == sorted(aliases)
45
46
    def test_aliases_with_filter(self, template_service):
47
        template = Template('a1', aliases=['a2', 'b1'])
48
        template_service.template_store.filter.return_value = [template]
49
50
        aliases = template_service.aliases('a')
51
52
        assert ['a1', 'a2'] == sorted(aliases)
53
54
    def test_validate_with_good_templates(self, template_service):
55
        templates = [Template(key='abc',
56
                              name="The ABC Meme"),
57
                     Template(key='def',
58
                              name="The DEF Meme",
59
                              aliases=['def2'])]
60
        template_service.template_store.filter.return_value = templates
61
62
        assert True is template_service.validate()
63
64
    def test_validate_with_bad_templates(self, template_service):
65
        mock_template = Mock()
66
        mock_template.validate.return_value = False
67
        template_service.template_store.filter.return_value = [mock_template]
68
69
        assert False is template_service.validate()
70
71
    def test_validate_with_duplicate_aliases(self, template_service):
72
        templates = [Template(key='abc',
73
                              name="The ABC Meme",
74
                              aliases=['123', 'the-meme']),
75
                     Template(key='def',
76
                              name="The DEF Meme",
77
                              aliases=['the-meme'])]
78
        template_service.template_store.filter.return_value = templates
79
80
        assert False is template_service.validate()
81
82
    def test_validate_with_misformatted_aliases(self, template_service):
83
        templates = [Template(key='abc',
84
                              name="The ABC Meme",
85
                              aliases=['abc-meme', 'Bad Format'])]
86
        template_service.template_store.filter.return_value = templates
87
88
        assert False is template_service.validate()
89