class ModelAddTest(unittest.TestCase): def setUp(self): self.experiment1 = Experiment() 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) # 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 def tearDown(self): del self.experiment1 del self.subject1 del self.subject2 del self.sample1 del self.sample2 del self.sample3 del self.sample4 def test_add_subject_to_experiment(self): # Attributes that should change expected_subject_experiments = {self.experiment1} expected_experiment_subjects = {self.subject1} expected_experiment_samples = {self.sample1, self.sample2} expected_sample_experiments = {self.experiment1} # Call the function self.experiment1.add_subject(self.subject1) # Check self.assertEqual(self.subject1.experiments, expected_subject_experiments) self.assertEqual(self.subject2.experiments, set()) self.assertEqual(self.experiment1.subjects, expected_experiment_subjects) self.assertEqual(self.experiment1.samples, expected_experiment_samples) self.assertEqual(self.sample1.experiments, expected_sample_experiments) self.assertEqual(self.sample2.experiments, expected_sample_experiments) def test_add_experiment_to_subject(self): # Attributes that should change expected_subject_experiments = {self.experiment1} expected_experiment_subjects = {self.subject1} expected_experiment_samples = {self.sample1, self.sample2} expected_sample_experiments = {self.experiment1} # Call the function self.subject1.add_experiment(self.experiment1) # Check self.assertEqual(self.subject1.experiments, expected_subject_experiments) self.assertEqual(self.subject2.experiments, set()) self.assertEqual(self.experiment1.subjects, expected_experiment_subjects) self.assertEqual(self.experiment1.samples, expected_experiment_samples) self.assertEqual(self.sample1.experiments, expected_sample_experiments) self.assertEqual(self.sample2.experiments, expected_sample_experiments) def test_add_sample_to_experiment(self): # Attributes that should change expected_subject_experiments = {self.experiment1} expected_experiment_subjects = {self.subject1} expected_experiment_samples = {self.sample1} expected_sample_experiments = {self.experiment1} # Call the function self.experiment1.add_sample(self.sample1) # Check self.assertEqual(self.subject1.experiments, expected_subject_experiments) self.assertEqual(self.subject2.experiments, set()) self.assertEqual(self.experiment1.subjects, expected_experiment_subjects) self.assertEqual(self.experiment1.samples, expected_experiment_samples) self.assertEqual(self.sample1.experiments, expected_sample_experiments) self.assertEqual(self.sample2.experiments, set()) def test_add_experiment_to_sample(self): # Attributes that should change expected_subject_experiments = {self.experiment1} expected_experiment_subjects = {self.subject1} expected_experiment_samples = {self.sample1} expected_sample_experiments = {self.experiment1} # Call the function self.sample1.add_experiment(self.experiment1) # Check self.assertEqual(self.subject1.experiments, expected_subject_experiments) self.assertEqual(self.subject2.experiments, set()) self.assertEqual(self.experiment1.subjects, expected_experiment_subjects) self.assertEqual(self.experiment1.samples, expected_experiment_samples) self.assertEqual(self.sample1.experiments, expected_sample_experiments) self.assertEqual(self.sample2.experiments, set()) # Where the subject is not linked to any experiment def test_add_sample_to_subject(self): # Attributes that should change expected_sample_subject = self.subject1 expected_subject_samples = {self.sample1, self.sample2, self.sample4} # Call the function self.subject1.add_sample(self.sample4) self.assertEqual(self.subject1.samples, expected_subject_samples) self.assertEqual(self.sample4.subject, expected_sample_subject) # Attributes that should not be affected self.assertEqual(self.subject2.samples, {self.sample3}) self.assertEqual(self.subject1.experiments, set()) self.assertEqual(self.subject2.experiments, set()) self.assertEqual(self.experiment1.subjects, set()) self.assertEqual(self.experiment1.samples, set()) self.assertEqual(self.sample1.experiments, set()) self.assertEqual(self.sample2.experiments, set()) self.assertEqual(self.sample1.subject, self.subject1) self.assertEqual(self.sample3.subject, self.subject2) # Where the subject is not linked to any experiment def test_add_subject_to_sample(self): # Attributes that should change expected_sample_subject = self.subject1 expected_subject_samples = {self.sample1, self.sample2, self.sample4} # Call the function (perform assignment) self.sample4.subject = self.subject1 self.assertEqual(self.subject1.samples, expected_subject_samples) self.assertEqual(self.sample4.subject, expected_sample_subject) # Attributes that should not be affected self.assertEqual(self.subject2.samples, {self.sample3}) self.assertEqual(self.subject1.experiments, set()) self.assertEqual(self.subject2.experiments, set()) self.assertEqual(self.experiment1.subjects, set()) self.assertEqual(self.experiment1.samples, set()) self.assertEqual(self.sample1.experiments, set()) self.assertEqual(self.sample2.experiments, set()) self.assertEqual(self.sample1.subject, self.subject1) self.assertEqual(self.sample3.subject, self.subject2)