diff --git a/plugins/bc-mail/src/Model/Table/MailFieldsTable.php b/plugins/bc-mail/src/Model/Table/MailFieldsTable.php index 0517cb85ea..bf2013ad25 100755 --- a/plugins/bc-mail/src/Model/Table/MailFieldsTable.php +++ b/plugins/bc-mail/src/Model/Table/MailFieldsTable.php @@ -58,6 +58,7 @@ public function initialize(array $config): void */ public function validationDefault(Validator $validator): Validator { + $validator->setProvider('bc', 'BaserCore\Model\Validation\BcValidation'); $validator ->integer('id') ->allowEmptyString('id', null, 'create'); @@ -80,6 +81,12 @@ public function validationDefault(Validator $validator): Validator 'rule' => 'duplicateMailField', 'provider' => 'table', 'message' => __d('baser_core', '既に登録のあるフィールド名です。') + ]]) + ->add('field_name', [ + 'reserved' => [ + 'rule' => ['reserved'], + 'provider' => 'bc', + 'message' => __d('baser_core', 'システム予約名称のため利用できません。') ]]); $validator ->scalar('type') diff --git a/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php b/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php index 0950579a5a..e8b9d1e933 100755 --- a/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php +++ b/plugins/bc-mail/tests/TestCase/Model/Table/MailFieldsTableTest.php @@ -158,6 +158,35 @@ public function test_validationDefaultDuplicate() $this->assertEquals('既に登録のあるフィールド名です。', current($errors['field_name'])); } + /** + * test validationDefault reserved word check + * @dataProvider validationDefaultReservedDataProvider + */ + public function test_validationDefaultReserved($fieldName, $expected) + { + $validator = $this->MailFieldsTable->getValidator('default'); + $errors = $validator->validate([ + 'mail_content_id' => 999, + 'field_name' => $fieldName, + ]); + if ($expected) { + $this->assertArrayNotHasKey('reserved', $errors['field_name'] ?? []); + } else { + $this->assertArrayHasKey('reserved', $errors['field_name']); + $this->assertEquals('システム予約名称のため利用できません。', $errors['field_name']['reserved']); + } + } + + public static function validationDefaultReservedDataProvider() + { + return [ + ['test_field', true], + ['select', false], + ['insert', false], + ['update', false], + ]; + } + /** * コントロールソースを取得する */