Completed
Push — master ( e36c0e...593867 )
by Damian
03:12 queued 01:16
created

tests/AuditHookTest.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace SilverStripe\Auditor;
4
5
class AuditHookTest extends \FunctionalTest
6
{
7
8
    protected $usesDatabase = true;
9
10
    protected $writer = null;
11
12
    public function setUp()
13
    {
14
        parent::setUp();
15
16
        $this->writer = new AuditLoggerTest_Logger;
17
		// Phase singleton out, so the message log is purged.
18
		\Injector::inst()->unregisterNamedObject('AuditLogger');
19
		\Injector::inst()->registerService($this->writer, 'AuditLogger');
20
21
        // ensure the manipulations are being captured, normally called in {@link AuditLogger::onBeforeInit()}
22
        // but tests will reset this during setting up, so we need to set it back again.
23
        AuditHook::bind_manipulation_capture();
24
    }
25
26
    public function testLoggingIn()
27
    {
28
        $this->logInWithPermission('ADMIN');
29
30
        $message = $this->writer->getLastMessage();
31
        $this->assertContains('[email protected]', $message);
32
        $this->assertContains('successfully logged in', $message);
33
    }
34
35 View Code Duplication
    public function testAutoLoggingIn()
36
    {
37
        // Simulate an autologin by calling the extension hook directly.
38
        // Member->autoLogin() relies on session and cookie state which we can't simulate here.
39
        $this->logInWithPermission('ADMIN');
40
        $member = \Member::get()->filter(array('Email' => '[email protected]'))->first();
41
        $member->extend('memberAutoLoggedIn');
42
43
        $message = $this->writer->getLastMessage();
44
        $this->assertContains('[email protected]', $message);
45
        $this->assertContains('successfully restored autologin', $message);
46
    }
47
48 View Code Duplication
    public function testLoggingOut()
49
    {
50
        $this->logInWithPermission('ADMIN');
51
52
        $member = \Member::get()->filter(array('Email' => '[email protected]'))->first();
53
        $member->logOut();
54
55
        $message = $this->writer->getLastMessage();
56
        $this->assertContains('[email protected]', $message);
57
        $this->assertContains('successfully logged out', $message);
58
    }
59
60
    public function testLoggingWriteDoesNotOccurWhenNotLoggedIn()
61
    {
62
        $this->session()->inst_set('loggedInAs', null);
63
64
        $group = new \Group(array('Title' => 'My group'));
65
        $group->write();
66
67
        $message = $this->writer->getLastMessage();
68
        $this->assertEmpty($message, 'No one is logged in, so nothing was logged');
0 ignored issues
show
The method assertEmpty() does not seem to exist on object<SilverStripe\Auditor\AuditHookTest>.

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
69
    }
70
71 View Code Duplication
    public function testLoggingWriteWhenLoggedIn()
72
    {
73
        $this->logInWithPermission('ADMIN');
74
75
        $group = new \Group(array('Title' => 'My group'));
76
        $group->write();
77
78
        $message = $this->writer->getLastMessage();
79
        $this->assertContains('[email protected]', $message);
80
        $this->assertContains('modified', $message);
81
        $this->assertContains('Group', $message);
82
    }
83
84 View Code Duplication
    public function testAddMemberToGroupUsingGroupMembersRelation()
85
    {
86
        $this->logInWithPermission('ADMIN');
87
88
        $group = new \Group(array('Title' => 'My group'));
89
        $group->write();
90
91
        $member = new \Member(array('FirstName' => 'Joe', 'Email' => 'joe1'));
92
        $member->write();
93
94
        $group->Members()->add($member);
95
96
        $message = $this->writer->getLastMessage();
97
        $this->assertContains('[email protected]', $message);
98
        $this->assertContains('added Member "joe1"', $message);
99
        $this->assertContains('to Group "My group"', $message);
100
    }
101
102 View Code Duplication
    public function testAddMemberToGroupUsingMemberGroupsRelation()
103
    {
104
        $this->logInWithPermission('ADMIN');
105
106
        $group = new \Group(array('Title' => 'My group'));
107
        $group->write();
108
109
        $member = new \Member(array('FirstName' => 'Joe', 'Email' => 'joe2'));
110
        $member->write();
111
112
        $member->Groups()->add($group);
113
114
        $message = $this->writer->getLastMessage();
115
        $this->assertContains('[email protected]', $message);
116
        $this->assertContains('added Member "joe2"', $message);
117
        $this->assertContains('to Group "My group"', $message);
118
    }
119
120 View Code Duplication
    public function testRemoveMemberFromGroupUsingGroupMembersRelation()
121
    {
122
        $this->logInWithPermission('ADMIN');
123
124
        $group = new \Group(array('Title' => 'My group'));
125
        $group->write();
126
127
        $member = new \Member(array('FirstName' => 'Joe', 'Email' => 'joe3'));
128
        $member->write();
129
130
        $group->Members()->add($member);
131
        $group->Members()->remove($member);
132
133
        $message = $this->writer->getLastMessage();
134
        $this->assertContains('[email protected]', $message);
135
        $this->assertContains('removed Member "joe3"', $message);
136
        $this->assertContains('from Group "My group"', $message);
137
    }
138
139 View Code Duplication
    public function testRemoveMemberFromGroupUsingMemberGroupsRelation()
140
    {
141
        $this->logInWithPermission('ADMIN');
142
143
        $group = new \Group(array('Title' => 'My group'));
144
        $group->write();
145
146
        $member = new \Member(array('FirstName' => 'Joe', 'Email' => 'joe4'));
147
        $member->write();
148
149
        $member->Groups()->add($group);
150
        $member->Groups()->remove($group);
151
152
        $message = $this->writer->getLastMessage();
153
        $this->assertContains('[email protected]', $message);
154
        $this->assertContains('removed Member "joe4"', $message);
155
        $this->assertContains('from Group "My group"', $message);
156
    }
157
158
    public function testPublishPage()
159
    {
160
        $this->logInWithPermission('ADMIN');
161
162
        $page = new \Page();
163
        $page->Title = 'My page';
164
        $page->Content = 'This is my page content';
165
        $page->doPublish();
166
167
        $message = $this->writer->getLastMessage();
168
        $this->assertContains('[email protected]', $message);
169
        $this->assertContains('published Page', $message);
170
        $this->assertContains('My page', $message);
171
    }
172
173 View Code Duplication
    public function testUnpublishPage()
174
    {
175
        $this->logInWithPermission('ADMIN');
176
177
        $page = new \Page();
178
        $page->Title = 'My page';
179
        $page->Content = 'This is my page content';
180
        $page->doPublish();
181
        $page->doUnpublish();
182
183
        $message = $this->writer->getLastMessage();
184
        $this->assertContains('[email protected]', $message);
185
        $this->assertContains('unpublished Page', $message);
186
        $this->assertContains('My page', $message);
187
    }
188
189 View Code Duplication
    public function testDuplicatePage()
190
    {
191
        $this->logInWithPermission('ADMIN');
192
193
        $page = new \Page();
194
        $page->Title = 'My page';
195
        $page->Content = 'This is my page content';
196
        $page->write();
197
        $page->duplicate();
198
199
        $message = $this->writer->getLastMessage();
200
        $this->assertContains('[email protected]', $message);
201
        $this->assertContains('duplicated Page', $message);
202
        $this->assertContains('My page', $message);
203
    }
204
205 View Code Duplication
    public function testRevertToLive()
206
    {
207
        $this->logInWithPermission('ADMIN');
208
209
        $page = new \Page();
210
        $page->Title = 'My page';
211
        $page->Content = 'This is my page content';
212
        $page->doPublish();
213
214
        $page->Content = 'Changed';
215
        $page->write();
216
        $page->doRevertToLive();
217
218
        $message = $this->writer->getLastMessage();
219
        $this->assertContains('[email protected]', $message);
220
        $this->assertContains('reverted Page', $message);
221
        $this->assertContains('My page', $message);
222
    }
223
224 View Code Duplication
    public function testDelete()
225
    {
226
        $this->logInWithPermission('ADMIN');
227
228
        $page = new \Page();
229
        $page->Title = 'My page';
230
        $page->Content = 'This is my page content';
231
        $page->doPublish();
232
233
        $page->delete();
234
235
        $message = $this->writer->getLastMessage();
236
        $this->assertContains('[email protected]', $message);
237
        $this->assertContains('deleted Page', $message);
238
        $this->assertContains('My page', $message);
239
    }
240
241 View Code Duplication
    public function testRestoreToStage()
242
    {
243
        $this->logInWithPermission('ADMIN');
244
245
        $page = new \Page();
246
        $page->Title = 'My page';
247
        $page->Content = 'Published';
248
        $page->doPublish();
249
250
        $page->Content = 'This is my page content';
251
        $page->doPublish();
252
        $page->delete();
253
254
        $message = $this->writer->getLastMessage();
255
        $this->assertContains('[email protected]', $message);
256
        $this->assertContains('deleted Page', $message);
257
        $this->assertContains('My page', $message);
258
    }
259
260
    public function tearDown()
261
    {
262
        parent::tearDown();
263
264
        \SS_Log::remove_writer($this->writer);
265
        unset($this->writer);
266
    }
267
}
268
269
class AuditLoggerTest_Logger extends \Psr\Log\AbstractLogger
270
{
271
    protected $messages = array();
272
273
	public function log($level, $message, array $context = array())
274
    {
275
        array_push($this->messages, $message);
276
	}
277
278
    public function getLastMessage()
279
    {
280
        return end($this->messages);
281
    }
282
283
    public function getMessages()
284
    {
285
        return $this->messages;
286
    }
287
}
288