Changeset View
Changeset View
Standalone View
Standalone View
src/tests/Feature/Controller/SupportTest.php
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Lines | public function testRequest(): void | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$this->assertCount(2, $json); | $this->assertCount(2, $json); | ||||
$this->assertSame('error', $json['status']); | $this->assertSame('error', $json['status']); | ||||
$this->assertCount(1, $json['errors']); | $this->assertCount(1, $json['errors']); | ||||
$this->assertSame(['The email must be a valid email address.'], $json['errors']['email']); | $this->assertSame(['The email must be a valid email address.'], $json['errors']['email']); | ||||
$this->assertCount(0, $this->app->make('swift.transport')->driver()->messages()); | $this->assertCount(0, $this->getSentMessages()); | ||||
// Valid input | // Valid input | ||||
$post = [ | $post = [ | ||||
'email' => 'test@test.com', | 'email' => 'test@test.com', | ||||
'summary' => 'Test summary', | 'summary' => 'Test summary', | ||||
'body' => 'Test body', | 'body' => 'Test body', | ||||
'user' => '1234567', | 'user' => '1234567', | ||||
'name' => 'Username', | 'name' => 'Username', | ||||
]; | ]; | ||||
$response = $this->post("api/v4/support/request", $post); | $response = $this->post("api/v4/support/request", $post); | ||||
$response->assertStatus(200); | $response->assertStatus(200); | ||||
$json = $response->json(); | $json = $response->json(); | ||||
$this->assertCount(2, $json); | $this->assertCount(2, $json); | ||||
$this->assertSame('success', $json['status']); | $this->assertSame('success', $json['status']); | ||||
$this->assertSame('Support request submitted successfully.', $json['message']); | $this->assertSame('Support request submitted successfully.', $json['message']); | ||||
$emails = $this->app->make('swift.transport')->driver()->messages(); | $emails = $this->getSentMessages(); | ||||
$expected_body = "ID: 1234567\nName: Username\nWorking email address: test@test.com\n" | $this->assertCount(1, $emails); | ||||
$to = $emails[0]->getTo(); | |||||
$from = $emails[0]->getFrom(); | |||||
$replyTo = $emails[0]->getReplyTo(); | |||||
$expectedBody = "ID: 1234567\nName: Username\nWorking email address: test@test.com\n" | |||||
. "Subject: Test summary\n\nTest body"; | . "Subject: Test summary\n\nTest body"; | ||||
$this->assertCount(1, $emails); | $this->assertCount(1, $to); | ||||
$this->assertCount(1, $from); | |||||
$this->assertCount(1, $replyTo); | |||||
$this->assertSame('Test summary', $emails[0]->getSubject()); | $this->assertSame('Test summary', $emails[0]->getSubject()); | ||||
$this->assertSame(['test@test.com' => 'Username'], $emails[0]->getFrom()); | $this->assertSame('test@test.com', $from[0]->getAddress()); | ||||
$this->assertSame(['test@test.com' => 'Username'], $emails[0]->getReplyTo()); | $this->assertSame('Username', $from[0]->getName()); | ||||
$this->assertNull($emails[0]->getCc()); | $this->assertSame('test@test.com', $replyTo[0]->getAddress()); | ||||
$this->assertSame([$support_email => null], $emails[0]->getTo()); | $this->assertSame('Username', $replyTo[0]->getName()); | ||||
$this->assertSame($expected_body, trim($emails[0]->getBody())); | $this->assertSame([], $emails[0]->getCc()); | ||||
$this->assertSame($support_email, $to[0]->getAddress()); | |||||
$this->assertSame('', $to[0]->getName()); | |||||
$this->assertSame($expectedBody, trim($emails[0]->getTextBody())); | |||||
$this->assertSame('', trim($emails[0]->getHtmlBody())); | |||||
} | |||||
/** | |||||
* Get all messages that have been sent | |||||
* | |||||
* @return \Symfony\Component\Mime\Email[] | |||||
*/ | |||||
protected function getSentMessages(): array | |||||
{ | |||||
$transport = $this->app->make('mail.manager')->mailer()->getSymfonyTransport(); | |||||
return $this->getObjectProperty($transport, 'messages') | |||||
->map(function (\Symfony\Component\Mailer\SentMessage $item) { | |||||
return $item->getOriginalMessage(); | |||||
}) | |||||
->all(); | |||||
} | } | ||||
} | } |