X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/638104125283209d6e81035741fdbb3d412cf334..refs/pull/4467/head:/tests/Actions/AuditLogTest.php diff --git a/tests/Actions/AuditLogTest.php b/tests/Actions/AuditLogTest.php index 3f314a98c..5e355ca09 100644 --- a/tests/Actions/AuditLogTest.php +++ b/tests/Actions/AuditLogTest.php @@ -2,43 +2,38 @@ namespace Tests\Actions; -use BookStack\Actions\Activity; -use BookStack\Actions\ActivityService; -use BookStack\Actions\ActivityType; -use BookStack\Auth\UserRepo; -use BookStack\Entities\Models\Chapter; -use BookStack\Entities\Models\Page; +use BookStack\Activity\ActivityType; +use BookStack\Activity\Models\Activity; +use BookStack\Activity\Tools\ActivityLogger; use BookStack\Entities\Repos\PageRepo; use BookStack\Entities\Tools\TrashCan; +use BookStack\Users\UserRepo; use Carbon\Carbon; use Tests\TestCase; -use function app; -use function config; class AuditLogTest extends TestCase { - /** @var ActivityService */ - protected $activityService; + protected ActivityLogger $activityService; protected function setUp(): void { parent::setUp(); - $this->activityService = app(ActivityService::class); + $this->activityService = app(ActivityLogger::class); } public function test_only_accessible_with_right_permissions() { - $viewer = $this->getViewer(); + $viewer = $this->users->viewer(); $this->actingAs($viewer); $resp = $this->get('/settings/audit'); $this->assertPermissionError($resp); - $this->giveUserPermissions($viewer, ['settings-manage']); + $this->permissions->grantUserRolePermissions($viewer, ['settings-manage']); $resp = $this->get('/settings/audit'); $this->assertPermissionError($resp); - $this->giveUserPermissions($viewer, ['users-manage']); + $this->permissions->grantUserRolePermissions($viewer, ['users-manage']); $resp = $this->get('/settings/audit'); $resp->assertStatus(200); $resp->assertSeeText('Audit Log'); @@ -46,25 +41,25 @@ class AuditLogTest extends TestCase public function test_shows_activity() { - $admin = $this->getAdmin(); + $admin = $this->users->admin(); $this->actingAs($admin); - $page = Page::query()->first(); - $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE); + $page = $this->entities->page(); + $this->activityService->add(ActivityType::PAGE_CREATE, $page); $activity = Activity::query()->orderBy('id', 'desc')->first(); $resp = $this->get('settings/audit'); $resp->assertSeeText($page->name); $resp->assertSeeText('page_create'); $resp->assertSeeText($activity->created_at->toDateTimeString()); - $resp->assertElementContains('.table-user-item', $admin->name); + $this->withHtml($resp)->assertElementContains('a[href*="users/' . $admin->id . '"]', $admin->name); } public function test_shows_name_for_deleted_items() { - $this->actingAs($this->getAdmin()); - $page = Page::query()->first(); + $this->actingAs($this->users->admin()); + $page = $this->entities->page(); $pageName = $page->name; - $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE); + $this->activityService->add(ActivityType::PAGE_CREATE, $page); app(PageRepo::class)->destroy($page); app(TrashCan::class)->empty(); @@ -76,12 +71,12 @@ class AuditLogTest extends TestCase public function test_shows_activity_for_deleted_users() { - $viewer = $this->getViewer(); + $viewer = $this->users->viewer(); $this->actingAs($viewer); - $page = Page::query()->first(); - $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE); + $page = $this->entities->page(); + $this->activityService->add(ActivityType::PAGE_CREATE, $page); - $this->actingAs($this->getAdmin()); + $this->actingAs($this->users->admin()); app(UserRepo::class)->destroy($viewer); $resp = $this->get('settings/audit'); @@ -90,9 +85,9 @@ class AuditLogTest extends TestCase public function test_filters_by_key() { - $this->actingAs($this->getAdmin()); - $page = Page::query()->first(); - $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE); + $this->actingAs($this->users->admin()); + $page = $this->entities->page(); + $this->activityService->add(ActivityType::PAGE_CREATE, $page); $resp = $this->get('settings/audit'); $resp->assertSeeText($page->name); @@ -103,9 +98,9 @@ class AuditLogTest extends TestCase public function test_date_filters() { - $this->actingAs($this->getAdmin()); - $page = Page::query()->first(); - $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE); + $this->actingAs($this->users->admin()); + $page = $this->entities->page(); + $this->activityService->add(ActivityType::PAGE_CREATE, $page); $yesterday = (Carbon::now()->subDay()->format('Y-m-d')); $tomorrow = (Carbon::now()->addDay()->format('Y-m-d')); @@ -125,15 +120,15 @@ class AuditLogTest extends TestCase public function test_user_filter() { - $admin = $this->getAdmin(); - $editor = $this->getEditor(); + $admin = $this->users->admin(); + $editor = $this->users->editor(); $this->actingAs($admin); - $page = Page::query()->first(); - $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE); + $page = $this->entities->page(); + $this->activityService->add(ActivityType::PAGE_CREATE, $page); $this->actingAs($editor); - $chapter = Chapter::query()->first(); - $this->activityService->addForEntity($chapter, ActivityType::CHAPTER_UPDATE); + $chapter = $this->entities->chapter(); + $this->activityService->add(ActivityType::CHAPTER_UPDATE, $chapter); $resp = $this->actingAs($admin)->get('settings/audit?user=' . $admin->id); $resp->assertSeeText($page->name); @@ -147,9 +142,8 @@ class AuditLogTest extends TestCase public function test_ip_address_logged_and_visible() { config()->set('app.proxies', '*'); - $editor = $this->getEditor(); - /** @var Page $page */ - $page = Page::query()->first(); + $editor = $this->users->editor(); + $page = $this->entities->page(); $this->actingAs($editor)->put($page->getUrl(), [ 'name' => 'Updated page', @@ -169,13 +163,37 @@ class AuditLogTest extends TestCase $resp->assertSee('192.123.45.1'); } + public function test_ip_address_is_searchable() + { + config()->set('app.proxies', '*'); + $editor = $this->users->editor(); + $page = $this->entities->page(); + + $this->actingAs($editor)->put($page->getUrl(), [ + 'name' => 'Updated page', + 'html' => '
Updated content
', + ], [ + 'X-Forwarded-For' => '192.123.45.1', + ])->assertRedirect($page->refresh()->getUrl()); + + $this->actingAs($editor)->put($page->getUrl(), [ + 'name' => 'Updated page', + 'html' => 'Updated content
', + ], [ + 'X-Forwarded-For' => '192.122.45.1', + ])->assertRedirect($page->refresh()->getUrl()); + + $resp = $this->asAdmin()->get('/settings/audit?&ip=192.123'); + $resp->assertSee('192.123.45.1'); + $resp->assertDontSee('192.122.45.1'); + } + public function test_ip_address_not_logged_in_demo_mode() { config()->set('app.proxies', '*'); config()->set('app.env', 'demo'); - $editor = $this->getEditor(); - /** @var Page $page */ - $page = Page::query()->first(); + $editor = $this->users->editor(); + $page = $this->entities->page(); $this->actingAs($editor)->put($page->getUrl(), [ 'name' => 'Updated page', @@ -192,4 +210,26 @@ class AuditLogTest extends TestCase 'entity_id' => $page->id, ]); } + + public function test_ip_address_respects_precision_setting() + { + config()->set('app.proxies', '*'); + config()->set('app.ip_address_precision', 2); + $editor = $this->users->editor(); + $page = $this->entities->page(); + + $this->actingAs($editor)->put($page->getUrl(), [ + 'name' => 'Updated page', + 'html' => 'Updated content
', + ], [ + 'X-Forwarded-For' => '192.123.45.1', + ])->assertRedirect($page->refresh()->getUrl()); + + $this->assertDatabaseHas('activities', [ + 'type' => ActivityType::PAGE_UPDATE, + 'ip' => '192.123.x.x', + 'user_id' => $editor->id, + 'entity_id' => $page->id, + ]); + } }