Completed
Push — master ( 5783ee...5f67eb )
by Łukasz
33:07
created

testGetNotificationCount()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
declare(strict_types=1);
8
9
namespace eZ\Publish\API\Repository\Tests;
10
11
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
12
use eZ\Publish\API\Repository\Values\Notification\CreateStruct;
13
use eZ\Publish\API\Repository\Values\Notification\Notification;
14
use eZ\Publish\API\Repository\Values\Notification\NotificationList;
15
16
/**
17
 * Test case for the NotificationService.
18
 *
19
 * @see \eZ\Publish\API\Repository\NotificationService
20
 */
21
class NotificationServiceTest extends BaseTest
22
{
23
    /**
24
     * @covers \eZ\Publish\API\Repository\NotificationService::loadNotifications()
25
     */
26
    public function testLoadNotifications()
27
    {
28
        $repository = $this->getRepository();
29
30
        /* BEGIN: Use Case */
31
        $notificationService = $repository->getNotificationService();
32
        $notificationList = $notificationService->loadNotifications(0, 25);
33
        /* END: Use Case */
34
35
        $this->assertInstanceOf(NotificationList::class, $notificationList);
36
        $this->assertInternalType('array', $notificationList->items);
37
        $this->assertInternalType('int', $notificationList->totalCount);
38
        $this->assertEquals(5, $notificationList->totalCount);
39
    }
40
41
    /**
42
     * @covers \eZ\Publish\API\Repository\NotificationService::getNotification()
43
     */
44
    public function testGetNotification()
45
    {
46
        $repository = $this->getRepository();
47
48
        $notificationId = $this->generateId('notification', 5);
49
50
        /* BEGIN: Use Case */
51
        $notificationService = $repository->getNotificationService();
52
        // $notificationId is the ID of an existing notification
53
        $notification = $notificationService->getNotification($notificationId);
54
        /* END: Use Case */
55
56
        $this->assertInstanceOf(Notification::class, $notification);
57
        $this->assertEquals($notificationId, $notification->id);
58
    }
59
60
    /**
61
     * @covers \eZ\Publish\API\Repository\NotificationService::markNotificationAsRead()
62
     */
63
    public function testMarkNotificationAsRead()
64
    {
65
        $repository = $this->getRepository();
66
67
        $notificationId = $this->generateId('notification', 5);
68
        /* BEGIN: Use Case */
69
        $notificationService = $repository->getNotificationService();
70
71
        $notification = $notificationService->getNotification($notificationId);
72
        $notificationService->markNotificationAsRead($notification);
73
        $notification = $notificationService->getNotification($notificationId);
74
        /* END: Use Case */
75
76
        $this->assertFalse($notification->isPending);
77
    }
78
79
    /**
80
     * @covers \eZ\Publish\API\Repository\NotificationService::getPendingNotificationCount()
81
     */
82
    public function testGetPendingNotificationCount()
83
    {
84
        $repository = $this->getRepository();
85
86
        /* BEGIN: Use Case */
87
        $notificationService = $repository->getNotificationService();
88
        $notificationPendingCount = $notificationService->getPendingNotificationCount();
89
        /* END: Use Case */
90
91
        $this->assertEquals(3, $notificationPendingCount);
92
    }
93
94
    /**
95
     * @covers \eZ\Publish\API\Repository\NotificationService::getNotificationCount()
96
     */
97
    public function testGetNotificationCount()
98
    {
99
        $repository = $this->getRepository();
100
101
        /* BEGIN: Use Case */
102
        $notificationService = $repository->getNotificationService();
103
        $notificationCount = $notificationService->getNotificationCount();
104
        /* END: Use Case */
105
106
        $this->assertEquals(5, $notificationCount);
107
    }
108
109
    /**
110
     * @covers \eZ\Publish\API\Repository\NotificationService::deleteNotification()
111
     */
112 View Code Duplication
    public function testDeleteNotification()
113
    {
114
        $repository = $this->getRepository();
115
116
        $notificationId = $this->generateId('notification', 5);
117
        /* BEGIN: Use Case */
118
        $notificationService = $repository->getNotificationService();
119
        $notification = $notificationService->getNotification($notificationId);
120
        $notificationService->deleteNotification($notification);
121
        /* END: Use Case */
122
123
        try {
124
            $notificationService->getNotification($notificationId);
125
            $this->fail('Notification ' . $notificationId . ' not deleted.');
126
        } catch (NotFoundException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
127
        }
128
    }
129
130
    /**
131
     * @covers \eZ\Publish\API\Repository\NotificationService::createNotification()
132
     */
133
    public function testCreateNotification()
134
    {
135
        $repository = $this->getRepository();
136
137
        /* BEGIN: Use Case */
138
        $notificationService = $repository->getNotificationService();
139
        $user = $repository->getUserService()->loadUser(14);
140
141
        $createStruct = new CreateStruct([
142
            'ownerId' => $user->id,
143
            'type' => 'TEST',
144
            'data' => [
145
                'foo' => 'Foo',
146
                'bar' => 'Bar',
147
                'baz' => 'Baz',
148
            ],
149
        ]);
150
151
        $notification = $notificationService->createNotification($createStruct);
152
        /* END: Use Case */
153
154
        $this->assertInstanceOf(Notification::class, $notification);
155
        $this->assertGreaterThan(0, $notification->id);
156
    }
157
158
    /**
159
     * @covers \eZ\Publish\API\Repository\NotificationService::createNotification()
160
     * @depends testCreateNotification
161
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
162
     */
163 View Code Duplication
    public function testCreateNotificationThrowsInvalidArgumentExceptionOnMissingOwner()
164
    {
165
        $repository = $this->getRepository();
166
167
        /* BEGIN: Use Case */
168
        $notificationService = $repository->getNotificationService();
169
170
        $createStruct = new CreateStruct([
171
            'type' => 'TEST',
172
        ]);
173
174
        // This call will fail because notification owner is not specified
175
        $notificationService->createNotification($createStruct);
176
        /* END: Use Case */
177
    }
178
179
    /**
180
     * @covers \eZ\Publish\API\Repository\NotificationService::createNotification()
181
     * @depends testCreateNotification
182
     * @expectedException \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException
183
     */
184 View Code Duplication
    public function testCreateNotificationThrowsInvalidArgumentExceptionOnMissingType()
185
    {
186
        $repository = $this->getRepository();
187
188
        /* BEGIN: Use Case */
189
        $notificationService = $repository->getNotificationService();
190
191
        $createStruct = new CreateStruct([
192
            'ownerId' => 14,
193
        ]);
194
195
        // This call will fail because notification type is not specified
196
        $notificationService->createNotification($createStruct);
197
        /* END: Use Case */
198
    }
199
}
200