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

test_markForApproval_completes_filepaths()   A

Complexity

Conditions 1

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
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