class ModelRemoveTest(unittest.TestCase): def setUp(self): self.experiment1 = Experiment(orig_study_id=1) self.experiment2 = Experiment(orig_study_id=2) self.experiment3 = Experiment(orig_study_id=3) self.subject1 = Subject(orig_subject_id=1) self.subject2 = Subject(orig_subject_id=2) self.sample1 = Sample(orig_sample_id=1) self.sample2 = Sample(orig_sample_id=2) self.sample3 = Sample(orig_sample_id=3) self.sample4 = Sample(orig_sample_id=4) # TODO: Delete? # Set up relationships self.subject1._samples = {self.sample1, self.sample2} self.subject2._samples = {self.sample3} self.sample1._subject = self.subject1 self.sample2._subject = self.subject1 self.sample3._subject = self.subject2 self.experiment1._samples = {self.sample1, self.sample2} self.experiment1._subjects = {self.subject1} self.experiment2._samples = {self.sample1} self.experiment2._subjects = {self.subject1} self.experiment3._samples = {self.sample1, self.sample3} self.experiment3._subjects = {self.subject1, self.subject2} self.subject1._experiments = { self.experiment1, self.experiment2, self.experiment3 } self.subject2._experiments = {self.experiment3} self.sample1._experiments = { self.experiment1, self.experiment2, self.experiment3 } self.sample2._experiments = {self.experiment1} self.sample3._experiments = {self.experiment3} def tearDown(self): del self.experiment1 del self.experiment2 del self.experiment3 del self.subject1 del self.subject2 del self.sample1 del self.sample2 del self.sample3 del self.sample4 def test_remove_subject_from_experiment(self): # Attributes that should change expected_subject1_experiments = {self.experiment2, self.experiment3} expected_experiment1_subjects = set() expected_experiment1_samples = set() expected_sample1_experiments = {self.experiment2, self.experiment3} expected_sample2_experiments = set() # Attributes that should not be affected expected_subject2_experiments = self.subject2.experiments expected_experiment2_subjects = self.experiment2.subjects expected_experiment3_subjects = self.experiment3.subjects expected_experiment2_samples = self.experiment2.samples expected_experiment3_samples = self.experiment3.samples expected_sample3_experiments = self.sample3.experiments # Call the function self.experiment1.remove_subject(self.subject1) # Check self.assertEqual(self.subject1.experiments, expected_subject1_experiments) self.assertEqual(self.experiment1.subjects, expected_experiment1_subjects) self.assertEqual(self.experiment1.samples, expected_experiment1_samples) self.assertEqual(self.sample1.experiments, expected_sample1_experiments) self.assertEqual(self.sample2.experiments, expected_sample2_experiments) self.assertEqual(self.subject2.experiments, expected_subject2_experiments) self.assertEqual(self.experiment2.subjects, expected_experiment2_subjects) self.assertEqual(self.experiment3.subjects, expected_experiment3_subjects) self.assertEqual(self.experiment2.samples, expected_experiment2_samples) self.assertEqual(self.experiment3.samples, expected_experiment3_samples) self.assertEqual(self.sample3.experiments, expected_sample3_experiments) def test_remove_experiment_from_subject(self): # Attributes that should change expected_subject1_experiments = {self.experiment2, self.experiment3} expected_experiment1_subjects = set() expected_experiment1_samples = set() expected_sample1_experiments = {self.experiment2, self.experiment3} expected_sample2_experiments = set() # Attributes that should not be affected expected_subject2_experiments = self.subject2.experiments expected_experiment2_subjects = self.experiment2.subjects expected_experiment3_subjects = self.experiment3.subjects expected_experiment2_samples = self.experiment2.samples expected_experiment3_samples = self.experiment3.samples expected_sample3_experiments = self.sample3.experiments # Call the function self.subject1.remove_experiment(self.experiment1) # Check self.assertEqual(self.subject1.experiments, expected_subject1_experiments) self.assertEqual(self.experiment1.subjects, expected_experiment1_subjects) self.assertEqual(self.experiment1.samples, expected_experiment1_samples) self.assertEqual(self.sample1.experiments, expected_sample1_experiments) self.assertEqual(self.sample2.experiments, expected_sample2_experiments) self.assertEqual(self.subject2.experiments, expected_subject2_experiments) self.assertEqual(self.experiment2.subjects, expected_experiment2_subjects) self.assertEqual(self.experiment3.subjects, expected_experiment3_subjects) self.assertEqual(self.experiment2.samples, expected_experiment2_samples) self.assertEqual(self.experiment3.samples, expected_experiment3_samples) self.assertEqual(self.sample3.experiments, expected_sample3_experiments) def test_remove_sample_from_experiment(self): # Attributes that should change expected_experiment1_samples = {self.sample2} expected_sample1_experiments = {self.experiment2, self.experiment3} # Attributes that should not be affected expected_subject1_experiments = { self.experiment1, self.experiment2, self.experiment3 } expected_subject2_experiments = self.subject2.experiments expected_experiment1_subjects = {self.subject1} expected_experiment2_subjects = self.experiment2.subjects expected_experiment3_subjects = self.experiment3.subjects expected_experiment2_samples = self.experiment2.samples expected_experiment3_samples = self.experiment3.samples expected_sample2_experiments = {self.experiment1} expected_sample3_experiments = self.sample3.experiments # Call the function self.experiment1.remove_sample(self.sample1) # Check self.assertEqual(self.subject1.experiments, expected_subject1_experiments) self.assertEqual(self.experiment1.subjects, expected_experiment1_subjects) self.assertEqual(self.experiment1.samples, expected_experiment1_samples) self.assertEqual(self.sample1.experiments, expected_sample1_experiments) self.assertEqual(self.sample2.experiments, expected_sample2_experiments) self.assertEqual(self.subject2.experiments, expected_subject2_experiments) self.assertEqual(self.experiment2.subjects, expected_experiment2_subjects) self.assertEqual(self.experiment3.subjects, expected_experiment3_subjects) self.assertEqual(self.experiment2.samples, expected_experiment2_samples) self.assertEqual(self.experiment3.samples, expected_experiment3_samples) self.assertEqual(self.sample3.experiments, expected_sample3_experiments) def test_remove_experiment_from_sample(self): # Attributes that should change expected_experiment1_samples = {self.sample2} expected_sample1_experiments = {self.experiment2, self.experiment3} # Attributes that should not be affected expected_subject1_experiments = { self.experiment1, self.experiment2, self.experiment3 } expected_subject2_experiments = self.subject2.experiments expected_experiment1_subjects = {self.subject1} expected_experiment2_subjects = self.experiment2.subjects expected_experiment3_subjects = self.experiment3.subjects expected_experiment2_samples = self.experiment2.samples expected_experiment3_samples = self.experiment3.samples expected_sample2_experiments = {self.experiment1} expected_sample3_experiments = self.sample3.experiments # Call the function self.sample1.remove_experiment(self.experiment1) # Check self.assertEqual(self.subject1.experiments, expected_subject1_experiments) self.assertEqual(self.experiment1.subjects, expected_experiment1_subjects) self.assertEqual(self.experiment1.samples, expected_experiment1_samples) self.assertEqual(self.sample1.experiments, expected_sample1_experiments) self.assertEqual(self.sample2.experiments, expected_sample2_experiments) self.assertEqual(self.subject2.experiments, expected_subject2_experiments) self.assertEqual(self.experiment2.subjects, expected_experiment2_subjects) self.assertEqual(self.experiment3.subjects, expected_experiment3_subjects) self.assertEqual(self.experiment2.samples, expected_experiment2_samples) self.assertEqual(self.experiment3.samples, expected_experiment3_samples) self.assertEqual(self.sample3.experiments, expected_sample3_experiments) def test_remove_sample_from_subject(self): # Attributes that should change expected_subject1_samples = {self.sample2} expected_experiment1_samples = {self.sample2} expected_sample1_subject = None expected_sample1_experiments = set() expected_experiment3_samples = {self.sample3} expected_experiment3_subjects = {self.subject2} expected_experiment2_samples = set() expected_experiment2_subjects = set() # Attributes that should not be affected expected_subject1_experiments = self.subject1.experiments expected_subject2_experiments = self.subject2.experiments expected_experiment1_subjects = self.experiment1.subjects expected_sample2_experiments = self.sample2.experiments expected_sample3_experiments = self.sample3.experiments # Call the function self.subject1.remove_sample(self.sample1) # Check self.assertEqual(self.subject1.samples, expected_subject1_samples) self.assertEqual(self.sample1.subject, expected_sample1_subject) self.assertEqual(self.subject1.experiments, expected_subject1_experiments) self.assertEqual(self.experiment1.subjects, expected_experiment1_subjects) self.assertEqual(self.experiment1.samples, expected_experiment1_samples) self.assertEqual(self.sample1.experiments, expected_sample1_experiments) self.assertEqual(self.sample2.experiments, expected_sample2_experiments) self.assertEqual(self.subject2.experiments, expected_subject2_experiments) self.assertEqual(self.experiment2.subjects, expected_experiment2_subjects) self.assertEqual(self.experiment3.subjects, expected_experiment3_subjects) self.assertEqual(self.experiment2.samples, expected_experiment2_samples) self.assertEqual(self.experiment3.samples, expected_experiment3_samples) self.assertEqual(self.sample3.experiments, expected_sample3_experiments) def test_remove_subject_from_sample(self): # Attributes that should change expected_subject1_samples = {self.sample2} expected_experiment1_samples = {self.sample2} expected_sample1_subject = None expected_sample1_experiments = set() expected_experiment3_samples = {self.sample3} expected_experiment3_subjects = {self.subject2} expected_experiment2_samples = set() expected_experiment2_subjects = set() # Attributes that should not be affected expected_subject1_experiments = self.subject1.experiments expected_subject2_experiments = self.subject2.experiments expected_experiment1_subjects = self.experiment1.subjects expected_sample2_experiments = self.sample2.experiments expected_sample3_experiments = self.sample3.experiments # Call the function del self.sample1.subject # TODO What about self.sample1.subject = None? # Check self.assertEqual(self.subject1.samples, expected_subject1_samples) self.assertEqual(self.sample1.subject, expected_sample1_subject) self.assertEqual(self.subject1.experiments, expected_subject1_experiments) self.assertEqual(self.experiment1.subjects, expected_experiment1_subjects) self.assertEqual(self.experiment1.samples, expected_experiment1_samples) self.assertEqual(self.sample1.experiments, expected_sample1_experiments) self.assertEqual(self.sample2.experiments, expected_sample2_experiments) self.assertEqual(self.subject2.experiments, expected_subject2_experiments) self.assertEqual(self.experiment2.subjects, expected_experiment2_subjects) self.assertEqual(self.experiment3.subjects, expected_experiment3_subjects) self.assertEqual(self.experiment2.samples, expected_experiment2_samples) self.assertEqual(self.experiment3.samples, expected_experiment3_samples) self.assertEqual(self.sample3.experiments, expected_sample3_experiments)