def test_forFile_makes_pipeline_with_targets_children(self): from niprov.pipelinefactory import PipelineFactory c1a = self.fileWithLocation('c1a') c1b = self.fileWithLocation('c1b') c2a = self.fileWithLocation('c2a') c2b = self.fileWithLocation('c2b') c1a.provenance['parents'] = ['t'] c1b.provenance['parents'] = ['t'] c2a.provenance['parents'] = ['c1a'] c2b.provenance['parents'] = ['c1a', 'c1b'] t = self.fileWithLocation('t') repodict = {'t': t, 'c1a': c1a, 'c1b': c1b, 'c2a': c2a, 'c2b': c2b} childrenByParent = { 't': [c1a, c1b], 'c1a': [c2a], 'c1b': [c2a, c2b], 'c2a': [], 'c2b': [] } self.repo.byLocations.side_effect = lambda ls: [] self.repo.byParents.side_effect = lambda ps: [ c for p in ps for c in childrenByParent[p] ] factory = PipelineFactory(dependencies=self.dependencies) with patch('niprov.pipelinefactory.Pipeline') as PipelineCtr: pipeline = factory.forFile(t) PipelineCtr.assert_called_with(repodict.values()) self.assertEqual(1, self.repo.byLocations.call_count) self.assertEqual(3, self.repo.byParents.call_count)
def test_forFile_should_call_repo_with_list_not_set(self): from niprov.pipelinefactory import PipelineFactory p1a = self.fileWithLocation('p1a') p1b = self.fileWithLocation('p1b') t = self.fileWithLocation('t') t.provenance['parents'] = ['p1a','p1b'] repodict = {'t':t,'p1a':p1a, 'p1b':p1b} self.repo.byLocations.side_effect = lambda ls: [repodict[l] for l in ls] self.repo.byParents.side_effect = lambda ls: [] factory = PipelineFactory(dependencies=self.dependencies) with patch('niprov.pipelinefactory.Pipeline') as PipelineCtr: pipeline = factory.forFile(t) self.repo.byLocations.assert_called_with([]) self.repo.byLocations.assert_any_call(['p1a','p1b'])
def test_forFile_should_call_repo_with_list_not_set(self): from niprov.pipelinefactory import PipelineFactory p1a = self.fileWithLocation('p1a') p1b = self.fileWithLocation('p1b') t = self.fileWithLocation('t') t.provenance['parents'] = ['p1a', 'p1b'] repodict = {'t': t, 'p1a': p1a, 'p1b': p1b} self.repo.byLocations.side_effect = lambda ls: [ repodict[l] for l in ls ] self.repo.byParents.side_effect = lambda ls: [] factory = PipelineFactory(dependencies=self.dependencies) with patch('niprov.pipelinefactory.Pipeline') as PipelineCtr: pipeline = factory.forFile(t) self.repo.byLocations.assert_called_with([]) self.repo.byLocations.assert_any_call(['p1a', 'p1b'])
def test_forFile_makes_pipeline_with_targets_parents_parents(self): from niprov.pipelinefactory import PipelineFactory p1a = self.fileWithLocation('p1a') p1b = self.fileWithLocation('p1b') p2a = self.fileWithLocation('p2a') p2b = self.fileWithLocation('p2b') p1a.provenance['parents'] = ['p2a'] p1b.provenance['parents'] = ['p2a','p2b'] t = self.fileWithLocation('t') t.provenance['parents'] = ['p1a','p1b'] repodict = {'t':t,'p1a':p1a, 'p1b':p1b, 'p2a':p2a, 'p2b':p2b} self.repo.byLocations.side_effect = lambda ls: [repodict[l] for l in ls] self.repo.byParents.side_effect = lambda ls: [] factory = PipelineFactory(dependencies=self.dependencies) with patch('niprov.pipelinefactory.Pipeline') as PipelineCtr: pipeline = factory.forFile(t) PipelineCtr.assert_called_with(repodict.values()) self.assertEqual(3, self.repo.byLocations.call_count) self.assertEqual(1, self.repo.byParents.call_count)
def test_forFile_makes_pipeline_with_targets_parents_parents(self): from niprov.pipelinefactory import PipelineFactory p1a = self.fileWithLocation('p1a') p1b = self.fileWithLocation('p1b') p2a = self.fileWithLocation('p2a') p2b = self.fileWithLocation('p2b') p1a.provenance['parents'] = ['p2a'] p1b.provenance['parents'] = ['p2a', 'p2b'] t = self.fileWithLocation('t') t.provenance['parents'] = ['p1a', 'p1b'] repodict = {'t': t, 'p1a': p1a, 'p1b': p1b, 'p2a': p2a, 'p2b': p2b} self.repo.byLocations.side_effect = lambda ls: [ repodict[l] for l in ls ] self.repo.byParents.side_effect = lambda ls: [] factory = PipelineFactory(dependencies=self.dependencies) with patch('niprov.pipelinefactory.Pipeline') as PipelineCtr: pipeline = factory.forFile(t) PipelineCtr.assert_called_with(repodict.values()) self.assertEqual(3, self.repo.byLocations.call_count) self.assertEqual(1, self.repo.byParents.call_count)
def test_forFile_makes_pipeline_with_targets_children(self): from niprov.pipelinefactory import PipelineFactory c1a = self.fileWithLocation('c1a') c1b = self.fileWithLocation('c1b') c2a = self.fileWithLocation('c2a') c2b = self.fileWithLocation('c2b') c1a.provenance['parents'] = ['t'] c1b.provenance['parents'] = ['t'] c2a.provenance['parents'] = ['c1a'] c2b.provenance['parents'] = ['c1a','c1b'] t = self.fileWithLocation('t') repodict = {'t':t,'c1a':c1a, 'c1b':c1b, 'c2a':c2a, 'c2b':c2b} childrenByParent = {'t':[c1a, c1b],'c1a':[c2a],'c1b':[c2a, c2b], 'c2a':[],'c2b':[]} self.repo.byLocations.side_effect = lambda ls: [] self.repo.byParents.side_effect = lambda ps: [c for p in ps for c in childrenByParent[p]] factory = PipelineFactory(dependencies=self.dependencies) with patch('niprov.pipelinefactory.Pipeline') as PipelineCtr: pipeline = factory.forFile(t) PipelineCtr.assert_called_with(repodict.values()) self.assertEqual(1, self.repo.byLocations.call_count) self.assertEqual(3, self.repo.byParents.call_count)