TestMessageFactory   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 317
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 136
dl 0
loc 317
rs 10
c 0
b 0
f 0
wmc 19

16 Methods

Rating   Name   Duplication   Size   Complexity  
A createTextAndHTMLMessageWithAttachment() 0 15 1
A createMessageWithCCAndBCCRecipients() 0 16 1
A createMessageWithInlineAttachmentAndTextAlternative() 0 18 1
A createMessageWithCustomHeaders() 0 14 1
A createAllMessageTypes() 0 11 4
A createTextMessage() 0 14 1
A createMessageWithInlineAndRegularAttachmentsAndTextAlternative() 0 20 1
A createMessageWithInlineAndRegularAttachments() 0 20 1
A createTextAndHTMLMessage() 0 13 1
A createTextMessageWithAttachment() 0 16 1
A createHTMLMessageWithAttachment() 0 9 1
A createMessageWithInlineAttachment() 0 18 1
A getFixturePath() 0 3 1
A createMessageWithMultipleRecipients() 0 15 1
A createHTMLMessage() 0 13 1
A createMessageWithMultipleAttachments() 0 16 1
1
<?php
2
3
namespace Kodus\Mail\Test;
4
5
use Kodus\Mail\Address;
6
use Kodus\Mail\Attachment;
7
use Kodus\Mail\Message;
8
9
/**
10
 * This class creates `Message` objects of all possible flavors:
11
 *
12
 *   - Plain text
13
 *   - HTML only
14
 *   - HTML with plain text alternative
15
 *   - Each of the above with Attachment
16
 *   - Multiple Attachments
17
 *   - Various other features (custom headers, multiple recipients, ...)
18
 */
19
class TestMessageFactory
20
{
21
    const TEXT_BODY                  = "It's me! Rasmus!\r\n\r\nI love danish characters, look: æøåÆØÅ! whoa!\r\n\r\nTake care, friend.";
22
    const TEXT_BODY_BASE64           = "SXQncyBtZSEgUmFzbXVzIQ0KDQpJIGxvdmUgZGFuaXNoIGNoYXJhY3RlcnMsIGxvb2s6IMOmw7jD\r\npcOGw5jDhSEgd2hvYSENCg0KVGFrZSBjYXJlLCBmcmllbmQu";
23
    const TEXT_BODY_QUOTED_PRINTABLE = "It's me! Rasmus!\r\n\r\nI love danish characters, look: =C3=A6=C3=B8=C3=A5=C3=86=C3=98=C3=85! whoa!\r\n\r\nTake care, friend.";
24
25
    const HTML_BODY                  = "<strong>It's me! Rasmus!</strong>\n\nI love danish characters, look: æøåÆØÅ! whoa!\r\n\r\nTake care, friend.";
26
    const HTML_BODY_QUOTED_PRINTABLE = "<strong>It's me! Rasmus!</strong>\r\n\r\nI love danish characters, look: =C3=A6=C3=B8=C3=A5=C3=86=C3=98=C3=85! whoa!\r\n\r\nTake care, friend.";
27
28
    const HTML_BODY_WITH_INLINE_IMAGE = '<strong>It\'s me! Rasmus!</strong><br>I love kittens, look:<br><img src="#kitten-uri"><br>Take care, friend.';
29
    const HTML_BODY_WITH_INLINE_IMAGE_QP = "<strong>It's me! Rasmus!</strong><br>I love kittens, look:<br><img src=3D\"c=\r\nid:[email protected]\"><br>Take care, frie=\r\nnd.";
30
31
    /**
32
     * @param string $filename
33
     *
34
     * @return string absolute path to fixture file
35
     */
36
    public function getFixturePath(string $filename): string
37
    {
38
        return __DIR__ . '/fixtures/' . $filename;
39
    }
40
41
    /**
42
     * @return Message
43
     */
44
    public function createTextMessage(): Message
45
    {
46
        $message = new Message(
47
            new Address("[email protected]", "Rasmus åh Schultz"),
48
            new Address("[email protected]"),
49
            "Hey, Rasmus! I like ÆØÅæøå!",
50
            self::TEXT_BODY
51
        );
52
53
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
54
55
        $message->setSender(new Address("[email protected]"));
56
57
        return $message;
58
    }
59
60
    /**
61
     * @return Message
62
     */
63
    public function createTextMessageWithAttachment(): Message
64
    {
65
        $message = new Message(
66
            new Address("[email protected]", "Rasmus åh Schultz"),
67
            [new Address("[email protected]"), new Address("[email protected]")],
68
            "Hey, Rasmus!",
69
            self::TEXT_BODY
70
        );
71
72
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
73
74
        $message->addAttachment(
75
            new Attachment(file_get_contents($this->getFixturePath("kitten.jpg")), "kitten.jpg", "image/jpeg")
76
        );
77
78
        return $message;
79
    }
80
81
    /**
82
     * @return Message
83
     */
84
    public function createHTMLMessage(): Message
85
    {
86
        $message = new Message(
87
            new Address("[email protected]", "Rasmus åh Schultz"),
88
            new Address("[email protected]"),
89
            "Hey, Rasmus!",
90
            null,
91
            self::HTML_BODY
92
        );
93
94
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
95
96
        return $message;
97
    }
98
99
    /**
100
     * @return Message
101
     */
102
    public function createHTMLMessageWithAttachment(): Message
103
    {
104
        $message = $this->createHTMLMessage();
105
106
        $message->addAttachment(
107
            new Attachment(file_get_contents($this->getFixturePath("kitten.jpg")), "kitten.jpg", "image/jpeg")
108
        );
109
110
        return $message;
111
    }
112
113
    /**
114
     * @return Message
115
     */
116
    public function createTextAndHTMLMessage(): Message
117
    {
118
        $message = new Message(
119
            new Address("[email protected]", "Rasmus Schultz"),
120
            new Address("[email protected]"),
121
            "Hey, Rasmus!",
122
            self::TEXT_BODY,
123
            self::HTML_BODY
124
        );
125
126
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
127
128
        return $message;
129
    }
130
131
    /**
132
     * @return Message
133
     */
134
    public function createTextAndHTMLMessageWithAttachment(): Message
135
    {
136
        $message = new Message(
137
            new Address("[email protected]", "Rasmus åh Schultz"),
138
            new Address("[email protected]"),
139
            "Hey, Rasmus!",
140
            self::TEXT_BODY,
141
            self::HTML_BODY
142
        );
143
144
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
145
146
        $message->addAttachment(Attachment::fromFile($this->getFixturePath("kitten.jpg")));
147
148
        return $message;
149
    }
150
151
    /**
152
     * @return Message
153
     */
154
    public function createMessageWithMultipleAttachments(): Message
155
    {
156
        $message = new Message(
157
            new Address("[email protected]", "Rasmus Schultz"),
158
            new Address("[email protected]"),
159
            "Hey, Rasmus!",
160
            self::TEXT_BODY
161
        );
162
163
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
164
165
        $message->addAttachment(Attachment::fromFile($this->getFixturePath('kitten.jpg')));
166
167
        $message->addAttachment(new Attachment(self::TEXT_BODY, "hello.txt", "text/plain; charset=UTF-8"));
168
169
        return $message;
170
    }
171
172
    /**
173
     * @return Message
174
     */
175
    public function createMessageWithMultipleRecipients(): Message
176
    {
177
        $message = new Message(
178
            [
179
                new Address("[email protected]", "Rasmus Schultz"),
180
                new Address("[email protected]", "Also Rasmus Schultz"),
181
            ],
182
            new Address("[email protected]"),
183
            "Hey, Rasmus!",
184
            "Hello!"
185
        );
186
187
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
188
189
        return $message;
190
    }
191
192
    /**
193
     * @return Message
194
     */
195
    public function createMessageWithCCAndBCCRecipients(): Message
196
    {
197
        $message = new Message(
198
            new Address("[email protected]"),
199
            new Address("[email protected]"),
200
            "Hey, Rasmus!",
201
            "Hello!"
202
        );
203
204
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
205
206
        $message->addCC(new Address("[email protected]"));
207
208
        $message->addBCC(new Address("[email protected]"));
209
210
        return $message;
211
    }
212
213
    /**
214
     * @return Message
215
     */
216
    public function createMessageWithCustomHeaders(): Message
217
    {
218
        $message = new Message(
219
            new Address("[email protected]"),
220
            new Address("[email protected]"),
221
            "We need a special character - Ø - so that quoted_printable_encode is used, and more than 75 characters - see documentation for quoted_printable_encode()",
222
            "Hello!"
223
        );
224
225
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
226
227
        $message->addHeader("X-Custom-Header", "custom-value");
228
229
        return $message;
230
    }
231
232
    /**
233
     * @return Message
234
     */
235
    public function createMessageWithInlineAttachment(): Message
236
    {
237
        $message = new Message(
238
            new Address("[email protected]"),
239
            new Address("[email protected]"),
240
            "Hey, Rasmus!",
241
            null
242
        );
243
244
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
245
246
        $uri = $message->addInlineAttachment(
247
            Attachment::fromFile($this->getFixturePath("kitten.jpg"), null, "image/jpeg")
248
        );
249
250
        $message->setHTML(strtr(self::HTML_BODY_WITH_INLINE_IMAGE, ["#kitten-uri" => $uri]));
251
252
        return $message;
253
    }
254
255
    /**
256
     * @return Message
257
     */
258
    public function createMessageWithInlineAttachmentAndTextAlternative(): Message
259
    {
260
        $message = new Message(
261
            new Address("[email protected]"),
262
            new Address("[email protected]"),
263
            "Hey, Rasmus!",
264
            self::TEXT_BODY
265
        );
266
267
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
268
269
        $uri = $message->addInlineAttachment(
270
            Attachment::fromFile($this->getFixturePath("kitten.jpg"), null, "image/jpeg")
271
        );
272
273
        $message->setHTML(strtr(self::HTML_BODY_WITH_INLINE_IMAGE, ["#kitten-uri" => $uri]));
274
275
        return $message;
276
    }
277
278
    public function createMessageWithInlineAndRegularAttachments(): Message
279
    {
280
        $message = new Message(
281
            new Address("[email protected]"),
282
            new Address("[email protected]"),
283
            "Hey, Rasmus!",
284
            null
285
        );
286
287
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
288
289
        $uri = $message->addInlineAttachment(
290
            Attachment::fromFile($this->getFixturePath("kitten.jpg"), null, "image/jpeg")
291
        );
292
293
        $message->addAttachment(new Attachment(self::TEXT_BODY, "hello.txt"));
294
295
        $message->setHTML(strtr(self::HTML_BODY_WITH_INLINE_IMAGE, ["#kitten-uri" => $uri]));
296
297
        return $message;
298
    }
299
300
    public function createMessageWithInlineAndRegularAttachmentsAndTextAlternative(): Message
301
    {
302
        $message = new Message(
303
            new Address("[email protected]"),
304
            new Address("[email protected]"),
305
            "Hey, Rasmus!",
306
            self::TEXT_BODY
307
        );
308
309
        $message->setDate("Thu, 15 Sep 2016 17:20:54 +0200");
310
311
        $uri = $message->addInlineAttachment(
312
            Attachment::fromFile($this->getFixturePath("kitten.jpg"), null, "image/jpeg")
313
        );
314
315
        $message->addAttachment(new Attachment(self::TEXT_BODY, "hello.txt"));
316
317
        $message->setHTML(strtr(self::HTML_BODY_WITH_INLINE_IMAGE, ["#kitten-uri" => $uri]));
318
319
        return $message;
320
    }
321
322
    /**
323
     * @return Message[]
324
     */
325
    public function createAllMessageTypes(): array
326
    {
327
        $messages = [];
328
329
        foreach (get_class_methods(__CLASS__) as $method) {
330
            if ($method !== __FUNCTION__ && preg_match("/^create/", $method) === 1) {
331
                $messages[substr($method, 6)] = $this->$method();
332
            }
333
        }
334
335
        return $messages;
336
    }
337
}
338