Skip to content

Commit 35ab8aa

Browse files
oliverkleeSam Tuke
authored andcommitted
[FEATURE] SubscriptionRepository.findOneBySubscriberListAndSubscriber (#284)
This makes it possible to retrieve an existing subscription, e.g., for removing it.
1 parent 39de672 commit 35ab8aa

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
77
## x.y.z
88

99
### Added
10+
- SubscriptionRepository.findOneBySubscriberListAndSubscriber (#284)
1011
- Repository.remove (#278)
1112
- Interface for domain models (#274)
1213
- Trait for database tests and abstract web test (#264)

src/Domain/Repository/Subscription/SubscriptionRepository.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,19 @@
1818
*/
1919
class SubscriptionRepository extends AbstractRepository
2020
{
21+
/**
22+
* @param SubscriberList $list
23+
* @param Subscriber $subscriber
24+
*
25+
* @return Subscription|null
26+
*/
27+
public function findOneBySubscriberListAndSubscriber(SubscriberList $list, Subscriber $subscriber)
28+
{
29+
return $this->findOneBy(
30+
[
31+
'subscriberList' => $list,
32+
'subscriber' => $subscriber,
33+
]
34+
);
35+
}
2136
}

tests/Integration/Domain/Repository/Fixtures/Subscriber.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ id,entered,modified,email,confirmed,blacklisted,bouncecount,uniqid,htmlemail,dis
22
1,"2016-07-22 15:01:17","2016-08-23 19:50:43","[email protected]",1,1,17,"95feb7fe7e06e6c11ca8d0c48cb46e89",1,1
33
2,"2016-08-22 15:01:17","2017-08-23 19:50:43","[email protected]",1,1,17,"95feb7fe7e06e6c11ca8d0c48cb46e81",1,0
44
3,"2016-08-22 15:01:17","2017-08-23 19:50:43","[email protected]",1,1,17,"95feb7fe7e06e6c11ca8d0c48cb46e84",1,0
5+
4,"2016-08-22 15:01:17","2017-08-23 19:50:43","[email protected]",1,1,17,"95feb7fe7e06e6c11ca8d0c48cb46e8a",1,0

tests/Integration/Domain/Repository/Subscription/SubscriptionRepositoryTest.php

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,4 +258,74 @@ public function removeRemovesModel()
258258
$numberOfModelsAfterRemove = count($this->subject->findAll());
259259
static::assertSame(1, $numberOfModelsBeforeRemove - $numberOfModelsAfterRemove);
260260
}
261+
262+
/**
263+
* @test
264+
*/
265+
public function findOneBySubscriberListAndSubscriberForNeitherMatchingReturnsNull()
266+
{
267+
$this->getDataSet()->addTable(static::SUBSCRIBER_TABLE_NAME, __DIR__ . '/../Fixtures/Subscriber.csv');
268+
$this->getDataSet()->addTable(static::SUBSCRIBER_LIST_TABLE_NAME, __DIR__ . '/../Fixtures/SubscriberList.csv');
269+
$this->getDataSet()->addTable(static::TABLE_NAME, __DIR__ . '/../Fixtures/Subscription.csv');
270+
$this->applyDatabaseChanges();
271+
272+
$subscriberList = $this->subscriberListRepository->find(3);
273+
$subscriber = $this->subscriberRepository->find(4);
274+
$result = $this->subject->findOneBySubscriberListAndSubscriber($subscriberList, $subscriber);
275+
276+
static::assertNull($result);
277+
}
278+
279+
/**
280+
* @test
281+
*/
282+
public function findOneBySubscriberListAndSubscriberForMatchingSubscriberListOnlyReturnsNull()
283+
{
284+
$this->getDataSet()->addTable(static::SUBSCRIBER_TABLE_NAME, __DIR__ . '/../Fixtures/Subscriber.csv');
285+
$this->getDataSet()->addTable(static::SUBSCRIBER_LIST_TABLE_NAME, __DIR__ . '/../Fixtures/SubscriberList.csv');
286+
$this->getDataSet()->addTable(static::TABLE_NAME, __DIR__ . '/../Fixtures/Subscription.csv');
287+
$this->applyDatabaseChanges();
288+
289+
$subscriberList = $this->subscriberListRepository->find(2);
290+
$subscriber = $this->subscriberRepository->find(4);
291+
$result = $this->subject->findOneBySubscriberListAndSubscriber($subscriberList, $subscriber);
292+
293+
static::assertNull($result);
294+
}
295+
296+
/**
297+
* @test
298+
*/
299+
public function findOneBySubscriberListAndSubscriberForMatchingSubscriberOnlyReturnsNull()
300+
{
301+
$this->getDataSet()->addTable(static::SUBSCRIBER_TABLE_NAME, __DIR__ . '/../Fixtures/Subscriber.csv');
302+
$this->getDataSet()->addTable(static::SUBSCRIBER_LIST_TABLE_NAME, __DIR__ . '/../Fixtures/SubscriberList.csv');
303+
$this->getDataSet()->addTable(static::TABLE_NAME, __DIR__ . '/../Fixtures/Subscription.csv');
304+
$this->applyDatabaseChanges();
305+
306+
$subscriberList = $this->subscriberListRepository->find(3);
307+
$subscriber = $this->subscriberRepository->find(1);
308+
$result = $this->subject->findOneBySubscriberListAndSubscriber($subscriberList, $subscriber);
309+
310+
static::assertNull($result);
311+
}
312+
313+
/**
314+
* @test
315+
*/
316+
public function findOneBySubscriberListAndSubscriberForBothMatchingReturnsMatch()
317+
{
318+
$this->getDataSet()->addTable(static::SUBSCRIBER_TABLE_NAME, __DIR__ . '/../Fixtures/Subscriber.csv');
319+
$this->getDataSet()->addTable(static::SUBSCRIBER_LIST_TABLE_NAME, __DIR__ . '/../Fixtures/SubscriberList.csv');
320+
$this->getDataSet()->addTable(static::TABLE_NAME, __DIR__ . '/../Fixtures/Subscription.csv');
321+
$this->applyDatabaseChanges();
322+
323+
$subscriberList = $this->subscriberListRepository->find(2);
324+
$subscriber = $this->subscriberRepository->find(1);
325+
$result = $this->subject->findOneBySubscriberListAndSubscriber($subscriberList, $subscriber);
326+
327+
static::assertInstanceOf(Subscription::class, $result);
328+
static::assertSame($subscriberList, $result->getSubscriberList());
329+
static::assertSame($subscriber, $result->getSubscriber());
330+
}
261331
}

0 commit comments

Comments
 (0)