Completed
Push — master ( 0d56a8...9e1177 )
by Jasper
10s
created

tests.ApprovalTests   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 61
Duplicated Lines 0 %
Metric Value
dl 0
loc 61
rs 10
wmc 11

8 Methods

Rating   Name   Duplication   Size   Complexity  
A ApprovalTests.test_markedForApproval_tells_listener_about_files() 0 5 1
A ApprovalTests.test_markForApproval_tells_repo_to_set_approval_to_pending() 0 5 1
A ApprovalTests.test_selectApproved() 0 18 3
A ApprovalTests.test_markedForApproval_lists_files_marked() 0 5 1
A ApprovalTests.mockImg() 0 4 1
A ApprovalTests.test_Approve_tells_repo_to_set_approval_to_granted() 0 4 1
A ApprovalTests.setUp() 0 2 1
A ApprovalTests.test_markForApproval_reset_False_means_approved_files_not_marked() 0 9 2
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
        niprov.markForApproval(['f1','f2'], dependencies=self.dependencies)
14
        self.repo.updateApproval.assert_any_call('f1','pending')
15
        self.repo.updateApproval.assert_any_call('f2','pending')
16
17
    def test_Approve_tells_repo_to_set_approval_to_granted(self):
18
        import niprov
19
        niprov.approve('fx12', dependencies=self.dependencies)
20
        self.repo.updateApproval.assert_any_call('fx12','granted')
21
22
    def test_markedForApproval_lists_files_marked(self):
23
        import niprov
24
        markedFiles = niprov.markedForApproval(dependencies=self.dependencies)
25
        self.repo.byApproval.assert_called_with('pending')
26
        self.assertEqual(self.repo.byApproval(), markedFiles)
27
28
    def test_markedForApproval_tells_listener_about_files(self):
29
        import niprov
30
        markedFiles = niprov.markedForApproval(dependencies=self.dependencies)
31
        self.listener.filesMarkedForApproval.assert_called_with(
32
            markedFiles)
33
34
    def test_selectApproved(self):
35
        import niprov
36
        self.locationFactory.completeString.side_effect = lambda p: p
37
        a1 = self.mockImg()
38
        a1.provenance['approval'] = 'granted'
39
        a2 = self.mockImg()
40
        a2.provenance['approval'] = 'granted'
41
        b1 = self.mockImg()
42
        c1 = self.mockImg()
43
        c1.provenance['approval'] = 'pending'
44
        self.repo.byLocation.side_effect = lambda p: {'a1':a1,'b1':b1,'a2':a2,'c1':c1}[p]
45
        selected = niprov.selectApproved(['a1','b1','a2','c1'], 
46
            dependencies=self.dependencies)
47
        self.locationFactory.completeString.assert_any_call('a1')
48
        self.locationFactory.completeString.assert_any_call('b1')
49
        self.locationFactory.completeString.assert_any_call('a2')
50
        self.locationFactory.completeString.assert_any_call('c1')
51
        self.assertEqual(selected, [a1.path, a2.path])
52
53
    def test_markForApproval_reset_False_means_approved_files_not_marked(self):
54
        import niprov
55
        img = self.mockImg()
56
        img.provenance['approval'] = 'granted'
57
        self.repo.byLocation.return_value = img
58
        niprov.markForApproval(['f2'], reset=False, dependencies=self.dependencies)
59
        assert not self.repo.updateApproval.called, 'Should not mark approved file'
60
        niprov.markForApproval(['f1'], reset=True, dependencies=self.dependencies)
61
        self.repo.updateApproval.assert_any_call('f1','pending')
62
63
    def mockImg(self):
64
        img = Mock()
65
        img.provenance = {}
66
        return img
67
68