Completed
Pull Request — master (#11)
by Laurens
01:56
created

PurchaseClientTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 81
Duplicated Lines 44.44 %

Coupling/Cohesion

Components 1
Dependencies 9

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 9
dl 36
loc 81
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getPurchaseHistory() 0 12 1
A getPurchase() 0 14 1
A getIzettleMock() 14 14 1
A getPurchaseHistoryObject() 0 4 1
A getPurchaseObject() 22 22 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace LauLamanApps\IzettleApi\Tests\Unit\Client;
6
7
use DateTime;
8
use LauLamanApps\IzettleApi\API\Purchase\Purchase;
9
use LauLamanApps\IzettleApi\API\Purchase\PurchaseHistory;
10
use LauLamanApps\IzettleApi\API\Purchase\User;
11
use LauLamanApps\IzettleApi\Client\Purchase\PurchaseBuilderInterface;
12
use LauLamanApps\IzettleApi\Client\Purchase\PurchaseHistoryBuilderInterface;
13
use LauLamanApps\IzettleApi\Client\PurchaseClient;
14
use LauLamanApps\IzettleApi\IzettleClientInterface;
15
use LauLamanApps\IzettleApi\Tests\Unit\MockeryAssertionTrait;
16
use Mockery;
17
use Money\Money;
18
use PHPUnit\Framework\TestCase;
19
use Psr\Http\Message\ResponseInterface;
20
use Ramsey\Uuid\Uuid;
21
22
/**
23
 * @small
24
 */
25
final class PurchaseClientTest extends TestCase
26
{
27
    use MockeryAssertionTrait;
28
29
    /**
30
     * @test
31
     */
32
    public function getPurchaseHistory()
33
    {
34
        $data = ['getPurchaseHistoryTest'];
35
        $izettleClientMock = $this->getIzettleMock(PurchaseClient::GET_PURCHASES, $data);
36
37
        $purchaseHistoryBuilder = Mockery::mock(PurchaseHistoryBuilderInterface::class);
38
        $purchaseHistoryBuilder->shouldReceive('buildFromJson')->with(json_encode($data))->once()->andReturn($this->getPurchaseHistoryObject());
39
        $purchaseBuilder = Mockery::mock(PurchaseBuilderInterface::class);
40
41
        $purchaseClient = new PurchaseClient($izettleClientMock, $purchaseHistoryBuilder, $purchaseBuilder);
42
        $purchaseClient->getPurchaseHistory();
43
    }
44
45
    /**
46
     * @test
47
     */
48
    public function getPurchase()
49
    {
50
        $purchaseUuid = Uuid::uuid1();
51
        $data = ['getPurchaseTest'];
52
        $url = sprintf(PurchaseClient::GET_PURCHASE, (string) $purchaseUuid);
53
        $izettleClientMock = $this->getIzettleMock($url, $data);
54
55
        $purchaseHistoryBuilder = Mockery::mock(PurchaseHistoryBuilderInterface::class);
56
        $purchaseBuilder = Mockery::mock(PurchaseBuilderInterface::class);
57
        $purchaseBuilder->shouldReceive('buildFromJson')->with(json_encode($data))->once()->andReturn($this->getPurchaseObject());
58
59
        $purchaseClient = new PurchaseClient($izettleClientMock, $purchaseHistoryBuilder, $purchaseBuilder);
60
        $purchaseClient->getPurchase($purchaseUuid);
61
    }
62
63 View Code Duplication
    private function getIzettleMock($url, $data): IzettleClientInterface
64
    {
65
        $responseMock = Mockery::mock(ResponseInterface::class);
66
67
        $izettleClientMock = Mockery::mock(IzettleClientInterface::class);
68
        $izettleClientMock
69
            ->shouldReceive('get')
70
            ->once()
71
            ->with($url)
72
            ->andReturn($responseMock);
73
        $izettleClientMock->shouldReceive('getJson')->once()->andReturn(json_encode($data));
74
75
        return $izettleClientMock;
76
    }
77
78
    private function getPurchaseHistoryObject(): PurchaseHistory
79
    {
80
        return new PurchaseHistory('', '', []);
81
    }
82
83 View Code Duplication
    private function getPurchaseObject(): Purchase
84
    {
85
        return new Purchase(
86
            '',
87
            Uuid::uuid1(),
88
            new DateTime(),
89
            null,
90
            '',
91
            new User(0, ''),
92
            0,
93
            0,
94
            Money::EUR(0),
95
            Money::EUR(0),
96
            [],
97
            [],
98
            [],
99
            false,
100
            null,
101
            false,
102
            false
103
        );
104
    }
105
}
106