/
MailcatcherTrait.php
88 lines (75 loc) · 1.76 KB
/
MailcatcherTrait.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
use GuzzleHttp\Client;
/**
* Adds mailcatcher calls.
*/
trait MailcatcherTrait
{
/**
* @var \Guzzle\Http\Client
*/
private $mailcatcher;
public function bootMailcatcherTrait()
{
$this->mailcatcher = new Client([
'base_url' => 'http://'.getenv('MAIL_HOST').':1080',
]);
// clean emails between tests
$this->clearMessages();
}
/**
* Empty the inbox.
*/
public function clearMessages()
{
$this->mailcatcher->delete('/messages');
}
/**
* Get the latest email.
*
* @return mixed
*/
public function getLastMessage()
{
$messages = $this->getMessages();
if (empty($messages)) {
return $this->fail('No messages received');
}
// messages are in descending order
$id = reset($messages)->id;
return $this->getMessage($id);
}
/**
* Get all emails.
*
* @return mixed
*/
public function getMessages()
{
$jsonResponse = $this->mailcatcher->get('/messages');
return json_decode($jsonResponse->getBody());
}
/**
* Get a message by its id.
*
* @param int $id
* @param string $type
* @return mixed
*/
public function getMessage($id, $type = 'json')
{
$jsonResponse = $this->mailcatcher->get(sprintf('/messages/%s.%s', $id, $type));
return json_decode($jsonResponse->getBody());
}
/**
* Get a message source by its id.
*
* @param int $id
* @return string
*/
public function getMessageSource($id)
{
$response = $this->mailcatcher->get(sprintf('/messages/%s.html', $id));
return (string) $response->getBody();
}
}