def test_base_validation(self): base_model_with_invalid_id = self.create_model( base_models.BaseModel, id='123@?!*', deleted=False) base_model_with_invalid_timestamps = self.create_model( base_models.BaseModel, id='124', deleted=False, created_on=self.NOW, last_updated=self.YEAR_LATER) base_model_with_inconsistent_timestamps = self.create_model( base_models.BaseModel, id='125', deleted=False, created_on=self.YEAR_LATER, last_updated=self.YEAR_AGO) expired_base_model = self.create_model( base_models.BaseModel, id='126', deleted=True) valid_base_model = self.create_model( base_models.BaseModel, id='127', deleted=False) self.put_multi([ base_model_with_invalid_id, base_model_with_invalid_timestamps, base_model_with_inconsistent_timestamps, expired_base_model, valid_base_model, ]) self.assert_job_output_is([ base_validation_errors.ModelIdRegexError( base_model_with_invalid_id, base_validation.BASE_MODEL_ID_PATTERN), base_validation_errors.ModelMutatedDuringJobError( base_model_with_invalid_timestamps), base_validation_errors.InconsistentTimestampsError( base_model_with_inconsistent_timestamps), base_validation_errors.ModelExpiredError(expired_base_model), ])
def test_message(self): model = base_models.BaseModel(id='?!"', created_on=self.YEAR_AGO, last_updated=self.NOW) error = base_validation_errors.ModelIdRegexError(model, '[abc]{3}') self.assertEqual( error.message, 'ModelIdRegexError in BaseModel(id=\'?!"\'): id does not ' 'match the expected regex=u\'[abc]{3}\'')
def test_validate_model_id(self): invalid_id_model = base_models.BaseModel(id='123@?!*', created_on=self.YEAR_AGO, last_updated=self.NOW) output = (self.pipeline | beam.Create([invalid_id_model]) | beam.ParDo(base_validation.ValidateBaseModelId())) self.assert_pcoll_equal(output, [ base_validation_errors.ModelIdRegexError( invalid_id_model, base_validation.BASE_MODEL_ID_PATTERN), ])
def test_reports_error_for_invalid_id(self): model_with_invalid_id = auth_models.FirebaseSeedModel( id='2', created_on=self.NOW, last_updated=self.NOW) output = (self.pipeline | beam.Create([model_with_invalid_id]) | beam.ParDo(auth_validation.ValidateFirebaseSeedModelId())) self.assert_pcoll_equal(output, [ base_validation_errors.ModelIdRegexError( model_with_invalid_id, auth_models.ONLY_FIREBASE_SEED_MODEL_ID), ])
def test_process_reports_error_for_invalid_uid(self): model_with_invalid_id = user_models.UserSettingsModel( id='123', email='*****@*****.**', created_on=self.NOW, last_updated=self.NOW) output = (self.pipeline | beam.Create([model_with_invalid_id]) | beam.ParDo(user_validation.ValidateModelWithUserId())) self.assert_pcoll_equal(output, [ base_validation_errors.ModelIdRegexError(model_with_invalid_id, feconf.USER_ID_REGEX), ])
def test_reports_error_for_invalid_id(self): model_with_invalid_id = auth_models.UserIdByFirebaseAuthIdModel( id='-!\'"', user_id='1', created_on=self.NOW, last_updated=self.NOW) output = ( self.pipeline | beam.Create([model_with_invalid_id]) | beam.ParDo( auth_validation.ValidateUserIdByFirebaseAuthIdModelId()) ) self.assert_pcoll_equal(output, [ base_validation_errors.ModelIdRegexError( model_with_invalid_id, feconf.FIREBASE_AUTH_ID_REGEX), ])
def process(self, input_model): """Function that defines how to process each element in a pipeline of models. Args: input_model: datastore_services.Model. Entity to validate. Yields: ModelIdRegexError. An error class for models with invalid IDs. """ model = job_utils.clone_model(input_model) if not re.match(self._pattern, model.id): yield base_validation_errors.ModelIdRegexError( model, self._pattern)
def process(self, entity): """Function that defines how to process each entity in a pipeline of models. Args: entity: datastore_services.Model. Entity to validate. Yields: ModelIdRegexError. An error class for models with invalid IDs. """ cloned_entity = job_utils.clone_model(entity) if not re.match(self._pattern, cloned_entity.id): yield base_validation_errors.ModelIdRegexError( cloned_entity, self._pattern)
def test_user_audits(self): user_settings_model_with_invalid_id = self.create_model( user_models.UserSettingsModel, id='128', email='*****@*****.**') user_settings_model_with_valid_id = self.create_model( user_models.UserSettingsModel, id=self.VALID_USER_ID, email='*****@*****.**') self.put_multi([ user_settings_model_with_invalid_id, user_settings_model_with_valid_id, ]) self.assert_job_output_is([ base_validation_errors.ModelIdRegexError( user_settings_model_with_invalid_id, feconf.USER_ID_REGEX), ])