can reset subscription from subscriber entity

This commit is contained in:
Daniel Seifert 2025-01-16 15:16:56 +01:00
parent 1ea3941210
commit d7b24bb81c
2 changed files with 66 additions and 0 deletions

View File

@ -368,6 +368,32 @@ class Subscriber extends Entity
}
}
/**
* @param string $listId
* @param string|null $tagId
* @param array|null $fields
* @param string|null $smsNumber
*
* @return void
* @throws CommunicationException
*/
public function resubscribe(
string $listId,
?string $tagId = null,
?array $fields = null,
?string $smsNumber = null
): void {
if (!$this->isSubscribed()) {
$this->endpoint->subscribe(
$this->getEmailAddress(),
$listId,
$tagId,
$fields,
$smsNumber
);
}
}
// missing getters (return is timestamp list)
// smart_links SmartLinks

View File

@ -978,4 +978,44 @@ class SubscriberTest extends TestCase
yield ['getStartedCampaignTime', 'getStartedCampaigns'];
yield ['getFinishedCampaignTime', 'getFinishedCampaigns'];
}
/**
* @test
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::resubscribe
* @dataProvider resubscribeDataProvider
*/
public function testReSubscribe(
bool $endpointSet,
InvokedCount $subscribeExpections,
bool $isSubscribed
): void
{
$endpointMock = $this->getMockBuilder(SubscriberEndpoint::class)
->disableOriginalConstructor()
->onlyMethods(['subscribe'])
->getMock();
$endpointMock->expects($subscribeExpections)->method('subscribe');
$sut = $this->getMockBuilder(Subscriber::class)
->setConstructorArgs([[], $endpointSet ? $endpointMock : null])
->onlyMethods(['isSubscribed', 'getEmailAddress'])
->getMock();
$sut->method('isSubscribed')->willReturn($isSubscribed);
$sut->method('getEmailAddress')->willReturn('mail@mydomain.tld');
$this->callMethod(
$sut,
'resubscribe',
['listId', 'tagid']
);
}
public static function resubscribeDataProvider(): Generator
{
yield 'already subscribed, has endpoint' => [true, self::never(), true];
yield 'unsubscribed, has endpoint' => [true, self::once(), false];
yield 'already subscribed, no endpoint' => [false, self::never(), true];
yield 'unsubscribed, no endpoint' => [false, self::never(), false];
}
}