|
8 | 8 | use Illuminate\Support\Str;
|
9 | 9 | use InnoGE\LaravelMsGraphMail\Exceptions\ConfigurationMissing;
|
10 | 10 | use InnoGE\LaravelMsGraphMail\Tests\Stubs\TestMail;
|
| 11 | +use InnoGE\LaravelMsGraphMail\Tests\Stubs\TestMailWithInlineImage; |
11 | 12 |
|
12 | 13 | it('sends html mails with microsoft graph', function () {
|
13 | 14 | Config::set('mail.mailers.microsoft-graph', [
|
|
75 | 76 | 'name' => 'test-file-1.txt',
|
76 | 77 | 'contentType' => 'text',
|
77 | 78 | 'contentBytes' => 'Zm9vCg==',
|
| 79 | + 'contentId' => 'test-file-1.txt', |
| 80 | + 'isInline' => false, |
78 | 81 | ],
|
79 | 82 | [
|
80 | 83 | '@odata.type' => '#microsoft.graph.fileAttachment',
|
81 | 84 | 'name' => 'test-file-2.txt',
|
82 | 85 | 'contentType' => 'text',
|
83 | 86 | 'contentBytes' => 'Zm9vCg==',
|
| 87 | + 'contentId' => 'test-file-2.txt', |
| 88 | + 'isInline' => false, |
84 | 89 | ],
|
85 | 90 | ],
|
86 | 91 | ],
|
|
157 | 162 | 'name' => 'test-file-1.txt',
|
158 | 163 | 'contentType' => 'text',
|
159 | 164 | 'contentBytes' => 'Zm9vCg==',
|
| 165 | + 'contentId' => 'test-file-1.txt', |
| 166 | + 'isInline' => false, |
160 | 167 | ],
|
161 | 168 | [
|
162 | 169 | '@odata.type' => '#microsoft.graph.fileAttachment',
|
163 | 170 | 'name' => 'test-file-2.txt',
|
164 | 171 | 'contentType' => 'text',
|
165 | 172 | 'contentBytes' => 'Zm9vCg==',
|
| 173 | + 'contentId' => 'test-file-2.txt', |
| 174 | + 'isInline' => false, |
166 | 175 | ],
|
167 | 176 | ],
|
168 | 177 | ],
|
|
272 | 281 | 'The mail from address is missing from the configuration file.',
|
273 | 282 | ],
|
274 | 283 | ]);
|
| 284 | + |
| 285 | +it('sends html mails with inline images with microsoft graph', function () { |
| 286 | + Config::set('mail.mailers.microsoft-graph', [ |
| 287 | + 'transport' => 'microsoft-graph', |
| 288 | + 'client_id' => 'foo_client_id', |
| 289 | + 'client_secret' => 'foo_client_secret', |
| 290 | + 'tenant_id' => 'foo_tenant_id', |
| 291 | + 'from' => [ |
| 292 | + |
| 293 | + 'name' => 'Taylor Otwell', |
| 294 | + ], |
| 295 | + ]); |
| 296 | + Config::set('mail.default', 'microsoft-graph'); |
| 297 | + Config::set('filesystems.default', 'local'); |
| 298 | + Config::set('filesystems.disks.local.root', realpath(__DIR__.'/Resources/files')); |
| 299 | + |
| 300 | + Cache::set('microsoft-graph-api-access-token', 'foo_access_token', 3600); |
| 301 | + |
| 302 | + Http::fake(); |
| 303 | + |
| 304 | + |
| 305 | + |
| 306 | + |
| 307 | + ->send(new TestMailWithInlineImage()); |
| 308 | + |
| 309 | + Http::assertSent(function (Request $value) { |
| 310 | + // ContentId gets random generated, so get this value first and check for equality later |
| 311 | + $inlineImageContentId = json_decode($value->body())->message->attachments[1]->contentId; |
| 312 | + |
| 313 | + expect($value) |
| 314 | + -> url()-> toBe( 'https://graph.microsoft.com/v1.0/users/[email protected]/sendMail') |
| 315 | + ->hasHeader('Authorization', 'Bearer foo_access_token')->toBeTrue() |
| 316 | + ->body()->json()->toBe([ |
| 317 | + 'message' => [ |
| 318 | + 'subject' => 'Dev Test', |
| 319 | + 'body' => [ |
| 320 | + 'contentType' => 'HTML', |
| 321 | + 'content' => '<b>Test</b><img src="cid:' . $inlineImageContentId . '">'.PHP_EOL, |
| 322 | + ], |
| 323 | + 'toRecipients' => [ |
| 324 | + [ |
| 325 | + 'emailAddress' => [ |
| 326 | + |
| 327 | + ], |
| 328 | + ], |
| 329 | + ], |
| 330 | + 'ccRecipients' => [ |
| 331 | + [ |
| 332 | + 'emailAddress' => [ |
| 333 | + |
| 334 | + ], |
| 335 | + ], |
| 336 | + ], |
| 337 | + 'bccRecipients' => [ |
| 338 | + [ |
| 339 | + 'emailAddress' => [ |
| 340 | + |
| 341 | + ], |
| 342 | + ], |
| 343 | + ], |
| 344 | + 'replyTo' => [], |
| 345 | + 'sender' => [ |
| 346 | + 'emailAddress' => [ |
| 347 | + |
| 348 | + ], |
| 349 | + ], |
| 350 | + 'attachments' => [ |
| 351 | + [ |
| 352 | + '@odata.type' => '#microsoft.graph.fileAttachment', |
| 353 | + 'name' => 'test-file-1.txt', |
| 354 | + 'contentType' => 'text', |
| 355 | + 'contentBytes' => 'Zm9vCg==', |
| 356 | + 'contentId' => 'test-file-1.txt', |
| 357 | + 'isInline' => false, |
| 358 | + ], |
| 359 | + [ |
| 360 | + '@odata.type' => '#microsoft.graph.fileAttachment', |
| 361 | + 'name' => $inlineImageContentId, |
| 362 | + 'contentType' => 'image', |
| 363 | + 'contentBytes' => '/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCABLAGQDAREAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAj/xAAWAQEBAQAAAAAAAAAAAAAAAAAABQj/2gAMAwEAAhADEAAAAZ71TDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/xAAUEAEAAAAAAAAAAAAAAAAAAABw/9oACAEBAAEFAgL/xAAUEQEAAAAAAAAAAAAAAAAAAABw/9oACAEDAQE/AQL/xAAUEQEAAAAAAAAAAAAAAAAAAABw/9oACAECAQE/AQL/xAAUEAEAAAAAAAAAAAAAAAAAAABw/9oACAEBAAY/AgL/xAAUEAEAAAAAAAAAAAAAAAAAAABw/9oACAEBAAE/IQL/2gAMAwEAAgADAAAAEEkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkv/xAAUEQEAAAAAAAAAAAAAAAAAAABw/9oACAEDAQE/EAL/xAAUEQEAAAAAAAAAAAAAAAAAAABw/9oACAECAQE/EAL/xAAUEAEAAAAAAAAAAAAAAAAAAABw/9oACAEBAAE/EAL/2Q==', |
| 364 | + 'contentId' => $inlineImageContentId, |
| 365 | + 'isInline' => true, |
| 366 | + ], |
| 367 | + ], |
| 368 | + ], |
| 369 | + 'saveToSentItems' => false, |
| 370 | + ]); |
| 371 | + |
| 372 | + return true; |
| 373 | + }); |
| 374 | +}); |
0 commit comments