justReturn('Test Studio'); Functions\when('wp_login_url')->justReturn('http://example.test/login'); } private function user(string $email): \WP_User { $user = Mockery::mock(\WP_User::class); $user->user_email = $email; $user->display_name = 'Ada'; return $user; } public function testSendConfirmationEmailsTheStudent(): void { Functions\expect('wp_mail') ->once() ->with( 'a@b.test', Mockery::type('string'), Mockery::on(static fn (string $body): bool => str_contains($body, 'http://confirm.test')) ) ->andReturn(true); self::assertTrue((new RegistrationMailer())->sendConfirmation($this->user('a@b.test'), 'http://confirm.test')); } public function testSendConfirmationReturnsFalseWithoutRecipient(): void { self::assertFalse((new RegistrationMailer())->sendConfirmation($this->user(''), 'http://confirm.test')); } public function testNotifyAdminsPendingUsesAdminEmail(): void { Functions\when('get_option')->alias(static fn (string $name) => $name === 'admin_email' ? 'admin@studio.test' : ''); Functions\expect('wp_mail') ->once() ->with('admin@studio.test', Mockery::type('string'), Mockery::type('string')) ->andReturn(true); self::assertTrue((new RegistrationMailer())->notifyAdminsPending($this->user('a@b.test'))); } public function testSendApprovedEmailsTheStudent(): void { Functions\expect('wp_mail') ->once() ->with('a@b.test', Mockery::type('string'), Mockery::type('string')) ->andReturn(true); self::assertTrue((new RegistrationMailer())->sendApproved($this->user('a@b.test'))); } public function testSendRejectedEmailsTheAddress(): void { Functions\expect('wp_mail') ->once() ->with('a@b.test', Mockery::type('string'), Mockery::type('string')) ->andReturn(true); self::assertTrue((new RegistrationMailer())->sendRejected('a@b.test')); } public function testSendRejectedReturnsFalseWithoutRecipient(): void { self::assertFalse((new RegistrationMailer())->sendRejected('')); } }