From 2871a3346604f22e47c00185c0206ca66675e510 Mon Sep 17 00:00:00 2001 From: Wendell Adriel Date: Thu, 24 Nov 2022 10:21:34 +0000 Subject: [PATCH 1/4] #45042 - Updated Mailable to prevent duplicated recipients --- src/Illuminate/Mail/Mailable.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Illuminate/Mail/Mailable.php b/src/Illuminate/Mail/Mailable.php index 6975743fb4d..250cde980a8 100644 --- a/src/Illuminate/Mail/Mailable.php +++ b/src/Illuminate/Mail/Mailable.php @@ -689,6 +689,11 @@ protected function setAddress($address, $name = null, $property = 'to') ]; } + $this->{$property} = collect($this->{$property}) + ->unique('address') + ->values() + ->all(); + return $this; } From 0b27cf09b8e380aa0f86c54f1cff0218d2490b7e Mon Sep 17 00:00:00 2001 From: Wendell Adriel Date: Mon, 28 Nov 2022 10:43:17 +0000 Subject: [PATCH 2/4] #45042 - Updated test cases --- tests/Mail/MailMailableTest.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/Mail/MailMailableTest.php b/tests/Mail/MailMailableTest.php index 88632eb1b4f..ef95b8d30b8 100644 --- a/tests/Mail/MailMailableTest.php +++ b/tests/Mail/MailMailableTest.php @@ -74,7 +74,6 @@ public function testMailableSetsRecipientsCorrectly() $mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], - ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ], $mailable->to); $this->assertTrue($mailable->hasTo(new MailableTestUserStub)); $this->assertTrue($mailable->hasTo('taylor@laravel.com')); @@ -152,7 +151,6 @@ public function testMailableSetsCcRecipientsCorrectly() $mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], - ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ], $mailable->cc); $this->assertTrue($mailable->hasCc(new MailableTestUserStub)); $this->assertTrue($mailable->hasCc('taylor@laravel.com')); @@ -241,7 +239,6 @@ public function testMailableSetsBccRecipientsCorrectly() $mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], - ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ], $mailable->bcc); $this->assertTrue($mailable->hasBcc(new MailableTestUserStub)); $this->assertTrue($mailable->hasBcc('taylor@laravel.com')); @@ -330,7 +327,6 @@ public function testMailableSetsReplyToCorrectly() $mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], - ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ], $mailable->replyTo); $this->assertTrue($mailable->hasReplyTo(new MailableTestUserStub)); $this->assertTrue($mailable->hasReplyTo('taylor@laravel.com')); @@ -408,7 +404,6 @@ public function testMailableSetsFromCorrectly() $mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], - ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ], $mailable->from); $this->assertTrue($mailable->hasFrom(new MailableTestUserStub)); $this->assertTrue($mailable->hasFrom('taylor@laravel.com')); From b668b6c4efe5e7845772281b86605e8775ae5ba2 Mon Sep 17 00:00:00 2001 From: Wendell Adriel Date: Mon, 28 Nov 2022 15:18:36 +0000 Subject: [PATCH 3/4] #45042 - Updated test cases to check for multiple addresses in recipients --- tests/Mail/MailMailableTest.php | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/tests/Mail/MailMailableTest.php b/tests/Mail/MailMailableTest.php index ef95b8d30b8..70165c91586 100644 --- a/tests/Mail/MailMailableTest.php +++ b/tests/Mail/MailMailableTest.php @@ -71,9 +71,10 @@ public function testMailableSetsRecipientsCorrectly() $mailable->assertHasTo('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub])); + $mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], + ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], ], $mailable->to); $this->assertTrue($mailable->hasTo(new MailableTestUserStub)); $this->assertTrue($mailable->hasTo('taylor@laravel.com')); @@ -148,9 +149,10 @@ public function testMailableSetsCcRecipientsCorrectly() $mailable->assertHasCc('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub])); + $mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], + ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], ], $mailable->cc); $this->assertTrue($mailable->hasCc(new MailableTestUserStub)); $this->assertTrue($mailable->hasCc('taylor@laravel.com')); @@ -236,9 +238,10 @@ public function testMailableSetsBccRecipientsCorrectly() $mailable->assertHasBcc('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub])); + $mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], + ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], ], $mailable->bcc); $this->assertTrue($mailable->hasBcc(new MailableTestUserStub)); $this->assertTrue($mailable->hasBcc('taylor@laravel.com')); @@ -324,9 +327,10 @@ public function testMailableSetsReplyToCorrectly() $mailable->assertHasReplyTo('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub])); + $mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], + ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], ], $mailable->replyTo); $this->assertTrue($mailable->hasReplyTo(new MailableTestUserStub)); $this->assertTrue($mailable->hasReplyTo('taylor@laravel.com')); @@ -401,9 +405,10 @@ public function testMailableSetsFromCorrectly() $mailable->assertFrom('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub])); + $mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], + ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], ], $mailable->from); $this->assertTrue($mailable->hasFrom(new MailableTestUserStub)); $this->assertTrue($mailable->hasFrom('taylor@laravel.com')); @@ -1013,6 +1018,12 @@ class MailableTestUserStub public $email = 'taylor@laravel.com'; } +class MailableDumbUserStud +{ + public $name = 'Laravel Framework'; + public $email = 'contact@laravel.com'; +} + class MailTestAttachable implements Attachable { public function __construct(protected $attachment) From d9339fbf248b641c754b1870ac413d92361d8a0e Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Mon, 28 Nov 2022 16:03:16 -0600 Subject: [PATCH 4/4] formatting --- tests/Mail/MailMailableTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/Mail/MailMailableTest.php b/tests/Mail/MailMailableTest.php index 70165c91586..b1565c45578 100644 --- a/tests/Mail/MailMailableTest.php +++ b/tests/Mail/MailMailableTest.php @@ -71,7 +71,7 @@ public function testMailableSetsRecipientsCorrectly() $mailable->assertHasTo('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); + $mailable->to(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], @@ -149,7 +149,7 @@ public function testMailableSetsCcRecipientsCorrectly() $mailable->assertHasCc('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); + $mailable->cc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], @@ -238,7 +238,7 @@ public function testMailableSetsBccRecipientsCorrectly() $mailable->assertHasBcc('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); + $mailable->bcc(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], @@ -327,7 +327,7 @@ public function testMailableSetsReplyToCorrectly() $mailable->assertHasReplyTo('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); + $mailable->replyTo(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], @@ -405,7 +405,7 @@ public function testMailableSetsFromCorrectly() $mailable->assertFrom('taylor@laravel.com'); $mailable = new WelcomeMailableStub; - $mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableDumbUserStud()])); + $mailable->from(collect([new MailableTestUserStub, new MailableTestUserStub, new MailableTestUserStub2])); $this->assertEquals([ ['name' => 'Taylor Otwell', 'address' => 'taylor@laravel.com'], ['name' => 'Laravel Framework', 'address' => 'contact@laravel.com'], @@ -1018,7 +1018,7 @@ class MailableTestUserStub public $email = 'taylor@laravel.com'; } -class MailableDumbUserStud +class MailableTestUserStub2 { public $name = 'Laravel Framework'; public $email = 'contact@laravel.com';