diff --git a/atdb/taskdatabase/models.py b/atdb/taskdatabase/models.py index 4e661494319e8a9b45212b7b9a1a4bf2c03c352b..0ed582db0146a09bbff16cf1bfb0a7058536fb65 100644 --- a/atdb/taskdatabase/models.py +++ b/atdb/taskdatabase/models.py @@ -272,8 +272,8 @@ class Task(models.Model): # make sure that every task has an activity (also for backward compatibility) associate_task_with_activity(self) - # when a task comes in as DEFINING some validation needs to be done. - if (self.status != State.DEFINING.value) & (self.new_status == State.DEFINING.value): + # when a task becomes DEFINING or DEFINED some validation needs to be done. + if self.new_status in [State.DEFINING.value, State.DEFINED.value]: validate_inputs(self) # when a task goes to PROCESSED... handle the (potential) aggregation functionality diff --git a/atdb/taskdatabase/tests/test_input_validation.py b/atdb/taskdatabase/tests/test_input_validation.py index f847fc72e25c9fd7510982b0a00f9a2cc5fed69c..21e7f0803d8742624facffd5553a8d78e4eb3051 100644 --- a/atdb/taskdatabase/tests/test_input_validation.py +++ b/atdb/taskdatabase/tests/test_input_validation.py @@ -13,7 +13,7 @@ class TestInputValidation(TestCase): self.workflow = Workflow(id=22, workflow_uri="psrfits_requantisation") self.workflow.save() - self.inputs_in = [ + self.inputs_with_duplicate = [ { "size": 100, "surl": "srm://srm.grid.sara.nl:8443/pnfs/grid.sara.nl/data/lofar/ops/projects/lc5_020/432340/L432340_SB000_uv.dppp.MS_caf35c3d.tar", @@ -33,16 +33,7 @@ class TestInputValidation(TestCase): "location": "srm.grid.sara.nl" }] - - self.task = Task.objects.create(sas_id='5432', status='defining', new_status='defining', - size_to_process = 100, workflow=self.workflow, inputs = self.inputs_in) - self.task.save() - - def test_validate_inputs(self): - - # arrange - expected_size = 300 - expected_inputs = [ + self.inputs_validated = [ { "size": 100, "surl": "srm://srm.grid.sara.nl:8443/pnfs/grid.sara.nl/data/lofar/ops/projects/lc5_020/432340/L432340_SB000_uv.dppp.MS_caf35c3d.tar", @@ -56,14 +47,62 @@ class TestInputValidation(TestCase): "location": "srm.grid.sara.nl" }] + self.task = Task.objects.create(sas_id='5432', status='defining', new_status='defining', + size_to_process = 100, workflow=self.workflow, inputs = self.inputs_with_duplicate) + self.task.save() + + def test_validate_inputs(self): + """ + run the validates_inputs function with a task.inputs that contains a duplicate. + The duplicate should be removed, and the size recalculated + """ + + # arrange + expected_size = 300 + expected_inputs = self.inputs_validated + # act input_validation.validate_inputs(self.task) - inputs = self.task.inputs - size = self.task.size_to_process # assert - self.assertEqual(inputs, expected_inputs) - self.assertEqual(size, expected_size) + self.assertEqual(self.task.inputs, expected_inputs) + self.assertEqual(self.task.size_to_process, expected_size) + def test_trigger_on_defined(self): + """ + test that the functionality (also) triggers on 'defined' + """ + # arrange + expected_size = 300 + expected_inputs = self.inputs_validated + + # set to 'wrong' inputs containing a duplicate + self.task.inputs = self.inputs_with_duplicate + + # act + self.task.new_status="defined" + self.task.save() + + # assert + self.assertEqual(self.task.inputs, expected_inputs) + self.assertEqual(self.task.size_to_process, expected_size) + + def test_no_trigger_on_staged(self): + """ + test that the functionality does not trigger on other statusses, like 'staged' + """ + + # arrange + expected_inputs = self.inputs_with_duplicate + + # set to 'wrong' inputs containing a duplicate + self.task.inputs = self.inputs_with_duplicate + + # act + self.task.new_status="staged" + self.task.save() + + # assert + self.assertEqual(self.task.inputs, expected_inputs)