Source of file AuditHookTest.php
Size: 11,094 Bytes - Last Modified: 2021-12-23T10:28:01+00:00
/var/www/docs.ssmods.com/process/src/tests/AuditHookTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 | <?php namespace SilverStripe\Auditor\Tests; use Page; use SilverStripe\Auditor\Tests\AuditHookTest\Logger; use SilverStripe\Core\Injector\Injector; use SilverStripe\Dev\FunctionalTest; use SilverStripe\Security\Group; use SilverStripe\Security\Member; use SilverStripe\Security\PermissionRole; use SilverStripe\Security\PermissionRoleCode; class AuditHookTest extends FunctionalTest { protected $usesDatabase = true; /** * @var Logger */ protected $writer = null; protected function setUp(): void { parent::setUp(); $this->writer = new Logger; // Phase singleton out, so the message log is purged. Injector::inst()->unregisterNamedObject('AuditLogger'); Injector::inst()->registerService($this->writer, 'AuditLogger'); } public function testLoggingIn() { $this->logInWithPermission('ADMIN'); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('successfully logged in', $message); } public function testAutoLoggingIn() { // Simulate an autologin by calling the extension hook directly. // Member->autoLogin() relies on session and cookie state which we can't simulate here. $this->logInWithPermission('ADMIN'); $member = Member::get()->filter(array('Email' => 'ADMIN@example.org'))->first(); $member->extend('memberAutoLoggedIn'); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('successfully restored autologin', $message); } public function testLoggingOut() { $this->logInWithPermission('ADMIN'); $member = Member::get()->filter(array('Email' => 'ADMIN@example.org'))->first(); $this->logOut(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('successfully logged out', $message); } public function testLoggingWriteDoesNotOccurWhenNotLoggedIn() { $this->logOut(); $group = new Group(array('Title' => 'My group')); $group->write(); $message = $this->writer->getLastMessage(); $this->assertEmpty($message, 'No one is logged in, so nothing was logged'); } public function testLoggingWriteWhenLoggedIn() { $this->logInWithPermission('ADMIN'); $group = new Group(array('Title' => 'My group')); $group->write(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('modified', $message); $this->assertStringContainsString(Group::class, $message); } public function testAddMemberToGroupUsingGroupMembersRelation() { $this->logInWithPermission('ADMIN'); $group = new Group(array('Title' => 'My group')); $group->write(); $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe1')); $member->write(); $group->Members()->add($member); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('added Member "joe1"', $message); $this->assertStringContainsString('to Group "My group"', $message); } public function testAddMemberToGroupUsingMemberGroupsRelation() { $this->logInWithPermission('ADMIN'); $group = new Group(array('Title' => 'My group')); $group->write(); $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe2')); $member->write(); $member->Groups()->add($group); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('added Member "joe2"', $message); $this->assertStringContainsString('to Group "My group"', $message); } public function testRemoveMemberFromGroupUsingGroupMembersRelation() { $this->logInWithPermission('ADMIN'); $group = new Group(array('Title' => 'My group')); $group->write(); $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe3')); $member->write(); $group->Members()->add($member); $group->Members()->remove($member); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('removed Member "joe3"', $message); $this->assertStringContainsString('from Group "My group"', $message); } public function testRemoveMemberFromGroupUsingMemberGroupsRelation() { $this->logInWithPermission('ADMIN'); $group = new Group(array('Title' => 'My group')); $group->write(); $member = new Member(array('FirstName' => 'Joe', 'Email' => 'joe4')); $member->write(); $member->Groups()->add($group); $member->Groups()->remove($group); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('removed Member "joe4"', $message); $this->assertStringContainsString('from Group "My group"', $message); } public function testAddRoleCodeToRole() { $this->logInWithPermission('ADMIN'); $roleCode = new PermissionRoleCode(['Code' => 'grand_ruler']); $roleCode->write(); $permissionRole = new PermissionRole(['Title' => 'Grand Ruler']); $permissionRole->Codes()->add($roleCode); $permissionRole->write(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('Effective code', $message); $this->assertStringContainsString('grand_ruler', $message); } public function testAddViewerGroupToPage() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $group = new Group(); $group->Title = 'Test group'; $group->write(); $page = new Page(); $page->CanViewType = 'OnlyTheseUsers'; $page->ViewerGroups()->add($group); $page->write(); $page->publishSingle(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('Effective ViewerGroups', $message); $this->assertStringContainsString('OnlyTheseUsers', $message); } public function testPublishPage() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $page = new Page(); $page->Title = 'My page'; $page->Content = 'This is my page content'; $page->write(); $page->publishSingle(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('published Page', $message); $this->assertStringContainsString('My page', $message); } public function testUnpublishPage() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $page = new Page(); $page->Title = 'My page'; $page->Content = 'This is my page content'; $page->write(); $page->publishSingle(); $page->doUnpublish(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('unpublished Page', $message); $this->assertStringContainsString('My page', $message); } public function testDuplicatePage() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $page = new Page(); $page->Title = 'My page'; $page->Content = 'This is my page content'; $page->write(); $page->duplicate(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('duplicated Page', $message); $this->assertStringContainsString('My page', $message); } public function testRevertToLive() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $page = new Page(); $page->Title = 'My page'; $page->Content = 'This is my page content'; $page->write(); $page->publishSingle(); $page->Content = 'Changed'; $page->write(); $page->doRevertToLive(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('reverted Page', $message); $this->assertStringContainsString('My page', $message); } public function testDelete() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $page = new Page(); $page->Title = 'My page'; $page->Content = 'This is my page content'; $page->write(); $page->publishSingle(); $page->delete(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('deleted Page', $message); $this->assertStringContainsString('My page', $message); } public function testRestoreToStage() { if (!class_exists(Page::class)) { $this->markTestSkipped('This test requires the CMS module installed.'); } $this->logInWithPermission('ADMIN'); $page = new Page(); $page->Title = 'My page'; $page->Content = 'Published'; $page->write(); $page->publishSingle(); $page->Content = 'This is my page content'; $page->write(); $page->publishSingle(); $page->delete(); $message = $this->writer->getLastMessage(); $this->assertStringContainsString('ADMIN@example.org', $message); $this->assertStringContainsString('deleted Page', $message); $this->assertStringContainsString('My page', $message); } } |