Comparer les révisions

..

Pas de révisions en commun. "main" et "1.0.0" ont des historiques entièrement différents.
main ... 1.0.0

15 fichiers modifiés avec 80 ajouts et 392 suppressions

Voir le fichier

@ -4,25 +4,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased](https://git.d3data.de/D3Public/klicktipp-php-client/compare/1.0.3...rel_1.x)
## [1.0.3](https://git.d3data.de/D3Public/klicktipp-php-client/compare/1.0.2...1.0.3) - 2025-03-06
### Fixed
- handle different cases in subscribed status
## [1.0.2](https://git.d3data.de/D3Public/klicktipp-php-client/compare/1.0.1...1.0.2) - 2025-02-05
### Added
- reset subscription method
### Changed
- endpoint related task with missing endpoint instance throws an exception instead skipping it
### Fixed
- test for index null values in entities
## [1.0.1](https://git.d3data.de/D3Public/klicktipp-php-client/compare/1.0.0...1.0.1) - 2025-01-13
### Changed
- badges in README
## [Unreleased](https://git.d3data.de/D3Public/klicktipp-php-client/compare/1.0.0...rel_1.x)
## [1.0.0](https://git.d3data.de/D3Public/klicktipp-php-client/releases/tag/1.0.0) - 2025-01-09
### Added

Voir le fichier

@ -1,12 +1,12 @@
![stability-mature](https://img.shields.io/badge/stability-mature-008000.svg)
[![latest tag](https://img.shields.io/packagist/v/d3/klicktipp-php-client?label=release)](https://packagist.org/packages/d3/klicktipp-php-client)
[![MIT License](https://img.shields.io/packagist/l/d3/klicktipp-php-client)](https://git.d3data.de/D3Public/klicktipp-php-client/raw/branch/main/LICENSE.md)
![GitHub Tag](https://img.shields.io/github/v/tag/d3datadevelopment/klicktipp-php-client?label=release)
[![MIT License](https://img.shields.io/github/license/d3datadevelopment/klicktipp-php-client)](https://git.d3data.de/D3Public/klicktipp-php-client/raw/branch/main/LICENSE.md)
[![english version](https://logos.oxidmodule.com/en2_xs.svg)](README.md)
# Klicktipp PHP Client
A client for the Klicktipp API.
An unofficial client for the Klicktipp API.
## Installation
This project can easily be installed through Composer.

Voir le fichier

@ -19,14 +19,11 @@ namespace D3\KlicktippPhpClient\Entities;
use D3\KlicktippPhpClient\Exceptions\CommunicationException;
use D3\KlicktippPhpClient\Exceptions\InvalidCredentialTypeException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Account as AccountEndpoint;
use Doctrine\Common\Collections\ArrayCollection;
class Account extends Entity
{
use EndpointTrait;
private ?AccountEndpoint $endpoint;
public function __construct(array $elements = [], ?AccountEndpoint $endpoint = null)
@ -196,10 +193,9 @@ class Account extends Entity
/**
* @return null|bool
* @throws CommunicationException
* @throws MissingEndpointException
*/
public function persist(): ?bool
{
return $this->getEndpoint()->update();
return $this->endpoint?->update();
}
}

Voir le fichier

@ -1,36 +0,0 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
declare(strict_types=1);
namespace D3\KlicktippPhpClient\Entities;
use Assert\Assert;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Model;
trait EndpointTrait
{
private function getEndpoint(): Model
{
Assert::lazy()
->setExceptionClass(MissingEndpointException::class)
->that($this->endpoint)
->isInstanceOf(Model::class)
->verifyNow();
return $this->endpoint;
}
}

Voir le fichier

@ -18,13 +18,10 @@ declare(strict_types=1);
namespace D3\KlicktippPhpClient\Entities;
use D3\KlicktippPhpClient\Exceptions\CommunicationException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Field as FieldEndpoint;
class Field extends Entity
{
use EndpointTrait;
private ?FieldEndpoint $endpoint;
public function __construct(array $elements = [], ?FieldEndpoint $endpoint = null)
@ -53,15 +50,12 @@ class Field extends Entity
/**
* @return null|bool
* @throws CommunicationException
* @throws MissingEndpointException
*/
public function persist(): ?bool
{
return !is_null($this->getId()) ?
$this->getEndpoint()->update(
$this->getId(),
$this->getName() ?? ''
) :
null;
return $this->endpoint?->update(
$this->getId(),
$this->getName()
);
}
}

Voir le fichier

@ -18,15 +18,12 @@ declare(strict_types=1);
namespace D3\KlicktippPhpClient\Entities;
use D3\KlicktippPhpClient\Exceptions\CommunicationException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Subscriber as SubscriberEndpoint;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
class Subscriber extends Entity
{
use EndpointTrait;
public const STATUS_SUBSCRIBED = 'subscribed';
public const BOUNCE_NOTBOUNCED = 'Not Bounced';
@ -84,7 +81,7 @@ class Subscriber extends Entity
public function isSubscribed(): bool
{
return strtolower($this->getStatus()) === strtolower(self::STATUS_SUBSCRIBED);
return $this->getStatus() === self::STATUS_SUBSCRIBED;
}
public function getBounce(): ?string
@ -94,7 +91,7 @@ class Subscriber extends Entity
public function isBounced(): bool
{
return strtolower($this->getBounce()) !== strtolower(self::BOUNCE_NOTBOUNCED);
return $this->getBounce() !== self::BOUNCE_NOTBOUNCED;
}
public function getDate(): ?DateTime
@ -178,7 +175,7 @@ class Subscriber extends Entity
// use persist method to send to Klicktipp
}
protected function getFieldLongName(string $fieldId): string
protected function getFieldLongName(string $fieldId): ?string
{
return str_starts_with($fieldId, 'field') ? trim($fieldId) : 'field'.trim($fieldId);
}
@ -196,15 +193,15 @@ class Subscriber extends Entity
public function clearTags(): void
{
$tags = $this->getTags();
$tags?->clear();
$this->set(SubscriberEndpoint::TAGS, $tags?->toArray());
$tags->clear();
$this->set(SubscriberEndpoint::TAGS, $tags->toArray());
// use persist method to send to Klicktipp
}
public function addTag(string $tagId): void
{
$tags = $this->getTags() ?: new ArrayCollection();
$tags = $this->getTags();
$tags->add($tagId);
$this->set(SubscriberEndpoint::TAGS, $tags->toArray());
@ -214,8 +211,8 @@ class Subscriber extends Entity
public function removeTag(string $tagId): void
{
$tags = $this->getTags();
$tags?->removeElement($tagId);
$this->set(SubscriberEndpoint::TAGS, $tags?->toArray());
$tags->removeElement($tagId);
$this->set(SubscriberEndpoint::TAGS, $tags->toArray());
// use persist method to send to Klicktipp
}
@ -235,7 +232,7 @@ class Subscriber extends Entity
public function getManualTagTime(string $tagId): ?DateTime
{
return $this->getDateTimeFromValue($this->getManualTags()?->get($tagId));
return $this->getDateTimeFromValue($this->getManualTags()->get($tagId));
}
public function getSmartTags(): ?ArrayCollection
@ -317,81 +314,42 @@ class Subscriber extends Entity
/**
* @return null|bool
* @throws CommunicationException
* @throws MissingEndpointException
*/
public function persist(): ?bool
{
if (!is_null($this->getId())) {
$return = $this->getEndpoint()->update(
$this->getId(),
$this->getFields()->toArray(),
$this->getEmailAddress() ?? '',
$this->getSmsPhone() ?? ''
);
$return = $this->endpoint?->update(
$this->getId(),
$this->getFields()->toArray(),
$this->getEmailAddress(),
$this->getSmsPhone()
);
$this->persistTags();
$this->persistTags();
return $return;
}
return null;
return $return;
}
/**
* @throws CommunicationException
* @throws MissingEndpointException
*/
protected function persistTags(): void
{
$currentTags = $this->getEndpoint()->getEntity($this->getId() ?? '')->getTags();
if (!$this->endpoint instanceof SubscriberEndpoint) {
return;
}
$removeTags = array_diff(
$currentTags?->toArray() ?? [],
$this->getTags()?->toArray() ?? []
);
$currentTags = $this->endpoint->getEntity($this->getId())->getTags();
$removeTags = array_diff($currentTags->toArray(), $this->getTags()->toArray());
if (count($removeTags)) {
foreach ($removeTags as $removeTag) {
if (!is_null($this->getEmailAddress())) {
$this->getEndpoint()->untag($this->getEmailAddress(), $removeTag);
}
$this->endpoint->untag($this->getEmailAddress(), $removeTag);
}
}
$addTags = array_diff(
$this->getTags()?->toArray() ?? [],
$currentTags?->toArray() ?? []
);
$addTags = array_diff($this->getTags()->toArray(), $currentTags->toArray());
if (count($addTags)) {
if (!is_null($this->getEmailAddress())) {
$this->getEndpoint()->tag($this->getEmailAddress(), $addTags);
}
}
}
/**
* @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->getEndpoint()->subscribe(
$this->getEmailAddress(),
$listId,
$tagId,
$fields,
$smsNumber
);
$this->endpoint->tag($this->getEmailAddress(), $addTags);
}
}

Voir le fichier

@ -18,13 +18,10 @@ declare(strict_types=1);
namespace D3\KlicktippPhpClient\Entities;
use D3\KlicktippPhpClient\Exceptions\CommunicationException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\SubscriptionProcess;
class Subscription extends Entity
{
use EndpointTrait;
private ?SubscriptionProcess $endpoint;
public function __construct(array $elements = [], ?SubscriptionProcess $endpoint = null)
@ -81,15 +78,12 @@ class Subscription extends Entity
/**
* @return null|bool
* @throws CommunicationException
* @throws MissingEndpointException
*/
public function persist(): ?bool
{
return !is_null($this->getListId()) ?
$this->getEndpoint()->update(
$this->getListId(),
$this->getName() ?? ''
) :
null;
return $this->endpoint?->update(
$this->getListId(),
$this->getName()
);
}
}

Voir le fichier

@ -18,13 +18,10 @@ declare(strict_types=1);
namespace D3\KlicktippPhpClient\Entities;
use D3\KlicktippPhpClient\Exceptions\CommunicationException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Tag as TagEndpoint;
class Tag extends Entity
{
use EndpointTrait;
private ?TagEndpoint $endpoint;
public function __construct(array $elements = [], ?TagEndpoint $endpoint = null)
@ -65,16 +62,13 @@ class Tag extends Entity
/**
* @return null|bool
* @throws CommunicationException
* @throws MissingEndpointException
*/
public function persist(): ?bool
{
return !is_null($this->getId()) ?
$this->getEndpoint()->update(
$this->getId(),
$this->getName() ?? '',
$this->getText() ?? ''
) :
null;
return $this->endpoint?->update(
$this->getId(),
$this->getName(),
$this->getText()
);
}
}

Voir le fichier

@ -1,29 +0,0 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
declare(strict_types=1);
namespace D3\KlicktippPhpClient\Exceptions;
use Assert\LazyAssertionException;
class MissingEndpointException extends LazyAssertionException implements KlicktippExceptionInterface
{
public function __construct($message, array $errors)
{
unset($message);
parent::__construct('required endpoint for this action missing', $errors);
}
}

Voir le fichier

@ -19,7 +19,6 @@ namespace D3\KlicktippPhpClient\tests\unit\Entities;
use D3\KlicktippPhpClient\Entities\Account;
use D3\KlicktippPhpClient\Exceptions\InvalidCredentialTypeException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Account as AccountEndpoint;
use D3\KlicktippPhpClient\tests\TestCase;
use Doctrine\Common\Collections\ArrayCollection;
@ -527,10 +526,6 @@ class AccountTest extends TestCase
$sut = new Account([AccountEndpoint::UID => 'foo'], $endpointSet ? $endpointMock : null);
if (!$endpointSet) {
$this->expectException(MissingEndpointException::class);
}
$this->assertSame(
$expectedReturn,
$this->callMethod(

Voir le fichier

@ -19,7 +19,6 @@ namespace D3\KlicktippPhpClient\tests\unit\Entities;
use D3\KlicktippPhpClient\Entities\Field;
use D3\KlicktippPhpClient\Exceptions\InvalidCredentialTypeException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Field as FieldEndpoint;
use D3\KlicktippPhpClient\tests\TestCase;
use Generator;
@ -185,10 +184,6 @@ class FieldTest extends TestCase
$endpointSet ? $endpointMock : null
);
if (!$endpointSet) {
$this->expectException(MissingEndpointException::class);
}
$this->assertSame(
$expectedReturn,
$this->callMethod(

Voir le fichier

@ -19,7 +19,6 @@ namespace D3\KlicktippPhpClient\tests\unit\Entities;
use D3\KlicktippPhpClient\Entities\Subscriber;
use D3\KlicktippPhpClient\Exceptions\InvalidCredentialTypeException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Subscriber as SubscriberEndpoint;
use D3\KlicktippPhpClient\tests\TestCase;
use DateTime;
@ -707,11 +706,12 @@ class SubscriberTest extends TestCase
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::isTagSet
* @dataProvider isTagSetDataProvider
*/
public function testIsTagSet(?array $currentTags, string $searchTagId, bool $expected): void
public function testIsTagSet(string $searchTagId, bool $expected): void
{
$tagList = is_null($currentTags) ?
null :
new ArrayCollection($currentTags);
$tagList = new ArrayCollection([
"12494453",
"12494463",
]);
$sut = $this->getMockBuilder(Subscriber::class)
->onlyMethods(['getTags'])
@ -730,9 +730,8 @@ class SubscriberTest extends TestCase
public static function isTagSetDataProvider(): Generator
{
yield 'existing tag' => [["12494453", "12494463"], '12494463', true];
yield 'missing tag' => [["12494453", "12494463"], '12495463', false];
yield 'null tag' => [null, '12495463', false];
yield 'existing tag' => ['12494463', true];
yield 'missing tag' => ['12495463', false];
}
/**
@ -740,27 +739,15 @@ class SubscriberTest extends TestCase
* @return void
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::clearTags
* @throws ReflectionException
* @dataProvider clearTagsDataProvider
*/
public function testClearTags(?array $currentTagList, ?array $expectedTags): void
public function testClearTags(): void
{
$entityMock = new Subscriber([SubscriberEndpoint::TAGS => $currentTagList]);
$this->callMethod(
$entityMock,
$this->entity,
'clearTags'
);
is_null($expectedTags) ?
$this->assertNull($this->callMethod($entityMock, 'getTags')) :
$this->assertEquals(new ArrayCollection($expectedTags), $this->callMethod($entityMock, 'getTags'));
}
public static function clearTagsDataProvider(): Generator
{
yield 'tag list exists' => [["12494453","12494463"], []];
yield 'tag list empty' => [[], []];
yield 'tag list null' => [null, null];
$this->assertCount(0, $this->callMethod($this->entity, 'getTags'));
}
/**
@ -768,56 +755,36 @@ class SubscriberTest extends TestCase
* @return void
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::addTag
* @throws ReflectionException
* @dataProvider addTagDataProvider
*/
public function testAddTag(?array $currentTagList, ?array $expectedTagList): void
public function testAddTag(): void
{
$entityMock = new Subscriber([SubscriberEndpoint::TAGS => $currentTagList]);
$this->callMethod(
$entityMock,
$this->entity,
'addTag',
['78546214']
);
is_null($expectedTagList) ?
$this->assertNull($this->callMethod($entityMock, 'getTags')) :
$this->assertEquals(new ArrayCollection($expectedTagList), $this->callMethod($entityMock, 'getTags'));
}
public static function addTagDataProvider(): Generator
{
yield 'tag list exists' => [["12494453","12494463"], ["12494453","12494463", "78546214"]];
yield 'tag list empty' => [[], ["78546214"]];
yield 'tag list null' => [null, ["78546214"]];
$this->assertCount(3, $this->callMethod($this->entity, 'getTags'));
$this->assertContains('78546214', $this->callMethod($this->entity, 'getTags'));
}
/**
* @test
* @return void
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::removeTag
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::removeTag
* @dataProvider removeTagDataProvider
*/
public function testRemoveTag(?array $currentTagList, ?array $expectedTags): void
public function testRemoveTag(): void
{
$entityMock = new Subscriber([SubscriberEndpoint::TAGS => $currentTagList]);
$this->callMethod(
$entityMock,
$this->entity,
'removeTag',
['12494453']
);
is_null($expectedTags) ?
$this->assertNull($this->callMethod($entityMock, 'getTags')) :
$this->assertEquals(new ArrayCollection($expectedTags), $this->callMethod($entityMock, 'getTags'));
}
public static function removeTagDataProvider(): Generator
{
yield 'tag list exists' => [["12494453","12494463"], [1 => "12494463"]];
yield 'tag list empty' => [[], []];
yield 'tag list null' => [null, null];
$this->assertCount(1, $this->callMethod($this->entity, 'getTags'));
$this->assertContains('12494463', $this->callMethod($this->entity, 'getTags'));
$this->assertNotContains('12494453', $this->callMethod($this->entity, 'getTags'));
}
/**
@ -828,9 +795,7 @@ class SubscriberTest extends TestCase
*/
public function testPersist(
bool $endpointSet,
?string $currentId,
InvokedCount $endpointInvocation,
InvokedCount $persistTagsInvocation,
?bool $expectedReturn
): void {
$endpointMock = $this->getMockBuilder(SubscriberEndpoint::class)
@ -840,14 +805,10 @@ class SubscriberTest extends TestCase
$endpointMock->expects($endpointInvocation)->method('update')->willReturn(true);
$sut = $this->getMockBuilder(Subscriber::class)
->setConstructorArgs([[SubscriberEndpoint::ID => $currentId], $endpointSet ? $endpointMock : null])
->setConstructorArgs([[SubscriberEndpoint::ID => 'foo'], $endpointSet ? $endpointMock : null])
->onlyMethods(['persistTags'])
->getMock();
$sut->expects($persistTagsInvocation)->method('persistTags');
if (!$endpointSet) {
$this->expectException(MissingEndpointException::class);
}
$sut->expects($this->once())->method('persistTags');
$this->assertSame(
$expectedReturn,
@ -860,9 +821,8 @@ class SubscriberTest extends TestCase
public static function persistDataProvider(): Generator
{
yield 'has endpoint' => [true, 'fixture', self::once(), self::once(), true];
yield 'has no endpoint' => [false, 'fixture', self::never(), self::never(), null];
yield 'has endpoint, no id' => [true, null, self::never(), self::never(), null];
yield 'has endpoint' => [true, self::once(), true];
yield 'has no endpoint' => [false, self::never(), null];
}
/**
@ -874,7 +834,6 @@ class SubscriberTest extends TestCase
public function testPersistTags(
bool $endpointSet,
InvokedCount $endpointInvocation,
?array $currentTagList,
?array $newTagList,
InvokedCount $removeTagInvocation,
InvokedCount $setTagInvocation
@ -883,9 +842,10 @@ class SubscriberTest extends TestCase
->disableOriginalConstructor()
->onlyMethods(['getTags'])
->getMock();
$entityMock->method('getTags')->willReturn(
is_null($currentTagList) ? null : new ArrayCollection($currentTagList)
);
$entityMock->method('getTags')->willReturn(new ArrayCollection([
"12494453",
"12494463",
]));
$endpointMock = $this->getMockBuilder(SubscriberEndpoint::class)
->disableOriginalConstructor()
@ -900,10 +860,6 @@ class SubscriberTest extends TestCase
$sut->set('tags', $newTagList);
}
if (!$endpointSet) {
$this->expectException(MissingEndpointException::class);
}
$this->callMethod(
$sut,
'persistTags'
@ -912,11 +868,10 @@ class SubscriberTest extends TestCase
public static function persistTagsDataProvider(): Generator
{
yield 'has endpoint, tag removed' => [true, self::once(), ["12494453", "12494463"], ["12494453"], self::once(), self::never()];
yield 'has endpoint, tag added' => [true, self::once(), ["12494453", "12494463"], ["12494453","12494463","12494464"], self::never(), self::once()];
yield 'has endpoint, taglist equals' => [true, self::once(), ["12494453", "12494463"], ["12494453","12494463"], self::never(), self::never()];
yield 'has no endpoint' => [false, self::never(), ["12494453", "12494463"], null, self::never(), self::never()];
yield 'has endpoint, taglist null' => [true, self::once(), null, null, self::never(), self::never()];
yield 'has endpoint, tag removed' => [true, self::once(), ["12494453"], self::once(), self::never()];
yield 'has endpoint, tag added' => [true, self::once(), ["12494453","12494463","12494464"], self::never(), self::once()];
yield 'has endpoint, taglist equals' => [true, self::once(), ["12494453","12494463"], self::never(), self::never()];
yield 'has no endpoint' => [false, self::never(), null, self::never(), self::never()];
}
/**
@ -987,48 +942,4 @@ class SubscriberTest extends TestCase
yield ['getStartedCampaignTime', 'getStartedCampaigns'];
yield ['getFinishedCampaignTime', 'getFinishedCampaigns'];
}
/**
* @test
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::resubscribe
* @covers \D3\KlicktippPhpClient\Entities\Subscriber::getEndpoint
* @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');
if (!$endpointSet && !$isSubscribed) {
$this->expectException(MissingEndpointException::class);
}
$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];
}
}

Voir le fichier

@ -19,7 +19,6 @@ namespace D3\KlicktippPhpClient\tests\unit\Entities;
use D3\KlicktippPhpClient\Entities\Subscription;
use D3\KlicktippPhpClient\Exceptions\InvalidCredentialTypeException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\SubscriptionProcess as SubscriptionEndpoint;
use D3\KlicktippPhpClient\tests\TestCase;
use Generator;
@ -206,7 +205,6 @@ class SubscriptionTest extends TestCase
*/
public function testPersist(
bool $endpointSet,
?string $id,
InvokedCount $endpointInvocation,
?bool $expectedReturn
): void {
@ -215,19 +213,15 @@ class SubscriptionTest extends TestCase
->onlyMethods(['update'])
->getMock();
$endpointMock->expects($endpointInvocation)->method('update')->with(
$this->identicalTo($id),
$this->identicalTo('foo'),
$this->identicalTo('bar'),
)->willReturn(true);
$sut = new Subscription(
[SubscriptionEndpoint::LISTID => $id, SubscriptionEndpoint::NAME => 'bar'],
[SubscriptionEndpoint::LISTID => 'foo', SubscriptionEndpoint::NAME => 'bar'],
$endpointSet ? $endpointMock : null
);
if (!$endpointSet) {
$this->expectException(MissingEndpointException::class);
}
$this->assertSame(
$expectedReturn,
$this->callMethod(
@ -239,8 +233,7 @@ class SubscriptionTest extends TestCase
public static function persistDataProvider(): Generator
{
yield 'has endpoint' => [true, 'fixture', self::once(), true];
yield 'has no endpoint' => [false, 'fixture', self::never(), null];
yield 'has endpoint, no id' => [true, null, self::never(), null];
yield 'has endpoint' => [true, self::once(), true];
yield 'has no endpoint' => [false, self::never(), null];
}
}

Voir le fichier

@ -19,7 +19,6 @@ namespace D3\KlicktippPhpClient\tests\unit\Entities;
use D3\KlicktippPhpClient\Entities\Tag;
use D3\KlicktippPhpClient\Exceptions\InvalidCredentialTypeException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\Resources\Tag as TagEndpoint;
use D3\KlicktippPhpClient\tests\TestCase;
use Generator;
@ -199,10 +198,6 @@ class TagTest extends TestCase
$endpointSet ? $endpointMock : null
);
if (!$endpointSet) {
$this->expectException(MissingEndpointException::class);
}
$this->assertSame(
$expectedReturn,
$this->callMethod(

Voir le fichier

@ -1,54 +0,0 @@
<?php
/**
* Copyright (c) D3 Data Development (Inh. Thomas Dartsch)
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
declare(strict_types=1);
namespace D3\KlicktippPhpClient\tests\unit\Exceptions;
use D3\KlicktippPhpClient\Exceptions\CommunicationException;
use D3\KlicktippPhpClient\Exceptions\MissingEndpointException;
use D3\KlicktippPhpClient\tests\TestCase;
use ReflectionException;
/**
* @covers \D3\KlicktippPhpClient\Exceptions\MissingEndpointException
*/
class MissingEndpointExceptionTest extends TestCase
{
/**
* @test
* @return void
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Exceptions\MissingEndpointException::__construct
*/
public function testConstructor(): void
{
/** @var MissingEndpointException $sutMock */
$sutMock = $this->getMockBuilder(MissingEndpointException::class)
->disableOriginalConstructor()
->getMock();
$this->callMethod(
$sutMock,
'__construct',
['myMessage', []]
);
$this->assertMatchesRegularExpression(
'/.*?endpoint.*?missing.*/i',
$sutMock->getMessage()
);
}
}