saveEntityCallCount; } }; $emailModel = $this->getEmailModel($emailRepository); $grapesJsBuilderRepository = new class() extends GrapesJsBuilderRepository { public int $saveEntityCallCount = 0; public function __construct() { } public function findOneBy(array $criteria, ?array $orderBy = null) { return null; } public function saveEntity($entity, $flush = true): void { ++$this->saveEntityCallCount; } }; $entityManager = new class($grapesJsBuilderRepository) extends EntityManager { public function __construct( private GrapesJsBuilderRepository $grapesJsBuilderRepository ) { } public function getRepository($entityName) { Assert::assertSame(GrapesJsBuilder::class, $entityName); return $this->grapesJsBuilderRepository; // @phpstan-ignore-line } }; $email = new Email(); $grapeJsBuilderModel = new GrapesJsBuilderModel( $requestStack, $emailModel, $entityManager, $this->createMock(CorePermissions::class), $this->createMock(EventDispatcherInterface::class), $this->createMock(Router::class), $this->getTranslator(), $this->createMock(UserHelper::class), $this->createMock(LoggerInterface::class), $this->createMock(CoreParametersHelper::class) ); $grapeJsBuilderModel->addOrEditEntity($email); // Not a GrapeJs email, so we are not saving anything. Assert::assertSame(0, $grapesJsBuilderRepository->saveEntityCallCount); Assert::assertSame(0, $emailRepository->saveEntityCallCount); } public function testAddOrEditEntityWithoutMatchingEntityAndGrapeRequestQuery(): void { $requestStack = new class() extends RequestStack { public function __construct() { } public function getCurrentRequest() { return new Request( [], [ 'grapesjsbuilder' => [ 'customMjml' => '', ], 'emailform' => [ 'customHtml' => '', ], ] ); } }; $emailRepository = new class() extends EmailRepository { public int $saveEntityCallCount = 0; public function __construct() { } /** * @param Email $entity */ public function saveEntity($entity, $flush = true): void { ++$this->saveEntityCallCount; Assert::assertSame('', $entity->getCustomHtml()); } }; $emailModel = $this->getEmailModel($emailRepository); $grapesJsBuilderRepository = new class() extends GrapesJsBuilderRepository { public int $saveEntityCallCount = 0; public function __construct() { } public function findOneBy(array $criteria, ?array $orderBy = null) { return null; } /** * @param GrapesJsBuilder $entity */ public function saveEntity($entity, $flush = true): void { ++$this->saveEntityCallCount; Assert::assertSame('', $entity->getCustomMjml()); } }; $entityManager = new class($grapesJsBuilderRepository) extends EntityManager { public function __construct( private GrapesJsBuilderRepository $grapesJsBuilderRepository ) { } public function getRepository($entityName) { Assert::assertSame(GrapesJsBuilder::class, $entityName); return $this->grapesJsBuilderRepository; // @phpstan-ignore-line } }; $email = new Email(); $grapeJsBuilderModel = new GrapesJsBuilderModel( $requestStack, $emailModel, $entityManager, $this->createMock(CorePermissions::class), $this->createMock(EventDispatcherInterface::class), $this->createMock(Router::class), $this->getTranslator(), $this->createMock(UserHelper::class), $this->createMock(LoggerInterface::class), $this->createMock(CoreParametersHelper::class) ); $grapeJsBuilderModel->addOrEditEntity($email); // Saving the entities now. Assert::assertSame(1, $grapesJsBuilderRepository->saveEntityCallCount); Assert::assertSame(1, $emailRepository->saveEntityCallCount); } private function getEmailModel(EmailRepository $emailRepository): EmailModel { return new class($emailRepository) extends EmailModel { public function __construct( private EmailRepository $emailRepository ) { } public function getRepository() { return $this->emailRepository; } }; } private function getTranslator(): Translator { return new class() extends Translator { public function __construct() { } }; } }