Exemple #1
0
    def test_sample_relationship_issue(self):
        """Testing an error with related alias. Not sure if it can happen or
        not"""

        # get record from sample
        record = self.sample_record

        # change alias in relationship in order to have no a related obj
        record["sampleRelationships"] = [{
            "alias": "IMAGEA999999999",
            "relationshipNature": "derived from"
        }]

        # create a fake ValidationResultRecord
        record_result = ValidationResultRecord(record_id=record['title'])

        # check relationship method
        related, result = self.metadata.check_relationship(
            record, record_result)

        # this is an error in results
        self.assertEqual(related, [])
        self.assertEqual(result.get_overall_status(), 'Error')
        self.assertIn("Could not locate the referenced record",
                      result.get_messages()[0])
Exemple #2
0
    def check_biosample_id(self, mock_get, status_code):
        """Base method for checking biosample id"""

        # paching response
        response = Mock()
        response.status_code = status_code
        mock_get.return_value = response

        # create a fake ValidationResultRecord
        record_result = ValidationResultRecord(record_id="test")

        # get a metadata object
        metadata = MetaDataValidation()

        # check biosample object
        record_result = metadata.check_biosample_id_target(
            "FAKEA123456", "test", record_result)

        # assert my methods called
        self.assertTrue(self.check_ruleset.called)
        self.assertTrue(self.read_in_ruleset.called)
        self.assertTrue(mock_get.called)

        return record_result
Exemple #3
0
    def test_validate_submission_errors(self, my_validate, my_check):
        """A submission with errors is a NEED_REVISION submission"""

        # setting check_usi_structure result. now is a ValidateResultRecord
        result = PickableMock()
        result.get_overall_status.return_value = "Pass"
        result.get_messages.return_value = []
        my_check.return_value = result

        # setting a return value for check_with_ruleset
        result1 = ValidationResultRecord("animal_1")
        result1.add_validation_result_column(
            ValidationResultColumn("warning", "warn message", "animal_1",
                                   "warn column"))

        result2 = ValidationResultRecord("animal_2")
        result2.add_validation_result_column(
            ValidationResultColumn("pass", "a message", "animal_2", ""))

        result3 = ValidationResultRecord("animal_3")
        result3.add_validation_result_column(
            ValidationResultColumn("pass", "a message", "animal_3", ""))

        result4 = ValidationResultRecord("sample_1")
        result4.add_validation_result_column(
            ValidationResultColumn("error", "error message", "sample_1",
                                   "error column"))

        # add results to result set
        responses = [result1, result2, result3, result4]
        my_validate.side_effect = responses

        # call task
        res = self.my_task.run(submission_id=self.submission_id)

        # assert a success with validation taks
        self.assertEqual(res, "success")

        # check submission status and message
        self.submission.refresh_from_db()

        # check submission.state changed
        self.assertEqual(self.submission.status, NEED_REVISION)
        self.assertIn("Error in metadata", self.submission.message)

        # check Animal (they are all ok)
        self.check_model_status(self.animal_qs, responses, READY)

        # sample has need revision
        self.check_model_status(self.sample_qs,
                                responses[self.animal_qs.count():],
                                NEED_REVISION)

        # test for my methods called
        self.assertTrue(my_check.called)
        self.assertTrue(my_validate.called)

        # asserting my mock objects
        self.assertTrue(self.read_in_ruleset.called)
        self.assertTrue(self.check_ruleset.called)
        self.assertFalse(self.validate_retry.called)

        self.check_message(
            message='Need Revision',
            notification_message=('Validation got errors: Error in '
                                  'metadata. Need revisions before submit'),
            validation_message={
                'animals': self.n_animals,
                'samples': self.n_samples,
                'animal_unkn': 0,
                'sample_unkn': 0,
                'animal_issues': 0,
                'sample_issues': 1
            },
            pk=1)
Exemple #4
0
    def test_validate_submission_wrong_json(self, my_validate, my_check):
        """Test an error in JSON format"""

        # setting check_usi_structure result. now is a ValidateResultRecord
        messages = [('Wrong JSON structure: no title field for record with '
                     'alias as animal_1'),
                    ('Wrong JSON structure: the values for attribute Person '
                     'role needs to be in an array for record animal_1')]

        usi_result = ValidationResultRecord("animal_1")
        usi_result.add_validation_result_column(
            ValidationResultColumn("error", messages[0], "animal_1", ""))
        usi_result.add_validation_result_column(
            ValidationResultColumn("error", messages[1], "animal_1", ""))

        # track 4 object to call check_model_status
        responses = [usi_result] * 4
        my_check.side_effect = responses

        # setting a return value for check_with_ruleset
        rule_result = Mock()
        rule_result.get_overall_status.return_value = "Pass"
        my_validate.return_value = rule_result

        # call task
        res = self.my_task.run(submission_id=self.submission_id)

        # assert a success with validation taks
        self.assertEqual(res, "success")

        # check submission status and message
        self.submission.refresh_from_db()

        # check submission.state changed
        self.assertEqual(self.submission.status, NEED_REVISION)
        self.assertIn("Validation got errors", self.submission.message)

        # Animals and samples have issues
        self.check_model_status(self.animal_qs, responses, NEED_REVISION)

        # sample has need revision
        self.check_model_status(self.sample_qs,
                                responses[self.animal_qs.count():],
                                NEED_REVISION)

        # if JSON is not valid, I don't check for ruleset
        self.assertTrue(my_check.called)
        self.assertFalse(my_validate.called)

        # asserting my mock objects
        self.assertTrue(self.read_in_ruleset.called)
        self.assertTrue(self.check_ruleset.called)
        self.assertFalse(self.validate_retry.called)

        # all sample and animals have issues
        self.check_message(
            'Need Revision', ('Validation got errors: Error in metadata. '
                              'Need revisions before submit'), {
                                  'animals': self.n_animals,
                                  'samples': self.n_samples,
                                  'animal_unkn': 0,
                                  'sample_unkn': 0,
                                  'animal_issues': self.n_animals,
                                  'sample_issues': self.n_samples
                              }, 1)