TenantAtlas/tests/Feature/Workspaces/WorkspaceMembershipAuditTest.php
2026-02-01 12:19:57 +01:00

47 lines
1.3 KiB
PHP

<?php
declare(strict_types=1);
use App\Models\AuditLog;
use App\Models\User;
use App\Models\Workspace;
use App\Models\WorkspaceMembership;
use App\Services\Auth\WorkspaceMembershipManager;
use App\Support\Audit\AuditActionId;
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
it('logs membership add with workspace context', function (): void {
$workspace = Workspace::factory()->create();
$actor = User::factory()->create();
$member = User::factory()->create();
WorkspaceMembership::factory()->for($workspace)->for($actor)->create(['role' => 'owner']);
/** @var WorkspaceMembershipManager $manager */
$manager = app(WorkspaceMembershipManager::class);
$manager->addMember(
workspace: $workspace,
actor: $actor,
member: $member,
role: 'readonly',
source: 'manual',
);
$log = AuditLog::query()
->where('workspace_id', $workspace->getKey())
->where('action', AuditActionId::WorkspaceMembershipAdd->value)
->orderByDesc('id')
->first();
expect($log)->not->toBeNull();
expect($log?->tenant_id)->toBeNull();
expect($log?->status)->toBe('success');
expect($log?->metadata)->toMatchArray([
'member_user_id' => $member->getKey(),
'role' => 'readonly',
'source' => 'manual',
]);
});