Completed
Push — develop ( 6f5b7e...20603c )
by Freddie
03:09
created

testItInitializeRepositoryUsingSetter()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
nc 1
nop 0
dl 0
loc 15
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
namespace FlexPHP\UseCases\Tests\Unit;
4
5
use FlexPHP\Messages\ResponseInterface;
6
use FlexPHP\UseCases\Exception\NotValidRequestException;
7
use FlexPHP\UseCases\Exception\UnavailableRepositoryUseCaseException;
8
use FlexPHP\UseCases\Exception\UndefinedRepositoryUseCaseException;
9
use FlexPHP\UseCases\UseCaseInterface;
10
use FlexPHP\UseCases\Tests\Mocks\GatewayMock;
11
use FlexPHP\UseCases\Tests\Mocks\RequestMock;
12
use FlexPHP\UseCases\Tests\Mocks\RepositoryMock;
13
use FlexPHP\UseCases\Tests\Mocks\RequestNotValidMock;
14
use FlexPHP\UseCases\Tests\Mocks\UnavailableRepositoryMock;
15
use FlexPHP\UseCases\Tests\Mocks\UseCaseMock;
16
use FlexPHP\UseCases\Tests\TestCase;
17
18
class UseCaseTest extends TestCase
19
{
20
    public function testItUseInterface()
21
    {
22
        $useCase = new UseCaseMock();
23
24
        $this->assertInstanceOf(UseCaseInterface::class, $useCase);
25
    }
26
27
    /**
28
     * @throws UndefinedRepositoryUseCaseException
29
     */
30
    public function testItInitializeWithRepository()
31
    {
32
        $foo = 'Hello';
33
        $bar = 'World';
34
        $gateway = new GatewayMock();
35
        $repository = new RepositoryMock($gateway);
36
        $request = new RequestMock(\compact('foo', 'bar'));
37
        $useCase = new UseCaseMock($repository);
38
39
        $response = $useCase->execute($request);
40
41
        $this->assertSame($repository, $useCase->getRepository());
42
        $this->assertInstanceOf(ResponseInterface::class, $response);
43
        $this->assertSame(1, $response->response());
44
    }
45
46
    /**
47
     * @throws UndefinedRepositoryUseCaseException
48
     */
49
    public function testItInitializeRepositoryUsingSetter()
50
    {
51
        $foo = 'Hello';
52
        $bar = 'World';
53
        $gateway = new GatewayMock();
54
        $repository = new RepositoryMock($gateway);
55
        $request = new RequestMock(\compact('foo', 'bar'));
56
        $useCase = new UseCaseMock();
57
        $useCase->setRepository($repository);
58
59
        $response = $useCase->execute($request);
60
61
        $this->assertSame($repository, $useCase->getRepository());
62
        $this->assertInstanceOf(ResponseInterface::class, $response);
63
        $this->assertSame(1, $response->response());
64
    }
65
66
    /**
67
     * @throws NotValidRequestException
68
     */
69
    public function testItGetNotValidRequestThrowException()
70
    {
71
        $this->expectException(NotValidRequestException::class);
72
        $this->expectExceptionMessage('Request');
73
74
        $useCase = new UseCaseMock();
75
        $useCase->execute(new RequestNotValidMock());
0 ignored issues
show
Bug introduced by
new FlexPHP\UseCases\Tes...s\RequestNotValidMock() of type FlexPHP\UseCases\Tests\Mocks\RequestNotValidMock is incompatible with the type FlexPHP\UseCases\Tests\Mocks\RequestMock expected by parameter $request of FlexPHP\UseCases\Tests\M...\UseCaseMock::execute(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

75
        $useCase->execute(/** @scrutinizer ignore-type */ new RequestNotValidMock());
Loading history...
76
    }
77
78
    /**
79
     * @throws NotValidRequestException
80
     */
81
    public function testItGetNotValidRequestNotClassThrowException()
82
    {
83
        $this->expectException(NotValidRequestException::class);
84
        $this->expectExceptionMessage('Request');
85
86
        $useCase = new UseCaseMock();
87
        $useCase->execute([]);
0 ignored issues
show
Bug introduced by
array() of type array is incompatible with the type FlexPHP\UseCases\Tests\Mocks\RequestMock expected by parameter $request of FlexPHP\UseCases\Tests\M...\UseCaseMock::execute(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

87
        $useCase->execute(/** @scrutinizer ignore-type */ []);
Loading history...
88
    }
89
90
    /**
91
     * @throws UndefinedRepositoryUseCaseException
92
     */
93
    public function testItGetUndefinedRepositoryThrowException()
94
    {
95
        $this->expectException(UndefinedRepositoryUseCaseException::class);
96
97
        $useCase = new UseCaseMock();
98
        $useCase->getRepository();
99
    }
100
101
    /**
102
     * @throws UnavailableRepositoryUseCaseException
103
     */
104
    public function testItGetUnavailableRepositoryThrowException()
105
    {
106
        $this->expectException(UnavailableRepositoryUseCaseException::class);
107
108
        $repository = new UnavailableRepositoryMock();
109
        $useCase = new UseCaseMock($repository);
110
        $useCase->execute(new RequestMock());
111
    }
112
}
113