test(import): Task 9 code-review — cross-tenant тест ImportController::show
Code-review Task 9 (🟡): добавлен тест защиты show() — пользователь одного тенанта получает 403 при запросе import_log другого тенанта (покрывает abort_if defense-in-depth в ImportController::show). phpstan-baseline регенерирован — инкремент count ложного TestCall-срабатывания (квирк 25). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1059,7 +1059,7 @@ parameters:
|
||||
-
|
||||
message: '#^Call to an undefined method Pest\\PendingCalls\\TestCall\:\:getJson\(\)\.$#'
|
||||
identifier: method.notFound
|
||||
count: 3
|
||||
count: 4
|
||||
path: tests/Feature/Import/ImportControllerTest.php
|
||||
|
||||
-
|
||||
|
||||
@@ -127,3 +127,16 @@ test('resolve отвергает несуществующий slug', function ()
|
||||
'mappings' => [['status_ru' => 'Архив', 'slug' => 'нет-такого']],
|
||||
])->assertStatus(422);
|
||||
});
|
||||
|
||||
test('GET /api/imports/{id} отвергает import_log чужого тенанта (403)', function (): void {
|
||||
$otherTenant = Tenant::factory()->create();
|
||||
$otherUser = User::factory()->for($otherTenant)->create();
|
||||
$foreignLog = ImportLog::factory()->create([
|
||||
'tenant_id' => $otherTenant->id,
|
||||
'user_id' => $otherUser->id,
|
||||
]);
|
||||
|
||||
// Авторизован пользователь $this->tenant; запрашиваем чужой import_log.
|
||||
// abort_if(tenant_id mismatch, 403) в ImportController::show — defense-in-depth.
|
||||
$this->getJson("/api/imports/{$foreignLog->id}")->assertStatus(403);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user