mailer = $this->getMockBuilder(MailerInterface::class)->disableOriginalConstructor()->getMock(); $this->opentalentNoReplyEmailAddress = 'noreply@opentalent.fr'; $this->contactPointUtils = $this->getMockBuilder(ContactPointUtils::class)->disableOriginalConstructor()->getMock(); $this->accessUtils = $this->getMockBuilder(\App\Service\Access\Utils::class)->disableOriginalConstructor()->getMock(); } public function testSendAutomaticEmailTo(): void { $contactPoint = $this->getMockBuilder(\App\Entity\Core\ContactPoint::class)->disableOriginalConstructor()->getMock(); $contactPoint->method('getEmail')->willReturn('mail@domain.net'); $person = $this->getMockBuilder(\App\Entity\Person\Person::class)->disableOriginalConstructor()->getMock(); $person->method('getFullName')->willReturn('Don Diego de la Vega'); $person->method('getUsername')->willReturn('zorro2000'); $access = $this->getMockBuilder(\App\Entity\Access\Access::class)->disableOriginalConstructor()->getMock(); $access->method('getPerson')->willReturn($person); $this->contactPointUtils->expects(self::once())->method('getPersonContactPointPrincipal')->willReturn($contactPoint); $this->mailer->expects(self::once()) ->method('send') ->with(self::isInstanceOf(TemplatedEmail::class)); $mailerHub = new MailHub( $this->mailer, $this->opentalentNoReplyEmailAddress, $this->contactPointUtils, $this->accessUtils ); $mailerHub->sendAutomaticEmailTo($access, 'subject', 'a_template', []); } public function testSendAutomaticEmailToButNoAddress(): void { $access = $this->getMockBuilder(\App\Entity\Access\Access::class)->disableOriginalConstructor()->getMock(); $this->contactPointUtils->expects(self::once())->method('getPersonContactPointPrincipal')->willReturn(null); $mailerHub = new MailHub( $this->mailer, $this->opentalentNoReplyEmailAddress, $this->contactPointUtils, $this->accessUtils ); try { $mailerHub->sendAutomaticEmailTo($access, 'subject', 'a_template', []); throw new AssertionError('A RuntimeException should have been thrown but has not'); } catch (\RuntimeException $e) {} } public function testSendAutomaticEmailToAdmin() { $organization = $this->getMockBuilder(\App\Entity\Organization\Organization::class)->disableOriginalConstructor()->getMock(); $admin = $this->getMockBuilder(\App\Entity\Access\Access::class)->disableOriginalConstructor()->getMock(); $this->accessUtils->expects(self::once())->method('findAdminFor')->with($organization)->willReturn($admin); $mailerHub = $this->getMockBuilder(MailHub::class) ->onlyMethods(['sendAutomaticEmailTo']) ->setConstructorArgs([$this->mailer, $this->opentalentNoReplyEmailAddress, $this->contactPointUtils, $this->accessUtils]) ->getMock(); $mailerHub->expects(self::once())->method('sendAutomaticEmailTo')->with($admin, 'subject', 'template', []); $mailerHub->sendAutomaticEmailToAdmin($organization, 'subject', 'template', []); } public function testSendAutomaticEmailToAdminButNoAdmin() { $organization = $this->getMockBuilder(\App\Entity\Organization\Organization::class)->disableOriginalConstructor()->getMock(); $this->accessUtils->expects(self::once())->method('findAdminFor')->with($organization)->willReturn(null); $mailerHub = new MailHub( $this->mailer, $this->opentalentNoReplyEmailAddress, $this->contactPointUtils, $this->accessUtils ); try { $mailerHub->sendAutomaticEmailToAdmin($organization, 'subject', 'template', []); throw new AssertionError('A RuntimeException should have been thrown but has not'); } catch (\RuntimeException $e) {} } }