diff --git a/app/Activity/ActivityQueries.php b/app/Activity/ActivityQueries.php
index 9de70f022..86326fb80 100644
--- a/app/Activity/ActivityQueries.php
+++ b/app/Activity/ActivityQueries.php
@@ -66,7 +66,7 @@ class ActivityQueries
});
$activity = $query->orderBy('created_at', 'desc')
- ->with(['entity' => function (Relation $query) {
+ ->with(['loggable' => function (Relation $query) {
$query->withTrashed();
}, 'user.avatar'])
->skip($count * ($page - 1))
diff --git a/app/Activity/Models/Activity.php b/app/Activity/Models/Activity.php
index ebe5d66d6..ac9fec517 100644
--- a/app/Activity/Models/Activity.php
+++ b/app/Activity/Models/Activity.php
@@ -15,7 +15,7 @@ use Illuminate\Support\Str;
/**
* @property string $type
* @property User $user
- * @property Entity $entity
+ * @property Entity $loggable
* @property string $detail
* @property string $loggable_type
* @property int $loggable_id
diff --git a/resources/views/common/activity-item.blade.php b/resources/views/common/activity-item.blade.php
index 89d44b152..1c970084f 100644
--- a/resources/views/common/activity-item.blade.php
+++ b/resources/views/common/activity-item.blade.php
@@ -16,12 +16,12 @@
{{ $activity->getText() }}
- @if($activity->entity && is_null($activity->entity->deleted_at))
- {{ $activity->entity->name }}
+ @if($activity->loggable && is_null($activity->loggable->deleted_at))
+ {{ $activity->loggable->name }}
@endif
- @if($activity->entity && !is_null($activity->entity->deleted_at))
- "{{ $activity->entity->name }}"
+ @if($activity->loggable && !is_null($activity->loggable->deleted_at))
+ "{{ $activity->loggable->name }}"
@endif
diff --git a/tests/Activity/AuditLogApiTest.php b/tests/Activity/AuditLogApiTest.php
new file mode 100644
index 000000000..75cc364f8
--- /dev/null
+++ b/tests/Activity/AuditLogApiTest.php
@@ -0,0 +1,60 @@
+users->editor();
+
+ $assertPermissionErrorOnCall = function () use ($editor) {
+ $resp = $this->actingAsForApi($editor)->getJson('/api/audit-log');
+ $resp->assertStatus(403);
+ $resp->assertJson($this->permissionErrorResponse());
+ };
+
+ $assertPermissionErrorOnCall();
+ $this->permissions->grantUserRolePermissions($editor, ['users-manage']);
+ $assertPermissionErrorOnCall();
+ $this->permissions->removeUserRolePermissions($editor, ['users-manage']);
+ $this->permissions->grantUserRolePermissions($editor, ['settings-manage']);
+ $assertPermissionErrorOnCall();
+
+ $this->permissions->grantUserRolePermissions($editor, ['settings-manage', 'users-manage']);
+ $resp = $this->actingAsForApi($editor)->getJson('/api/audit-log');
+ $resp->assertOk();
+ }
+
+ public function test_index_endpoint_returns_expected_data()
+ {
+ $page = $this->entities->page();
+ $admin = $this->users->admin();
+ $this->actingAsForApi($admin);
+ Activity::add(ActivityType::PAGE_UPDATE, $page);
+
+ $resp = $this->get("/api/audit-log?filter[loggable_id]={$page->id}");
+ $resp->assertJson(['data' => [
+ [
+ 'type' => 'page_update',
+ 'detail' => "({$page->id}) {$page->name}",
+ 'user_id' => $admin->id,
+ 'loggable_id' => $page->id,
+ 'loggable_type' => 'page',
+ 'ip' => '127.0.0.1',
+ 'user' => [
+ 'id' => $admin->id,
+ 'name' => $admin->name,
+ 'slug' => $admin->slug,
+ ],
+ ]
+ ]]);
+ }
+}
diff --git a/tests/Actions/AuditLogTest.php b/tests/Activity/AuditLogTest.php
similarity index 98%
rename from tests/Actions/AuditLogTest.php
rename to tests/Activity/AuditLogTest.php
index 5e355ca09..350cd9287 100644
--- a/tests/Actions/AuditLogTest.php
+++ b/tests/Activity/AuditLogTest.php
@@ -1,6 +1,6 @@
ActivityType::PAGE_UPDATE,
'ip' => '192.123.45.1',
'user_id' => $editor->id,
- 'entity_id' => $page->id,
+ 'loggable_id' => $page->id,
]);
$resp = $this->asAdmin()->get('/settings/audit');
@@ -207,7 +207,7 @@ class AuditLogTest extends TestCase
'type' => ActivityType::PAGE_UPDATE,
'ip' => '127.0.0.1',
'user_id' => $editor->id,
- 'entity_id' => $page->id,
+ 'loggable_id' => $page->id,
]);
}
@@ -229,7 +229,7 @@ class AuditLogTest extends TestCase
'type' => ActivityType::PAGE_UPDATE,
'ip' => '192.123.x.x',
'user_id' => $editor->id,
- 'entity_id' => $page->id,
+ 'loggable_id' => $page->id,
]);
}
}
diff --git a/tests/Actions/WebhookCallTest.php b/tests/Activity/WebhookCallTest.php
similarity index 99%
rename from tests/Actions/WebhookCallTest.php
rename to tests/Activity/WebhookCallTest.php
index 16986ba2e..37c87267a 100644
--- a/tests/Actions/WebhookCallTest.php
+++ b/tests/Activity/WebhookCallTest.php
@@ -1,6 +1,6 @@
assertDatabaseHas('activities', [
'type' => 'page_update',
- 'entity_id' => $page->id,
+ 'loggable_id' => $page->id,
'user_id' => $this->users->editor()->id,
]);
diff --git a/tests/Settings/RecycleBinTest.php b/tests/Settings/RecycleBinTest.php
index 8adc92f25..33284b4b3 100644
--- a/tests/Settings/RecycleBinTest.php
+++ b/tests/Settings/RecycleBinTest.php
@@ -153,22 +153,22 @@ class RecycleBinTest extends TestCase
$this->assertDatabaseHas('activities', [
'type' => 'page_delete',
- 'entity_id' => $page->id,
- 'entity_type' => $page->getMorphClass(),
+ 'loggable_id' => $page->id,
+ 'loggable_type' => $page->getMorphClass(),
]);
$this->asAdmin()->delete("/settings/recycle-bin/{$deletion->id}");
$this->assertDatabaseMissing('activities', [
'type' => 'page_delete',
- 'entity_id' => $page->id,
- 'entity_type' => $page->getMorphClass(),
+ 'loggable_id' => $page->id,
+ 'loggable_type' => $page->getMorphClass(),
]);
$this->assertDatabaseHas('activities', [
'type' => 'page_delete',
- 'entity_id' => null,
- 'entity_type' => null,
+ 'loggable_id' => null,
+ 'loggable_type' => null,
'detail' => $page->name,
]);
}
diff --git a/tests/TestCase.php b/tests/TestCase.php
index c59f843e9..b63de3076 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -248,8 +248,8 @@ abstract class TestCase extends BaseTestCase
$detailsToCheck = ['type' => $type];
if ($entity) {
- $detailsToCheck['entity_type'] = $entity->getMorphClass();
- $detailsToCheck['entity_id'] = $entity->id;
+ $detailsToCheck['loggable_type'] = $entity->getMorphClass();
+ $detailsToCheck['loggable_id'] = $entity->id;
}
if ($detail) {
diff --git a/tests/User/UserProfileTest.php b/tests/User/UserProfileTest.php
index 4bfb3c878..065ae8dc8 100644
--- a/tests/User/UserProfileTest.php
+++ b/tests/User/UserProfileTest.php
@@ -2,8 +2,8 @@
namespace Tests\User;
-use Activity;
use BookStack\Activity\ActivityType;
+use BookStack\Facades\Activity;
use BookStack\Users\Models\User;
use Tests\TestCase;