diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql index 8e6515d82348ac72847c1e411e22e98721f30615..e8389aeea5d35fe4362529e576e6c3dacf847f90 100644 --- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql +++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/radb/sql/add_functions_and_triggers.sql @@ -634,6 +634,16 @@ BEGIN IF NEW.status_id = claim_claimed_status_id AND OLD.claim_size <> NEW.claim_size THEN RAISE EXCEPTION 'cannot update claim size on claimed claim; old:% new:%', OLD, NEW; END IF; + + -- bounce any task_id updates + IF OLD.task_id <> NEW.task_id THEN + RAISE EXCEPTION 'cannot change the task to which a claim belongs; old:% new:%', OLD, NEW; + END IF; + + -- bounce any resource_id updates + IF OLD.resource_id <> NEW.resource_id THEN + RAISE EXCEPTION 'cannot change the resource to which a claim belongs; old:% new:%', OLD, NEW; + END IF; END IF; --only check claim if status and/or claim_size and/or start/end time changed diff --git a/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/t_radb.py b/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/t_radb.py index d4307e04c4e7d5434aad91174308b9bc38750bb1..156a34b6802b04833e74b1c2c70d86ab83c44d3b 100755 --- a/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/t_radb.py +++ b/SAS/ResourceAssignment/ResourceAssignmentDatabase/tests/t_radb.py @@ -1119,6 +1119,13 @@ class ResourceAssignmentDatabaseTest(unittest.TestCase): self.assertEqual(set([task_id1]), set(t['id'] for t in self.radb.get_conflicting_overlapping_tasks(t2_claim_ids[0]))) + #try to connect this claim to task1, should fail + self.assertFalse(self.radb.updateResourceClaims(t2_claim_ids, task_id=task_id1)) + self.assertEqual(task_id2, t2_claims[0]['task_id']) + + #try to connect this claim to other resource, should fail + self.assertFalse(self.radb.updateResourceClaims(t2_claim_ids, resource_id=118)) + self.assertEqual(117, t2_claims[0]['resource_id']) # try to update the task status to scheduled, should not succeed, since it's claims are not 'claimed' yet. self.assertFalse(self.radb.updateTask(task_id2, task_status='scheduled'))