I have a custom content entity and some custom validations in the entity form validateForm
method.
Now I "just" want to test my implementation of the validateForm
method (or for the start I just want to test for the correct form id, but even this fails).
Mocking my own custom entity is the main problem I have at the moment.
Here are some code examples and my error message
This is my custom validateForm method:
public function validateForm(array &$form, FormStateInterface $form_state): ContentEntityInterface {
$simpleField = $form_state->getValue('field_simplefield')[0]['value'];
if (preg_match('/^simpleRegEx$/', $simpleField)) {a
$form_state->setErrorByName('field_simplefield', $this->t('Not valid'));
}
return parent::validateForm($form, $form_state);
}
And this is my test:
// Test that the correct form ID is returned
public function testFormId() {
$container = new ContainerBuilder();
$entityRepository = $this->prophesize(EntityRepositoryInterface::class);
$container->set('entity.repository', $entityRepository->reveal());
$entityTypeBundleInfo = $this->prophesize(EntityTypeBundleInfoInterface::class);
$container->set('entity_type.bundle.info', $entityTypeBundleInfo->reveal());
$time = $this->prophesize(Time::class);
$container->set('datetime.time', $time->reveal());
$form = new CustomEntityForm($entityRepository->reveal(), $entityTypeBundleInfo->reveal(), $time->reveal());
$this->assertEquals('module_name_settings_form', $form->getFormId());
}
It fails with error:
Error : Call to a member function getEntityTypeId() on null
path/web/core/lib/Drupal/Core/Entity/EntityForm.php:79
path/web/profiles/contrib/a_profile/modules/emp_customentity/tests/src/Unit/CustomEntityFormTest.php:59
path/vendor/phpunit/phpunit/src/Framework/TestResult.php:726
path/vendor/phpunit/phpunit/src/Framework/TestSuite.php:677
path/vendor/phpunit/phpunit/src/Framework/TestSuite.php:677
path/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:673
path/vendor/phpunit/phpunit/src/TextUI/Command.php:143
path/vendor/phpunit/phpunit/src/TextUI/Command.php:96
Is there a rather easy way to do this or do I have to mock all the necessary services (entity.repository
, entity_type.bundle.info
, datetime.time
) AND my own entity to call the function validateForm
in my test?
And then if this is solved, how the heck do I test the validateForm method?