]> BookStack Code Mirror - bookstack/blobdiff - tests/Actions/AuditLogTest.php
Added 'Sort Book' action to chapters
[bookstack] / tests / Actions / AuditLogTest.php
index 3f314a98c07e164dcf02391defd49603b84d17c6..d699724f5129d1936e5f39f88fb1ff4f648eab17 100644 (file)
@@ -2,8 +2,9 @@
 
 namespace Tests\Actions;
 
+use function app;
 use BookStack\Actions\Activity;
-use BookStack\Actions\ActivityService;
+use BookStack\Actions\ActivityLogger;
 use BookStack\Actions\ActivityType;
 use BookStack\Auth\UserRepo;
 use BookStack\Entities\Models\Chapter;
@@ -11,19 +12,18 @@ use BookStack\Entities\Models\Page;
 use BookStack\Entities\Repos\PageRepo;
 use BookStack\Entities\Tools\TrashCan;
 use Carbon\Carbon;
-use Tests\TestCase;
-use function app;
 use function config;
+use Tests\TestCase;
 
 class AuditLogTest extends TestCase
 {
-    /** @var ActivityService */
+    /** @var ActivityLogger */
     protected $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()
@@ -49,14 +49,14 @@ class AuditLogTest extends TestCase
         $admin = $this->getAdmin();
         $this->actingAs($admin);
         $page = Page::query()->first();
-        $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE);
+        $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('.table-user-item', $admin->name);
     }
 
     public function test_shows_name_for_deleted_items()
@@ -64,7 +64,7 @@ class AuditLogTest extends TestCase
         $this->actingAs($this->getAdmin());
         $page = Page::query()->first();
         $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();
@@ -79,7 +79,7 @@ class AuditLogTest extends TestCase
         $viewer = $this->getViewer();
         $this->actingAs($viewer);
         $page = Page::query()->first();
-        $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE);
+        $this->activityService->add(ActivityType::PAGE_CREATE, $page);
 
         $this->actingAs($this->getAdmin());
         app(UserRepo::class)->destroy($viewer);
@@ -92,7 +92,7 @@ class AuditLogTest extends TestCase
     {
         $this->actingAs($this->getAdmin());
         $page = Page::query()->first();
-        $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE);
+        $this->activityService->add(ActivityType::PAGE_CREATE, $page);
 
         $resp = $this->get('settings/audit');
         $resp->assertSeeText($page->name);
@@ -105,7 +105,7 @@ class AuditLogTest extends TestCase
     {
         $this->actingAs($this->getAdmin());
         $page = Page::query()->first();
-        $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE);
+        $this->activityService->add(ActivityType::PAGE_CREATE, $page);
 
         $yesterday = (Carbon::now()->subDay()->format('Y-m-d'));
         $tomorrow = (Carbon::now()->addDay()->format('Y-m-d'));
@@ -129,11 +129,11 @@ class AuditLogTest extends TestCase
         $editor = $this->getEditor();
         $this->actingAs($admin);
         $page = Page::query()->first();
-        $this->activityService->addForEntity($page, ActivityType::PAGE_CREATE);
+        $this->activityService->add(ActivityType::PAGE_CREATE, $page);
 
         $this->actingAs($editor);
         $chapter = Chapter::query()->first();
-        $this->activityService->addForEntity($chapter, ActivityType::CHAPTER_UPDATE);
+        $this->activityService->add(ActivityType::CHAPTER_UPDATE, $chapter);
 
         $resp = $this->actingAs($admin)->get('settings/audit?user=' . $admin->id);
         $resp->assertSeeText($page->name);
@@ -169,6 +169,32 @@ class AuditLogTest extends TestCase
         $resp->assertSee('192.123.45.1');
     }
 
+    public function test_ip_address_is_searchable()
+    {
+        config()->set('app.proxies', '*');
+        $editor = $this->getEditor();
+        /** @var Page $page */
+        $page = Page::query()->first();
+
+        $this->actingAs($editor)->put($page->getUrl(), [
+            'name' => 'Updated page',
+            'html' => '<p>Updated content</p>',
+        ], [
+            'X-Forwarded-For' => '192.123.45.1',
+        ])->assertRedirect($page->refresh()->getUrl());
+
+        $this->actingAs($editor)->put($page->getUrl(), [
+            'name' => 'Updated page',
+            'html' => '<p>Updated content</p>',
+        ], [
+            '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', '*');
@@ -192,4 +218,27 @@ 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->getEditor();
+        /** @var Page $page */
+        $page = Page::query()->first();
+
+        $this->actingAs($editor)->put($page->getUrl(), [
+            'name' => 'Updated page',
+            'html' => '<p>Updated content</p>',
+        ], [
+            '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,
+        ]);
+    }
 }