Completed
Pull Request — master (#147)
by Jasper
01:28
created

ApprovalTests   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 83
rs 10
c 0
b 0
f 0
wmc 19

11 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 2 1
A test_markedForApproval_tells_listener_about_files() 0 5 1
A test_markForApproval_tells_repo_to_set_approval_to_pending() 0 6 2
A test_markForApproval_completes_filepaths() 0 6 1
A test_selectApproved() 0 18 3
A test_markForApproval_errors_if_file_not_found() 0 6 3
A test_markedForApproval_lists_files_marked() 0 5 1
A mockImg() 0 4 1
A test_aprove_completes_filepaths() 0 4 1
A test_Approve_tells_repo_to_set_approval_to_granted() 0 5 2
A test_markForApproval_reset_False_means_approved_files_not_marked() 0 10 3
1
import unittest
2
from mock import Mock
3
from tests.ditest import DependencyInjectionTestBase
4
5
6
class ApprovalTests(DependencyInjectionTestBase):
7
8
    def setUp(self):
9
        super(ApprovalTests, self).setUp()
10
11
    def test_markForApproval_tells_repo_to_set_approval_to_pending(self):
12
        import niprov
13
        self.locationFactory.completeString.side_effect = lambda f: f
14
        niprov.markForApproval(['f1','f2'], dependencies=self.dependencies)
15
        self.repo.updateApproval.assert_any_call('f1','pending')
16
        self.repo.updateApproval.assert_any_call('f2','pending')
17
18
    def test_Approve_tells_repo_to_set_approval_to_granted(self):
19
        import niprov
20
        self.locationFactory.completeString.side_effect = lambda f: f
21
        niprov.approve('fx12', dependencies=self.dependencies)
22
        self.repo.updateApproval.assert_any_call('fx12','granted')
23
24
    def test_markedForApproval_lists_files_marked(self):
25
        import niprov
26
        markedFiles = niprov.markedForApproval(dependencies=self.dependencies)
27
        self.query.byApproval.assert_called_with('pending')
28
        self.assertEqual(self.query.byApproval(), markedFiles)
29
30
    def test_markedForApproval_tells_listener_about_files(self):
31
        import niprov
32
        markedFiles = niprov.markedForApproval(dependencies=self.dependencies)
33
        self.listener.filesMarkedForApproval.assert_called_with(
34
            markedFiles)
35
36
    def test_selectApproved(self):
37
        import niprov
38
        self.locationFactory.completeString.side_effect = lambda p: p
39
        a1 = self.mockImg()
40
        a1.provenance['approval'] = 'granted'
41
        a2 = self.mockImg()
42
        a2.provenance['approval'] = 'granted'
43
        b1 = self.mockImg()
44
        c1 = self.mockImg()
45
        c1.provenance['approval'] = 'pending'
46
        self.repo.byLocation.side_effect = lambda p: {'a1':a1,'b1':b1,'a2':a2,'c1':c1}[p]
47
        selected = niprov.selectApproved(['a1','b1','a2','c1'], 
48
            dependencies=self.dependencies)
49
        self.locationFactory.completeString.assert_any_call('a1')
50
        self.locationFactory.completeString.assert_any_call('b1')
51
        self.locationFactory.completeString.assert_any_call('a2')
52
        self.locationFactory.completeString.assert_any_call('c1')
53
        self.assertEqual(selected, [a1.path, a2.path])
54
55
    def test_markForApproval_reset_False_means_approved_files_not_marked(self):
56
        import niprov
57
        self.locationFactory.completeString.side_effect = lambda f: f
58
        img = self.mockImg()
59
        img.provenance['approval'] = 'granted'
60
        self.repo.byLocation.return_value = img
61
        niprov.markForApproval(['f2'], reset=False, dependencies=self.dependencies)
62
        assert not self.repo.updateApproval.called, 'Should not mark approved file'
63
        niprov.markForApproval(['f1'], reset=True, dependencies=self.dependencies)
64
        self.repo.updateApproval.assert_any_call('f1','pending')
65
66
    def test_markForApproval_errors_if_file_not_found(self):
67
        import niprov
68
        self.repo.byLocation.return_value = None
69
        with self.assertRaisesRegexp(ValueError, 'Unknown file: f2'):
70
            niprov.markForApproval(['f2'], dependencies=self.dependencies)
71
        assert not self.repo.updateApproval.called, 'Should not mark unknown file'
72
73
    def test_markForApproval_completes_filepaths(self):
74
        import niprov
75
        niprov.markForApproval(['f2'], dependencies=self.dependencies)
76
        self.locationFactory.completeString.assert_any_call('f2')
77
        self.repo.byLocation.assert_called_with(
78
                self.locationFactory.completeString())
79
80
    def test_aprove_completes_filepaths(self):
81
        import niprov
82
        niprov.approve('f2', dependencies=self.dependencies)
83
        self.locationFactory.completeString.assert_any_call('f2')
84
85
    def mockImg(self):
86
        img = Mock()
87
        img.provenance = {}
88
        return img
89
90