DiscoveryTests.discover()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
import unittest
2
import mock
3
from mock import Mock
4
import os.path as ospath
5
6
class DiscoveryTests(unittest.TestCase):
7
8
    def setUp(self):
9
        self.filesys = Mock()
10
        self.filesys.walk.return_value = [('root',[],['known','new','unknown'])]
11
        self.listener = Mock()
12
        self.filt = Mock()
13
        self.add = Mock()
14
        img = Mock()
15
        img.status = 'new'
16
        self.add.return_value = img
17
        self.dependencies = Mock()
18
        self.dependencies.getFilesystem.return_value = self.filesys
19
        self.dependencies.getListener.return_value = self.listener
20
        self.dependencies.getFileFilter.return_value = self.filt
21
22
    def discover(self, path):
23
        import niprov.discovery
24
        niprov.discovery.add = self.add
25
        niprov.discovery.discover(path, dependencies=self.dependencies)
26
27
    def test_Calls_add_on_files_encountered(self):
28
        self.setupFilter('.x')
29
        self.filesys.walk.return_value = [('root',[],['p/f1.x','p/f2.x']),
30
            ('root',[],['p/p2/f3.x'])] #(dirpath, dirnames, filenames)
31
        self.discover('root')
32
        self.filesys.walk.assert_called_with('root')
33
        self.add.assert_any_call('root/p/f1.x', transient=False, dependencies=self.dependencies)
34
        self.add.assert_any_call('root/p/f2.x', transient=False, dependencies=self.dependencies)
35
        self.add.assert_any_call('root/p/p2/f3.x', transient=False, dependencies=self.dependencies)
36
37
    def test_file_filters(self):
38
        self.setupFilter('valid.file')
39
        self.filesys.walk.return_value = [('root',[],['valid.file','other.file'])]
40
        self.discover('root')
41
        self.add.assert_any_call('root/valid.file', transient=False, dependencies=self.dependencies)
42
        self.assertNotCalledWith(self.add, 'root/other.file')
43
44
    def test_Gives_listener_summary(self):
45
        self.filesys.walk.return_value = [('root',[],['a','b','c','d','e','f','g','h'])]
46
        statuses = ['new','new','series-new-file','series-new-file', 
47
            'series-new-file','failed','new-version','new-version']
48
        images = []
49
        for s in statuses:
50
            img = Mock()
51
            img.status = s
52
            images.append(img)
53
        self.add.side_effect = images
54
        self.discover('root')
55
        self.listener.discoveryFinished.assert_called_with(nnew=2, nadded=3, nfailed=1, ntotal=8)
56
57
    def assertNotCalledWith(self, m, *args, **kwargs):
58
        c = mock.call(*args, **kwargs)
59
        assert c not in m.call_args_list, "Unexpectedly found call: "+str(c)
60
61
    def setupFilter(self, valid):
62
        def filter_side_effect(*args):
63
            if valid in args[0]:
64
                return True
65
            return False
66
        self.filt.include = Mock(side_effect=filter_side_effect)
67
        
68
69