コード例 #1
0
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)