示例#1
0
    def process(self, entity):
        """Validates schema of commit commands in commit_cmds dict.

        Args:
            entity: datastore_services.Model. Entity to validate.

        Yields:
            CommitCmdsNoneError. Error for invalid commit cmds id.
            CommitCmdsValidateError. Error for wrong commit cmds.
        """
        change_domain_object = self._get_change_domain_class(entity)
        if change_domain_object is None:
            # This is for cases where id of the entity is invalid
            # and no commit command domain object is found for the entity.
            # For example, if a CollectionCommitLogEntryModel does
            # not have id starting with collection/rights, there is
            # no commit command domain object defined for this model.
            yield base_validation_errors.CommitCmdsNoneError(entity)
            return
        for commit_cmd_dict in entity.commit_cmds:
            if not commit_cmd_dict:
                continue
            try:
                change_domain_object(commit_cmd_dict)
            except Exception as e:
                yield base_validation_errors.CommitCmdsValidateError(
                    entity, commit_cmd_dict, e)
示例#2
0
    def test_raises_commit_cmd_none_error(self) -> None:
        invalid_commit_cmd_model = (
            subtopic_models.SubtopicPageCommitLogEntryModel(
                id='model_id123',
                created_on=self.YEAR_AGO,
                last_updated=self.NOW,
                commit_type='test-type',
                user_id='',
                subtopic_page_id='123',
                post_commit_status='private',
                commit_cmds=[{
                    'cmd':
                    base_models.VersionedModel.CMD_DELETE_COMMIT
                }]))

        output = (
            self.pipeline
            | beam.Create([invalid_commit_cmd_model])
            | beam.ParDo(
                subtopic_validation.ValidateSubtopicPageCommitLogEntryModel()))

        self.assert_pcoll_equal(output, [
            base_validation_errors.CommitCmdsNoneError(
                invalid_commit_cmd_model)
        ])
示例#3
0
    def process(
        self, entity: ModelInstanceType
    ) -> Iterator[Union[base_validation_errors.CommitCmdsNoneError,
                        base_validation_errors.CommitCmdsValidateError]]:
        """Validates schema of commit commands in commit_cmds dict.

        Args:
            entity: datastore_services.Model. Entity to validate.

        Yields:
            CommitCmdsNoneError. Error for invalid commit cmds id.
            CommitCmdsValidateError. Error for wrong commit cmds.
        """
        change_domain_object = self._get_change_domain_class(entity)
        if change_domain_object is None:
            # This is for cases where id of the entity is invalid
            # and no commit command domain object is found for the entity.
            # For example, if a CollectionCommitLogEntryModel does
            # not have id starting with collection/rights, there is
            # no commit command domain object defined for this model.
            yield base_validation_errors.CommitCmdsNoneError(entity)
            return
        # Ruling out the possibility of any other model instance for mypy type
        # checking.
        assert isinstance(entity, (base_models.BaseSnapshotMetadataModel,
                                   base_models.BaseCommitLogEntryModel))
        for commit_cmd_dict in entity.commit_cmds:
            if not commit_cmd_dict:
                continue
            try:
                change_domain_object(commit_cmd_dict)
            except Exception as e:
                yield base_validation_errors.CommitCmdsValidateError(
                    entity, commit_cmd_dict, str(e))
示例#4
0
    def test_message(self) -> None:
        model = base_models.BaseCommitLogEntryModel(id='invalid',
                                                    created_on=self.YEAR_AGO,
                                                    last_updated=self.NOW,
                                                    commit_type='test',
                                                    user_id='',
                                                    post_commit_status='',
                                                    commit_cmds=[{}])
        error = base_validation_errors.CommitCmdsNoneError(model)

        self.assertEqual(
            error.stderr,
            'CommitCmdsNoneError in BaseCommitLogEntryModel(id="invalid"): '
            'No commit command domain object '
            'defined for entity with commands: [{}]')
    def test_validate_none_commit(self):
        invalid_commit_cmd_model = base_models.BaseCommitLogEntryModel(
            id='invalid',
            created_on=self.YEAR_AGO,
            last_updated=self.NOW,
            commit_type='test',
            user_id='',
            post_commit_status='',
            commit_cmds=[{}])

        output = (self.pipeline
                  | beam.Create([invalid_commit_cmd_model])
                  | beam.ParDo(MockValidateCommitCmdsSchemaChangeDomain()))

        self.assert_pcoll_equal(output, [
            base_validation_errors.CommitCmdsNoneError(
                invalid_commit_cmd_model)
        ])
    def test_raises_commit_cmd_none_error(self) -> None:
        invalid_commit_cmd_model = skill_models.SkillCommitLogEntryModel(
            id='model_id123',
            created_on=self.YEAR_AGO,
            last_updated=self.NOW,
            skill_id='skill-id',
            user_id='user-id',
            commit_type='test-type',
            post_commit_status='private',
            commit_cmds=[{
                'cmd': 'create_new'
            }])

        output = (self.pipeline
                  | beam.Create([invalid_commit_cmd_model])
                  | beam.ParDo(
                      skill_validation.ValidateSkillCommitLogEntryModel()))

        self.assert_pcoll_equal(output, [
            base_validation_errors.CommitCmdsNoneError(
                invalid_commit_cmd_model)
        ])