Passed
Push — master ( 8e05e6...e257ad )
by Davis
02:36
created

TestServices::valueServiceProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 48
Code Lines 43

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 48
rs 9.125
cc 1
eloc 43
nc 1
nop 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: davis
5
 * Date: 7/23/17
6
 * Time: 2:12 PM
7
 */
8
9
namespace DavisPeixoto\BlogCore\Tests\Services;
10
11
use DateTime;
12
use DavisPeixoto\BlogCore\Entity\Author;
13
use DavisPeixoto\BlogCore\Entity\Post;
14
use DavisPeixoto\BlogCore\Entity\Tag;
15
use DavisPeixoto\BlogCore\Entity\Trail;
16
use DavisPeixoto\BlogCore\Repository\AbstractAuthorRepository;
17
use DavisPeixoto\BlogCore\Repository\AbstractPostRepository;
18
use DavisPeixoto\BlogCore\Repository\AbstractTagRepository;
19
use DavisPeixoto\BlogCore\Repository\AbstractTrailRepository;
20
use DavisPeixoto\BlogCore\Service\CreateAuthor;
21
use DavisPeixoto\BlogCore\Service\CreatePost;
22
use DavisPeixoto\BlogCore\Service\CreateTag;
23
use DavisPeixoto\BlogCore\Service\CreateTrail;
24
use DavisPeixoto\BlogCore\Service\DeleteAuthor;
25
use DavisPeixoto\BlogCore\Service\DeletePost;
26
use DavisPeixoto\BlogCore\Service\DeleteTag;
27
use DavisPeixoto\BlogCore\Service\DeleteTrail;
28
use DavisPeixoto\BlogCore\Service\EditAuthor;
29
use DavisPeixoto\BlogCore\Service\EditPost;
30
use DavisPeixoto\BlogCore\Service\EditTag;
31
use DavisPeixoto\BlogCore\Service\EditTrail;
32
use DavisPeixoto\BlogCore\Service\GetAuthor;
33
use DavisPeixoto\BlogCore\Service\GetPost;
34
use DavisPeixoto\BlogCore\Service\GetTag;
35
use DavisPeixoto\BlogCore\Service\GetTrail;
36
use DavisPeixoto\BlogCore\Service\ListAuthors;
37
use DavisPeixoto\BlogCore\Service\ListPosts;
38
use DavisPeixoto\BlogCore\Service\ListTags;
39
use DavisPeixoto\BlogCore\Service\ListTrails;
40
use Exception;
41
use PHPUnit\Framework\TestCase;
42
use Psr\Log\LoggerInterface;
43
use Ramsey\Uuid\Uuid;
44
45
class TestServices extends TestCase
46
{
47
    /**
48
     * @param $repository
49
     * @param $entity
50
     * @param $logger
51
     * @param $serviceName
52
     * @param $method
53
     * @param $willReturn
54
     * @param $expected
55
     * @param $message
56
     * @dataProvider valueServiceProvider
57
     */
58
    public function testIsSuccessService(
59
        $serviceName,
60
        $method,
61
        $willReturn,
62
        $repository,
63
        $entity,
64
        $logger,
65
        $expected,
66
        $message
67
    ) {
68
        $repository->expects($this->once())->method($method)->will($this->returnValue($willReturn));
69
        $service = new $serviceName($repository, $entity, $logger);
70
        $this->assertEquals($expected, $service->run(), $message);
71
    }
72
73
    /**
74
     * @param $serviceName
75
     * @param $method
76
     * @param $repository
77
     * @param $entity
78
     * @param $logger
79
     * @param $expected
80
     * @param $message
81
     * @dataProvider exceptionServiceProvider
82
     */
83
    public function testIsExceptionService($serviceName, $method, $repository, $entity, $logger, $expected, $message)
84
    {
85
        $logger->expects($this->once())->method('error');
86
        $repository->expects($this->once())->method($method)->will($this->throwException(new Exception()));
87
        $service = new $serviceName($repository, $entity, $logger);
88
        $this->assertEquals($expected, $service->run(), $message);
89
    }
90
91
    public function valueServiceProvider()
92
    {
93
        $authorUuid = Uuid::uuid4()->toString();
94
        $postUuid = Uuid::uuid4()->toString();
95
        $tagUuid = Uuid::uuid4()->toString();
96
        $trailUuid = Uuid::uuid4()->toString();
97
98
        $author = new Author('Davis', '[email protected]', 'Some string', $authorUuid, new DateTime());
99
        $post = new Post('A Post', 'Lorem ipsum', $author, $postUuid, [], null);
100
        $tag = new Tag('A tag', $tagUuid);
101
        $trail = new Trail('A trail', 'An amazing trail', $trailUuid, [$post]);
102
        $filters = [];
103
104
        return [
105
            [CreateAuthor::class, 'save', $authorUuid, $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), $authorUuid, 'Create author service'],
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 200 characters; contains 210 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
106
            [EditAuthor::class, 'save', $authorUuid, $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), $authorUuid, 'Edit author service'],
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 200 characters; contains 206 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
107
            [DeleteAuthor::class, 'delete', true, $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), true, 'Delete author service'],
108
            [GetAuthor::class, 'get', $author, $this->getMockForAbstractClass(AbstractAuthorRepository::class), $authorUuid, $this->createMock(LoggerInterface::class), $author, 'Get author service'],
109
            [ListAuthors::class, 'getList', [$author], $this->getMockForAbstractClass(AbstractAuthorRepository::class), $filters, $this->createMock(LoggerInterface::class), [$author], 'List authors service'],
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 200 characters; contains 208 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
110
            [CreatePost::class, 'save', $postUuid, $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), $postUuid, 'Create post service'],
111
            [EditPost::class, 'save', $postUuid, $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), $postUuid, 'Edit post service'],
112
            [DeletePost::class, 'delete', true, $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), true, 'Delete post service'],
113
            [GetPost::class, 'get', $post, $this->getMockForAbstractClass(AbstractPostRepository::class), $postUuid, $this->createMock(LoggerInterface::class), $post, 'Get post service'],
114
            [ListPosts::class, 'getList', [$post], $this->getMockForAbstractClass(AbstractPostRepository::class), $filters, $this->createMock(LoggerInterface::class), [$post], 'List posts service'],
115
            [CreateTag::class, 'save', $tagUuid, $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), $tagUuid, 'Create tag service'],
116
            [EditTag::class, 'save', $tagUuid, $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), $tagUuid, 'Edit tag service'],
117
            [DeleteTag::class, 'delete', true, $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), true, 'Delete tag service'],
118
            [GetTag::class, 'get', $tag, $this->getMockForAbstractClass(AbstractTagRepository::class), $tagUuid, $this->createMock(LoggerInterface::class), $tag, 'Get tag service'],
119
            [ListTags::class, 'getList', [$tag], $this->getMockForAbstractClass(AbstractTagRepository::class), $filters, $this->createMock(LoggerInterface::class), [$tag], 'List tags service'],
120
            [CreateTrail::class, 'save', $trailUuid, $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), $trailUuid, 'Create trail service'],
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 200 characters; contains 204 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
121
            [EditTrail::class, 'save', $trailUuid, $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), $trailUuid, 'Edit trail service'],
122
            [DeleteTrail::class, 'delete', true, $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), true, 'Delete trail service'],
123
            [GetTrail::class, 'get', $trail, $this->getMockForAbstractClass(AbstractTrailRepository::class), $trailUuid, $this->createMock(LoggerInterface::class), $trail, 'Get trail service'],
124
            [ListTrails::class, 'getList', [$trail], $this->getMockForAbstractClass(AbstractTrailRepository::class), $filters, $this->createMock(LoggerInterface::class), [$trail], 'List trails service'],
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 200 characters; contains 203 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
125
            [DeleteAuthor::class, 'delete', false, $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), false, 'Delete author service'],
126
            [GetAuthor::class, 'get', null, $this->getMockForAbstractClass(AbstractAuthorRepository::class), $authorUuid, $this->createMock(LoggerInterface::class), null, 'Get author service'],
127
            [ListAuthors::class, 'getList', [], $this->getMockForAbstractClass(AbstractAuthorRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List authors service'],
128
            [DeletePost::class, 'delete', false, $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), false, 'Delete post service'],
129
            [GetPost::class, 'get', null, $this->getMockForAbstractClass(AbstractPostRepository::class), $postUuid, $this->createMock(LoggerInterface::class), null, 'Get post service'],
130
            [ListPosts::class, 'getList', [], $this->getMockForAbstractClass(AbstractPostRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List posts service'],
131
            [DeleteTag::class, 'delete', false, $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), false, 'Delete tag service'],
132
            [GetTag::class, 'get', null, $this->getMockForAbstractClass(AbstractTagRepository::class), $tagUuid, $this->createMock(LoggerInterface::class), null, 'Get tag service'],
133
            [ListTags::class, 'getList', [], $this->getMockForAbstractClass(AbstractTagRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List tags service'],
134
            [DeleteTrail::class, 'delete', false, $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), false, 'Delete trail service'],
135
            [GetTrail::class, 'get', null, $this->getMockForAbstractClass(AbstractTrailRepository::class), $trailUuid, $this->createMock(LoggerInterface::class), null, 'Get trail service'],
136
            [ListTrails::class, 'getList', [], $this->getMockForAbstractClass(AbstractTrailRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List trails service']
137
        ];
138
    }
139
140
    public function exceptionServiceProvider()
141
    {
142
        $authorUuid = Uuid::uuid4()->toString();
143
        $postUuid = Uuid::uuid4()->toString();
144
        $tagUuid = Uuid::uuid4()->toString();
145
        $trailUuid = Uuid::uuid4()->toString();
146
147
        $author = new Author('Davis', '[email protected]', 'Some string', $authorUuid, new DateTime());
148
        $post = new Post('A Post', 'Lorem ipsum', $author, $postUuid, [], null);
149
        $tag = new Tag('A tag', $tagUuid);
150
        $trail = new Trail('A trail', 'An amazing trail', $trailUuid, [$post]);
151
        $filters = [];
152
153
        return [
154
            [CreateAuthor::class, 'save', $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), null, 'Create author service'],
155
            [EditAuthor::class, 'save', $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), null, 'Edit author service'],
156
            [DeleteAuthor::class, 'delete', $this->getMockForAbstractClass(AbstractAuthorRepository::class), $author, $this->createMock(LoggerInterface::class), false, 'Delete author service'],
157
            [GetAuthor::class, 'get', $this->getMockForAbstractClass(AbstractAuthorRepository::class), $authorUuid, $this->createMock(LoggerInterface::class), null, 'Get author service'],
158
            [ListAuthors::class, 'getList', $this->getMockForAbstractClass(AbstractAuthorRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List authors service'],
159
            [CreatePost::class, 'save', $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), null, 'Create post service'],
160
            [EditPost::class, 'save', $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), null, 'Edit post service'],
161
            [DeletePost::class, 'delete', $this->getMockForAbstractClass(AbstractPostRepository::class), $post, $this->createMock(LoggerInterface::class), false, 'Delete post service'],
162
            [GetPost::class, 'get', $this->getMockForAbstractClass(AbstractPostRepository::class), $postUuid, $this->createMock(LoggerInterface::class), null, 'Get post service'],
163
            [ListPosts::class, 'getList', $this->getMockForAbstractClass(AbstractPostRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List posts service'],
164
            [CreateTag::class, 'save', $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), null, 'Create tag service'],
165
            [EditTag::class, 'save', $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), null, 'Edit tag service'],
166
            [DeleteTag::class, 'delete', $this->getMockForAbstractClass(AbstractTagRepository::class), $tag, $this->createMock(LoggerInterface::class), false, 'Delete tag service'],
167
            [GetTag::class, 'get', $this->getMockForAbstractClass(AbstractTagRepository::class), $tagUuid, $this->createMock(LoggerInterface::class), null, 'Get tag service'],
168
            [ListTags::class, 'getList', $this->getMockForAbstractClass(AbstractTagRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List tags service'],
169
            [CreateTrail::class, 'save', $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), null, 'Create trail service'],
170
            [EditTrail::class, 'save', $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), null, 'Edit trail service'],
171
            [DeleteTrail::class, 'delete', $this->getMockForAbstractClass(AbstractTrailRepository::class), $trail, $this->createMock(LoggerInterface::class), false, 'Delete trail service'],
172
            [GetTrail::class, 'get', $this->getMockForAbstractClass(AbstractTrailRepository::class), $trailUuid, $this->createMock(LoggerInterface::class), null, 'Get trail service'],
173
            [ListTrails::class, 'getList', $this->getMockForAbstractClass(AbstractTrailRepository::class), $filters, $this->createMock(LoggerInterface::class), [], 'List trails service']
174
        ];
175
    }
176
}
177