Exemplo n.º 1
0
    def process(self, entity):
        """Function that defines how to process each entity in a pipeline of
        models.

        Args:
            entity: datastore_services.Model. A domain object to validate.

        Yields:
            ModelDomainObjectValidateError. Error for domain object validation.
        """
        try:
            domain_object = self._get_model_domain_object_instance(entity)  # pylint: disable=assignment-from-none
            validation_type = self._get_domain_object_validation_type(entity)
            if domain_object is None:
                return
            if validation_type == VALIDATION_MODES.neutral:
                domain_object.validate()
            elif validation_type == VALIDATION_MODES.strict:
                domain_object.validate(strict=True)
            elif validation_type == VALIDATION_MODES.non_strict:
                domain_object.validate(strict=False)
            else:
                raise Exception(
                    'Invalid validation type for domain object: %s' %
                    (validation_type))
        except Exception as e:
            yield base_validation_errors.ModelDomainObjectValidateError(
                entity, e)
Exemplo n.º 2
0
    def test_model_domain_object_validate_error(self) -> None:
        model = base_models.BaseModel(id='123',
                                      deleted=True,
                                      created_on=self.YEAR_AGO,
                                      last_updated=self.YEAR_AGO)
        error_message = 'Invalid validation type for domain object: Invalid'

        error = base_validation_errors.ModelDomainObjectValidateError(
            model, error_message)

        msg = ('ModelDomainObjectValidateError in BaseModel(id="123"): Entity'
               ' fails domain validation with the error: %s' % error_message)

        self.assertEqual(error.stderr, msg)
Exemplo n.º 3
0
    def test_error_is_raised_with_invalid_validation_type_for_domain_object(
            self):
        model = base_models.BaseModel(id='mock-123',
                                      deleted=False,
                                      created_on=self.YEAR_AGO,
                                      last_updated=self.NOW)

        output = (self.pipeline
                  | beam.Create([model])
                  | beam.ParDo(
                      MockValidateModelDomainObjectInstancesWithInvalid()))
        self.assert_pcoll_equal(output, [
            base_validation_errors.ModelDomainObjectValidateError(
                model, 'Invalid validation type for domain object: invalid')
        ])
Exemplo n.º 4
0
    def test_validation_type_for_exploration_domain_object(self) -> None:
        model_instance1 = exp_models.ExplorationModel(
            id='mock-123',
            title='title',
            category='category',
            language_code='en',
            init_state_name=feconf.DEFAULT_INIT_STATE_NAME,
            states={
                feconf.DEFAULT_INIT_STATE_NAME: (
                    state_domain.State.create_default_state(  # type: ignore[no-untyped-call]
                        feconf.DEFAULT_INIT_STATE_NAME, is_initial_state=True
                    ).to_dict()),
            },
            states_schema_version=feconf.CURRENT_STATE_SCHEMA_VERSION,
            created_on=self.YEAR_AGO,
            last_updated=self.NOW
        )

        model_instance2 = exp_models.ExplorationModel(
            id='mock-123',
            title='title',
            category='category',
            language_code='en',
            init_state_name=feconf.DEFAULT_INIT_STATE_NAME,
            states={
                feconf.DEFAULT_INIT_STATE_NAME: (
                    state_domain.State.create_default_state(  # type: ignore[no-untyped-call]
                        'end', is_initial_state=True
                    ).to_dict()),
            },
            states_schema_version=feconf.CURRENT_STATE_SCHEMA_VERSION,
            created_on=self.YEAR_AGO,
            last_updated=self.NOW
        )

        output = (
            self.pipeline
            | beam.Create([model_instance1, model_instance2])
            | beam.ParDo(MockValidateExplorationModelDomainObjectInstances())
        )

        self.assert_pcoll_equal(output, [
            base_validation_errors.ModelDomainObjectValidateError(
                model_instance2, 'The destination end is not a valid state.')
        ])