8
0

add Klicktipp class tests

Dieser Commit ist enthalten in:
Daniel Seifert 2025-01-09 08:38:47 +01:00
Ursprung 4c600528b2
Commit e52845329f
2 geänderte Dateien mit 152 neuen und 1 gelöschten Zeilen

Datei anzeigen

@ -44,7 +44,7 @@ class Klicktipp
$this->account()->login();
}
private function getConnection(): Connection
protected function getConnection(): Connection
{
if (!$this->connection) {
$this->connection = new Connection($this->client_key, $this->secret_key);

151
tests/unit/KlicktippTest.php Normale Datei
Datei anzeigen

@ -0,0 +1,151 @@
<?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;
use D3\KlicktippPhpClient\Connection;
use D3\KlicktippPhpClient\Klicktipp;
use D3\KlicktippPhpClient\Resources\Account;
use D3\KlicktippPhpClient\Resources\Field;
use D3\KlicktippPhpClient\Resources\Subscriber;
use D3\KlicktippPhpClient\Resources\SubscriptionProcess;
use D3\KlicktippPhpClient\Resources\Tag;
use D3\KlicktippPhpClient\tests\TestCase;
use Generator;
use GuzzleHttp\Client;
use GuzzleHttp\ClientInterface;
use ReflectionException;
/**
* @covers \D3\KlicktippPhpClient\Klicktipp
*/
class KlicktippTest extends TestCase
{
/**
* @test
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Klicktipp::__construct
* @dataProvider constructDataProvider
*/
public function testConstruct(?ClientInterface $client): void
{
$accountMock = $this->getMockBuilder(Account::class)
->disableOriginalConstructor()
->onlyMethods(['login'])
->getMock();
$accountMock->expects($this->once())->method('login');
$connectionMock = $this->getMockBuilder(Connection::class)
->disableOriginalConstructor()
->onlyMethods(['setClient'])
->getMock();
$connectionMock->expects($client ? $this->once() : $this->never())->method('setClient');
$sut = $this->getMockBuilder(Klicktipp::class)
->onlyMethods(['account', 'getConnection'])
->disableOriginalConstructor()
->getMock();
$sut->method('account')->willReturn($accountMock);
$sut->method('getConnection')->willReturn($connectionMock);
$this->callMethod(
$sut,
'__construct',
['client', 'secret', $client]
);
}
public static function constructDataProvider(): Generator
{
yield 'no client' => [null];
yield 'has client' => [new Client()];
}
/**
* @test
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Klicktipp::getConnection
*/
public function testGetConnection(): void
{
$accountMock = $this->getMockBuilder(Account::class)
->disableOriginalConstructor()
->onlyMethods(['login'])
->getMock();
$accountMock->expects($this->never())->method('login');
$sutMock = $this->getMockBuilder(Klicktipp::class)
->setConstructorArgs(['foo', 'bar'])
->onlyMethods(['account'])
->getMock();
$sutMock->method('account')->willReturn($accountMock);
// not set property
$firstReturn = $this->callMethod(
$sutMock,
'getConnection',
);
// already set property
$secondReturn = $this->callMethod(
$sutMock,
'getConnection',
);
$this->assertSame($firstReturn, $secondReturn);
}
/**
* @test
* @throws ReflectionException
* @covers \D3\KlicktippPhpClient\Klicktipp::subscription
* @covers \D3\KlicktippPhpClient\Klicktipp::account
* @covers \D3\KlicktippPhpClient\Klicktipp::field
* @covers \D3\KlicktippPhpClient\Klicktipp::subscriber
* @covers \D3\KlicktippPhpClient\Klicktipp::tag
* @dataProvider instanceGetterDataProvider
*/
public function testInstanceGetter(string $testMethodName, string $expectedClassName)
{
$connectionMock = $this->getMockBuilder(Connection::class)
->disableOriginalConstructor()
->getMock();
$sutMock = $this->getMockBuilder(Klicktipp::class)
->disableOriginalConstructor()
->onlyMethods(['getConnection'])
->getMock();
$sutMock->expects($this->once())->method('getConnection')->willReturn($connectionMock);
$this->assertInstanceOf(
$expectedClassName,
$this->callMethod(
$sutMock,
$testMethodName,
)
);
}
public static function instanceGetterDataProvider(): Generator
{
yield ['subscription', SubscriptionProcess::class];
yield ['account', Account::class];
yield ['field', Field::class];
yield ['subscriber', Subscriber::class];
yield ['tag', Tag::class];
}
}