def test_notify_when_child_outputs_differ(self, mock_render): workflow = build_workflow([ (1, False), (2, True), ]) def render(wf_module, table): if table.equals(DataFrame({'a': ['b']})): return ProcessResult(DataFrame({'a': ['1']})) elif table.equals(DataFrame({'b': ['c']})): return ProcessResult(DataFrame({'a': ['2']})) else: raise Exception("???") mock_render.side_effect = render deltas = find_output_deltas(workflow.wf_modules[0], ProcessResult(DataFrame({'a': ['b']})), ProcessResult(DataFrame({'b': ['c']}))) self.assertEqual(len(deltas), 1) self.assertEqual( deltas[0], OutputDelta(workflow.wf_modules[1], ProcessResult(DataFrame({'a': ['1']})), ProcessResult(DataFrame({'a': ['2']}))) )
def test_noop_when_no_notifications(self, mock_render): workflow = build_workflow([ (1, False), (2, False), ]) deltas = find_output_deltas(workflow.wf_modules[0], ProcessResult(DataFrame({'a': ['b']})), ProcessResult(DataFrame({'b': ['c']}))) self.assertListEqual(deltas, []) mock_render.assert_not_called()
def test_notify_when_fetch_output_becomes_non_none(self): workflow = build_workflow([ (1, True), ]) deltas = find_output_deltas(workflow.wf_modules[0], None, ProcessResult(DataFrame({'b': ['c']}))) self.assertListEqual(deltas, [ OutputDelta(workflow.wf_modules[0], None, ProcessResult(DataFrame({'b': ['c']}))), ])
def test_noop_when_parent_outputs_equal(self, mock_render): # Output of module 1 is equal, so we never run module 2 and thus never # notify. workflow = build_workflow([ (1, False), (2, True), ]) def render(wf_module, table): if table.equals(DataFrame({'a': ['b']})): return ProcessResult(DataFrame({'a': ['c']})) elif table.equals(DataFrame({'b': ['c']})): return ProcessResult(DataFrame({'a': ['c']})) else: raise Exception("???") mock_render.side_effect = render deltas = find_output_deltas(workflow.wf_modules[0], ProcessResult(DataFrame({'a': ['b']})), ProcessResult(DataFrame({'b': ['c']}))) self.assertListEqual(deltas, [])
def test_notify_child_when_fetch_output_becomes_non_none(self, mock_render): workflow = build_workflow([ (1, False), (2, True), ]) def render(wf_module, table): if table.empty: return ProcessResult(None) if table.equals(DataFrame({'a': ['b']})): return ProcessResult(DataFrame({'a': ['1']})) else: raise Exception("???") mock_render.side_effect = render deltas = find_output_deltas(workflow.wf_modules[0], None, ProcessResult(DataFrame({'a': ['b']}))) self.assertListEqual(deltas, [ OutputDelta(workflow.wf_modules[1], ProcessResult(None), ProcessResult(DataFrame({'a': ['1']}))), ])