]> BookStack Code Mirror - bookstack/blob - tests/Activity/AuditLogApiTest.php
75cc364f8958baf43e5b8af1c2fc8014f15a59b5
[bookstack] / tests / Activity / AuditLogApiTest.php
1 <?php
2
3 namespace Activity;
4
5 use BookStack\Activity\ActivityType;
6 use BookStack\Facades\Activity;
7 use Tests\Api\TestsApi;
8 use Tests\TestCase;
9
10 class AuditLogApiTest extends TestCase
11 {
12     use TestsApi;
13
14     public function test_user_and_settings_manage_permissions_needed()
15     {
16         $editor = $this->users->editor();
17
18         $assertPermissionErrorOnCall = function () use ($editor) {
19             $resp = $this->actingAsForApi($editor)->getJson('/api/audit-log');
20             $resp->assertStatus(403);
21             $resp->assertJson($this->permissionErrorResponse());
22         };
23
24         $assertPermissionErrorOnCall();
25         $this->permissions->grantUserRolePermissions($editor, ['users-manage']);
26         $assertPermissionErrorOnCall();
27         $this->permissions->removeUserRolePermissions($editor, ['users-manage']);
28         $this->permissions->grantUserRolePermissions($editor, ['settings-manage']);
29         $assertPermissionErrorOnCall();
30
31         $this->permissions->grantUserRolePermissions($editor, ['settings-manage', 'users-manage']);
32         $resp = $this->actingAsForApi($editor)->getJson('/api/audit-log');
33         $resp->assertOk();
34     }
35
36     public function test_index_endpoint_returns_expected_data()
37     {
38         $page = $this->entities->page();
39         $admin = $this->users->admin();
40         $this->actingAsForApi($admin);
41         Activity::add(ActivityType::PAGE_UPDATE, $page);
42
43         $resp = $this->get("/api/audit-log?filter[loggable_id]={$page->id}");
44         $resp->assertJson(['data' => [
45             [
46                 'type' => 'page_update',
47                 'detail' => "({$page->id}) {$page->name}",
48                 'user_id' => $admin->id,
49                 'loggable_id' => $page->id,
50                 'loggable_type' => 'page',
51                 'ip' => '127.0.0.1',
52                 'user' => [
53                     'id' => $admin->id,
54                     'name' => $admin->name,
55                     'slug' => $admin->slug,
56                 ],
57             ]
58         ]]);
59     }
60 }