1
1
<?php
2
2
/**
3
- * Copyright 2015 Adobe
3
+ * Copyright 2014 Adobe
4
4
* All Rights Reserved.
5
5
*/
6
6
namespace Magento \Newsletter \Model \Plugin ;
7
7
8
+ use Magento \Customer \Test \Fixture \Customer ;
9
+ use Magento \Framework \Api \SearchCriteriaBuilder ;
10
+ use Magento \Newsletter \Model \Subscriber ;
11
+ use Magento \Store \Test \Fixture \Group as GroupFixture ;
12
+ use Magento \Store \Test \Fixture \Store as StoreFixture ;
13
+ use Magento \Store \Test \Fixture \Website as WebsiteFixture ;
14
+ use Magento \TestFramework \Fixture \DataFixture ;
15
+ use Magento \TestFramework \Fixture \DataFixtureStorage ;
16
+ use Magento \TestFramework \Fixture \DataFixtureStorageManager ;
17
+ use Magento \TestFramework \Fixture \DbIsolation ;
8
18
use Magento \TestFramework \Helper \Bootstrap ;
9
19
use Magento \TestFramework \Mail \Template \TransportBuilderMock ;
10
20
@@ -32,6 +42,9 @@ class PluginTest extends \PHPUnit\Framework\TestCase
32
42
*/
33
43
protected $ transportBuilderMock ;
34
44
45
+ /** @var DataFixtureStorage */
46
+ private $ fixtures ;
47
+
35
48
protected function setUp (): void
36
49
{
37
50
$ this ->accountManagement = Bootstrap::getObjectManager ()->get (
@@ -43,6 +56,7 @@ protected function setUp(): void
43
56
$ this ->transportBuilderMock = Bootstrap::getObjectManager ()->get (
44
57
TransportBuilderMock::class
45
58
);
59
+ $ this ->fixtures = Bootstrap::getObjectManager ()->get (DataFixtureStorageManager::class)->getStorage ();
46
60
}
47
61
48
62
protected function tearDown (): void
@@ -62,8 +76,8 @@ public function testCustomerCreated()
62
76
{
63
77
$ objectManager = Bootstrap::getObjectManager ();
64
78
65
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
66
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
79
+ /** @var Subscriber $subscriber */
80
+ $ subscriber = $ objectManager ->create (Subscriber::class);
67
81
$ subscriber ->loadByEmail ('customer_two@example.com ' );
68
82
$ this ->assertTrue ($ subscriber ->isSubscribed ());
69
83
$ this ->assertEquals (0 , (int )$ subscriber ->getCustomerId ());
@@ -112,8 +126,8 @@ public function testCustomerUpdatedEmail()
112
126
{
113
127
$ objectManager = Bootstrap::getObjectManager ();
114
128
115
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
116
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
129
+ /** @var Subscriber $subscriber */
130
+ $ subscriber = $ objectManager ->create (Subscriber::class);
117
131
$ subscriber ->loadByEmail ('customer@example.com ' );
118
132
$ this ->assertTrue ($ subscriber ->isSubscribed ());
119
133
$ this ->assertEquals (1 , (int )$ subscriber ->getCustomerId ());
@@ -135,8 +149,8 @@ public function testCustomerDeletedByIdAdminArea()
135
149
{
136
150
$ objectManager = Bootstrap::getObjectManager ();
137
151
138
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
139
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
152
+ /** @var Subscriber $subscriber */
153
+ $ subscriber = $ objectManager ->create (Subscriber::class);
140
154
$ subscriber ->loadByEmail ('customer@example.com ' );
141
155
$ this ->assertTrue ($ subscriber ->isSubscribed ());
142
156
@@ -153,8 +167,8 @@ public function testCustomerDeletedAdminArea()
153
167
{
154
168
$ customer = $ this ->customerRepository ->getById (1 );
155
169
$ objectManager = Bootstrap::getObjectManager ();
156
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
157
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
170
+ /** @var Subscriber $subscriber */
171
+ $ subscriber = $ objectManager ->create (Subscriber::class);
158
172
$ subscriber ->loadByEmail ('customer@example.com ' );
159
173
$ this ->assertTrue ($ subscriber ->isSubscribed ());
160
174
$ this ->customerRepository ->delete ($ customer );
@@ -165,14 +179,14 @@ public function testCustomerDeletedAdminArea()
165
179
* Verify a subscription doesn't exist for a given email address
166
180
*
167
181
* @param string $email
168
- * @return \Magento\Newsletter\Model\ Subscriber
182
+ * @return Subscriber
169
183
*/
170
184
private function verifySubscriptionNotExist ($ email )
171
185
{
172
186
$ objectManager = Bootstrap::getObjectManager ();
173
187
174
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
175
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
188
+ /** @var Subscriber $subscriber */
189
+ $ subscriber = $ objectManager ->create (Subscriber::class);
176
190
$ subscriber ->loadByEmail ($ email );
177
191
$ this ->assertFalse ($ subscriber ->isSubscribed ());
178
192
$ this ->assertEquals (0 , (int )$ subscriber ->getId ());
@@ -191,12 +205,12 @@ public function testCustomerWithZeroStoreIdIsSubscribed()
191
205
\Magento \Store \Model \StoreManagerInterface::class
192
206
)->getStore ()->getId ();
193
207
194
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
195
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
208
+ $ subscriber = $ objectManager ->create (Subscriber::class);
209
+ /** @var Subscriber $subscriber */
196
210
$ subscriber ->setStoreId ($ currentStore )
197
211
->setCustomerId (0 )
198
212
->setSubscriberEmail ('customer@example.com ' )
199
- ->setSubscriberStatus (\ Magento \ Newsletter \ Model \ Subscriber::STATUS_SUBSCRIBED )
213
+ ->setSubscriberStatus (Subscriber::STATUS_SUBSCRIBED )
200
214
->save ();
201
215
202
216
/** @var \Magento\Customer\Api\Data\CustomerInterfaceFactory $customerFactory */
@@ -225,8 +239,8 @@ public function testCustomerWithZeroStoreIdIsSubscribed()
225
239
*/
226
240
public function testCustomerWithTwoNewsLetterSubscriptions ()
227
241
{
228
- /** @var \Magento\Framework\Api\ SearchCriteriaBuilder $searchBuilder */
229
- $ searchBuilder = Bootstrap::getObjectManager ()->create (\ Magento \ Framework \ Api \ SearchCriteriaBuilder::class);
242
+ /** @var SearchCriteriaBuilder $searchBuilder */
243
+ $ searchBuilder = Bootstrap::getObjectManager ()->create (SearchCriteriaBuilder::class);
230
244
$ searchCriteria = $ searchBuilder ->addFilter ('entity_id ' , 1 )->create ();
231
245
$ items = $ this ->customerRepository ->getList ($ searchCriteria )->getItems ();
232
246
/** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
@@ -271,8 +285,8 @@ public function testCreateAccountWithNewsLetterSubscription(): void
271
285
$ mailMessage
272
286
);
273
287
274
- /** @var \Magento\Newsletter\Model\ Subscriber $subscriber */
275
- $ subscriber = $ objectManager ->create (\ Magento \ Newsletter \ Model \ Subscriber::class);
288
+ /** @var Subscriber $subscriber */
289
+ $ subscriber = $ objectManager ->create (Subscriber::class);
276
290
$ subscriber ->loadByEmail ('customer@example.com ' );
277
291
$ this ->assertTrue ($ subscriber ->isSubscribed ());
278
292
@@ -298,4 +312,66 @@ public function testCreateAccountWithNewsLetterSubscription(): void
298
312
);
299
313
$ this ->assertEquals ('Newsletter subscription confirmation ' , $ message ->getSubject ());
300
314
}
315
+
316
+ #[
317
+ DbIsolation(false ),
318
+ DataFixture(WebsiteFixture::class, as: 'w2 ' ),
319
+ DataFixture(GroupFixture::class, ['website_id ' => '$w2.id$ ' ], 'g2 ' ),
320
+ DataFixture(StoreFixture::class, ['store_group_id ' => '$g2.id$ ' ], as: 's2 ' ),
321
+ DataFixture(Customer::class, ['email ' => 'customer@example.com ' ], as: 'customerDefaultWebsite ' ),
322
+ DataFixture(
323
+ Customer::class,
324
+ ['email ' => 'customer@example.com ' , 'website_id ' => '$w2.id$ ' , 'store_id ' => '$s2.id$ ' ],
325
+ as: 'customerCustomWebsite '
326
+ )
327
+ ]
328
+ public function testMultipleWebsiteCustomerHasUniqueSubscriptionsPerWebsite (): void
329
+ {
330
+ $ objectManager = Bootstrap::getObjectManager ();
331
+
332
+ $ customerDefaultWebsite = $ this ->fixtures ->get ('customerDefaultWebsite ' );
333
+ $ customerCustomWebsite = $ this ->fixtures ->get ('customerCustomWebsite ' );
334
+ // setting to customer for convenient and uniform retrieving later below
335
+ $ customerDefaultWebsite ->setSubscriberStatus (Subscriber::STATUS_SUBSCRIBED );
336
+ $ customerCustomWebsite ->setSubscriberStatus (Subscriber::STATUS_UNSUBSCRIBED );
337
+
338
+ $ this ->assertEquals (
339
+ $ customerDefaultWebsite ->getEmail (),
340
+ $ customerCustomWebsite ->getEmail (),
341
+ 'Precondition emails for customers on both websites must be the same '
342
+ );
343
+
344
+ foreach ([$ customerDefaultWebsite , $ customerCustomWebsite ] as $ customer ) {
345
+ $ subscriber = $ objectManager ->create (Subscriber::class);
346
+ $ subscriber ->setEmail ($ customer ->getEmail ());
347
+ $ subscriber ->setCustomerId ($ customer ->getId ());
348
+ $ subscriber ->setStoreId ($ customer ->getStoreId ());
349
+ $ subscriber ->setSubscriberStatus ($ customer ->getSubscriberStatus ());
350
+ $ subscriber ->save ();
351
+ }
352
+
353
+ /** @var SearchCriteriaBuilder $searchBuilder */
354
+ $ searchBuilder = Bootstrap::getObjectManager ()->create (SearchCriteriaBuilder::class);
355
+ $ searchCriteria = $ searchBuilder ->addFilter ('email ' , $ customerDefaultWebsite ->getEmail ())->create ();
356
+ $ items = $ this ->customerRepository ->getList ($ searchCriteria )->getItems ();
357
+
358
+ // Assertions
359
+ $ this ->assertEquals (2 , count ($ items ), 'Customers from both websites should be retrieved ' );
360
+
361
+ $ expectedCustomerSubscriptionMap = [
362
+ $ customerDefaultWebsite ->getId () => true ,
363
+ $ customerCustomWebsite ->getId () => false
364
+ ];
365
+
366
+ $ actualCustomerSubscriptionMap = [];
367
+ foreach ($ items as $ item ) {
368
+ $ actualCustomerSubscriptionMap [$ item ->getId ()] = $ item ->getExtensionAttributes ()->getIsSubscribed ();
369
+ }
370
+
371
+ $ this ->assertEquals (
372
+ $ expectedCustomerSubscriptionMap ,
373
+ $ actualCustomerSubscriptionMap ,
374
+ 'Customer with same email on each website should have has respective subscription '
375
+ );
376
+ }
301
377
}
0 commit comments