AuditHookTest   A
last analyzed

Complexity

Total Complexity 25

Size/Duplication

Total Lines 321
Duplicated Lines 0 %

Importance

Changes 6
Bugs 0 Features 0
Metric Value
eloc 181
c 6
b 0
f 0
dl 0
loc 321
rs 10
wmc 25

18 Methods

Rating   Name   Duplication   Size   Complexity  
A testAutoLoggingIn() 0 11 1
A testLoggingWriteDoesNotOccurWhenNotLoggedIn() 0 9 1
A setUp() 0 9 1
A testLoggingIn() 0 7 1
A testPublishPage() 0 18 2
A testDelete() 0 20 2
A testLoggingOut() 0 10 1
A testRemoveMemberFromGroupUsingMemberGroupsRelation() 0 17 1
A testRevertToLive() 0 22 2
A testRemoveMemberFromGroupUsingGroupMembersRelation() 0 17 1
A testDuplicatePage() 0 18 2
A testAddMemberToGroupUsingGroupMembersRelation() 0 16 1
A testAddRoleCodeToRole() 0 14 1
A testAddViewerGroupToPage() 0 21 2
A testLoggingWriteWhenLoggedIn() 0 11 1
A testUnpublishPage() 0 19 2
A testRestoreToStage() 0 23 2
A testAddMemberToGroupUsingMemberGroupsRelation() 0 16 1
1
<?php
2
3
namespace SilverStripe\Auditor\Tests;
4
5
use Page;
0 ignored issues
show
Bug introduced by
The type Page was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use SilverStripe\Auditor\Tests\AuditHookTest\Logger;
7
use SilverStripe\Core\Injector\Injector;
8
use SilverStripe\Dev\FunctionalTest;
9
use SilverStripe\Security\Group;
10
use SilverStripe\Security\Member;
11
use SilverStripe\Security\PermissionRole;
12
use SilverStripe\Security\PermissionRoleCode;
13
14
class AuditHookTest extends FunctionalTest
15
{
16
    protected $usesDatabase = true;
17
18
    /**
19
     * @var Logger
20
     */
21
    protected $writer = null;
22
23
    protected function setUp()
24
    {
25
        parent::setUp();
26
27
        $this->writer = new Logger;
28
29
        // Phase singleton out, so the message log is purged.
30
        Injector::inst()->unregisterNamedObject('AuditLogger');
31
        Injector::inst()->registerService($this->writer, 'AuditLogger');
32
    }
33
34
    public function testLoggingIn()
35
    {
36
        $this->logInWithPermission('ADMIN');
37
38
        $message = $this->writer->getLastMessage();
39
        $this->assertContains('[email protected]', $message);
40
        $this->assertContains('successfully logged in', $message);
41
    }
42
43
    public function testAutoLoggingIn()
44
    {
45
        // Simulate an autologin by calling the extension hook directly.
46
        // Member->autoLogin() relies on session and cookie state which we can't simulate here.
47
        $this->logInWithPermission('ADMIN');
48
        $member = Member::get()->filter(array('Email' => '[email protected]'))->first();
49
        $member->extend('memberAutoLoggedIn');
50
51
        $message = $this->writer->getLastMessage();
52
        $this->assertContains('[email protected]', $message);
53
        $this->assertContains('successfully restored autologin', $message);
54
    }
55
56
    public function testLoggingOut()
57
    {
58
        $this->logInWithPermission('ADMIN');
59
60
        $member = Member::get()->filter(array('Email' => '[email protected]'))->first();
0 ignored issues
show
Unused Code introduced by
The assignment to $member is dead and can be removed.
Loading history...
61
        $this->logOut();
62
63
        $message = $this->writer->getLastMessage();
64
        $this->assertContains('[email protected]', $message);
65
        $this->assertContains('successfully logged out', $message);
66
    }
67
68
    public function testLoggingWriteDoesNotOccurWhenNotLoggedIn()
69
    {
70
        $this->logOut();
71
72
        $group = new Group(array('Title' => 'My group'));
73
        $group->write();
74
75
        $message = $this->writer->getLastMessage();
76
        $this->assertEmpty($message, 'No one is logged in, so nothing was logged');
77
    }
78
79
    public function testLoggingWriteWhenLoggedIn()
80
    {
81
        $this->logInWithPermission('ADMIN');
82
83
        $group = new Group(array('Title' => 'My group'));
84
        $group->write();
85
86
        $message = $this->writer->getLastMessage();
87
        $this->assertContains('[email protected]', $message);
88
        $this->assertContains('modified', $message);
89
        $this->assertContains(Group::class, $message);
90
    }
91
92
    public function testAddMemberToGroupUsingGroupMembersRelation()
93
    {
94
        $this->logInWithPermission('ADMIN');
95
96
        $group = new Group(array('Title' => 'My group'));
97
        $group->write();
98
99
        $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe1'));
100
        $member->write();
101
102
        $group->Members()->add($member);
103
104
        $message = $this->writer->getLastMessage();
105
        $this->assertContains('[email protected]', $message);
106
        $this->assertContains('added Member "joe1"', $message);
107
        $this->assertContains('to Group "My group"', $message);
108
    }
109
110
    public function testAddMemberToGroupUsingMemberGroupsRelation()
111
    {
112
        $this->logInWithPermission('ADMIN');
113
114
        $group = new Group(array('Title' => 'My group'));
115
        $group->write();
116
117
        $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe2'));
118
        $member->write();
119
120
        $member->Groups()->add($group);
121
122
        $message = $this->writer->getLastMessage();
123
        $this->assertContains('[email protected]', $message);
124
        $this->assertContains('added Member "joe2"', $message);
125
        $this->assertContains('to Group "My group"', $message);
126
    }
127
128
    public function testRemoveMemberFromGroupUsingGroupMembersRelation()
129
    {
130
        $this->logInWithPermission('ADMIN');
131
132
        $group = new Group(array('Title' => 'My group'));
133
        $group->write();
134
135
        $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe3'));
136
        $member->write();
137
138
        $group->Members()->add($member);
139
        $group->Members()->remove($member);
140
141
        $message = $this->writer->getLastMessage();
142
        $this->assertContains('[email protected]', $message);
143
        $this->assertContains('removed Member "joe3"', $message);
144
        $this->assertContains('from Group "My group"', $message);
145
    }
146
147
    public function testRemoveMemberFromGroupUsingMemberGroupsRelation()
148
    {
149
        $this->logInWithPermission('ADMIN');
150
151
        $group = new Group(array('Title' => 'My group'));
152
        $group->write();
153
154
        $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe4'));
155
        $member->write();
156
157
        $member->Groups()->add($group);
158
        $member->Groups()->remove($group);
159
160
        $message = $this->writer->getLastMessage();
161
        $this->assertContains('[email protected]', $message);
162
        $this->assertContains('removed Member "joe4"', $message);
163
        $this->assertContains('from Group "My group"', $message);
164
    }
165
166
    public function testAddRoleCodeToRole()
167
    {
168
        $this->logInWithPermission('ADMIN');
169
170
        $roleCode = new PermissionRoleCode(['Code' => 'grand_ruler']);
171
        $roleCode->write();
172
173
        $permissionRole = new PermissionRole(['Title' => 'Grand Ruler']);
174
        $permissionRole->Codes()->add($roleCode);
175
        $permissionRole->write();
176
177
        $message = $this->writer->getLastMessage();
178
        $this->assertContains('Effective code', $message);
179
        $this->assertContains('grand_ruler', $message);
180
    }
181
182
    public function testAddViewerGroupToPage()
183
    {
184
        if (!class_exists(Page::class)) {
185
            $this->markTestSkipped('This test requires the CMS module installed.');
186
        }
187
188
        $this->logInWithPermission('ADMIN');
189
190
        $group = new Group();
191
        $group->Title = 'Test group';
192
        $group->write();
193
194
        $page = new Page();
195
        $page->CanViewType = 'OnlyTheseUsers';
196
        $page->ViewerGroups()->add($group);
197
        $page->write();
198
        $page->publishSingle();
199
200
        $message = $this->writer->getLastMessage();
201
        $this->assertContains('Effective ViewerGroups', $message);
202
        $this->assertContains('OnlyTheseUsers', $message);
203
    }
204
205
    public function testPublishPage()
206
    {
207
        if (!class_exists(Page::class)) {
208
            $this->markTestSkipped('This test requires the CMS module installed.');
209
        }
210
211
        $this->logInWithPermission('ADMIN');
212
213
        $page = new Page();
214
        $page->Title = 'My page';
215
        $page->Content = 'This is my page content';
216
        $page->write();
217
        $page->publishSingle();
218
219
        $message = $this->writer->getLastMessage();
220
        $this->assertContains('[email protected]', $message);
221
        $this->assertContains('published Page', $message);
222
        $this->assertContains('My page', $message);
223
    }
224
225
    public function testUnpublishPage()
226
    {
227
        if (!class_exists(Page::class)) {
228
            $this->markTestSkipped('This test requires the CMS module installed.');
229
        }
230
231
        $this->logInWithPermission('ADMIN');
232
233
        $page = new Page();
234
        $page->Title = 'My page';
235
        $page->Content = 'This is my page content';
236
        $page->write();
237
        $page->publishSingle();
238
        $page->doUnpublish();
239
240
        $message = $this->writer->getLastMessage();
241
        $this->assertContains('[email protected]', $message);
242
        $this->assertContains('unpublished Page', $message);
243
        $this->assertContains('My page', $message);
244
    }
245
246
    public function testDuplicatePage()
247
    {
248
        if (!class_exists(Page::class)) {
249
            $this->markTestSkipped('This test requires the CMS module installed.');
250
        }
251
252
        $this->logInWithPermission('ADMIN');
253
254
        $page = new Page();
255
        $page->Title = 'My page';
256
        $page->Content = 'This is my page content';
257
        $page->write();
258
        $page->duplicate();
259
260
        $message = $this->writer->getLastMessage();
261
        $this->assertContains('[email protected]', $message);
262
        $this->assertContains('duplicated Page', $message);
263
        $this->assertContains('My page', $message);
264
    }
265
266
    public function testRevertToLive()
267
    {
268
        if (!class_exists(Page::class)) {
269
            $this->markTestSkipped('This test requires the CMS module installed.');
270
        }
271
272
        $this->logInWithPermission('ADMIN');
273
274
        $page = new Page();
275
        $page->Title = 'My page';
276
        $page->Content = 'This is my page content';
277
        $page->write();
278
        $page->publishSingle();
279
280
        $page->Content = 'Changed';
281
        $page->write();
282
        $page->doRevertToLive();
283
284
        $message = $this->writer->getLastMessage();
285
        $this->assertContains('[email protected]', $message);
286
        $this->assertContains('reverted Page', $message);
287
        $this->assertContains('My page', $message);
288
    }
289
290
    public function testDelete()
291
    {
292
        if (!class_exists(Page::class)) {
293
            $this->markTestSkipped('This test requires the CMS module installed.');
294
        }
295
296
        $this->logInWithPermission('ADMIN');
297
298
        $page = new Page();
299
        $page->Title = 'My page';
300
        $page->Content = 'This is my page content';
301
        $page->write();
302
        $page->publishSingle();
303
304
        $page->delete();
305
306
        $message = $this->writer->getLastMessage();
307
        $this->assertContains('[email protected]', $message);
308
        $this->assertContains('deleted Page', $message);
309
        $this->assertContains('My page', $message);
310
    }
311
312
    public function testRestoreToStage()
313
    {
314
        if (!class_exists(Page::class)) {
315
            $this->markTestSkipped('This test requires the CMS module installed.');
316
        }
317
318
        $this->logInWithPermission('ADMIN');
319
320
        $page = new Page();
321
        $page->Title = 'My page';
322
        $page->Content = 'Published';
323
        $page->write();
324
        $page->publishSingle();
325
326
        $page->Content = 'This is my page content';
327
        $page->write();
328
        $page->publishSingle();
329
        $page->delete();
330
331
        $message = $this->writer->getLastMessage();
332
        $this->assertContains('[email protected]', $message);
333
        $this->assertContains('deleted Page', $message);
334
        $this->assertContains('My page', $message);
335
    }
336
}
337