createDefaultRoles(); $admin = $this->createAdminUser(['sirsoft-ecommerce.user-currency.manage']); $target = User::factory()->create(); Sanctum::actingAs($admin); $response = $this->patchJson($this->url($target->uuid), ['currency' => 'USD']); $response->assertOk(); $this->assertSame( 'USD', app(EcommerceUserProfileRepositoryInterface::class)->getPreferredCurrency($target->id) ); } public function test_unregistered_currency_rejected_422(): void { $this->createDefaultRoles(); $admin = $this->createAdminUser(['sirsoft-ecommerce.user-currency.manage']); $target = User::factory()->create(); Sanctum::actingAs($admin); $response = $this->patchJson($this->url($target->uuid), ['currency' => 'XYZ']); $response->assertStatus(422); } public function test_admin_without_permission_forbidden(): void { $this->createDefaultRoles(); // 권한 없는 일반 관리자(admin.access 만, user-currency.manage 없음) $admin = $this->createAdminUser(); $target = User::factory()->create(); Sanctum::actingAs($admin); $response = $this->patchJson($this->url($target->uuid), ['currency' => 'USD']); $response->assertStatus(403); } public function test_currency_change_fires_activity_log_hook(): void { $this->createDefaultRoles(); $admin = $this->createAdminUser(['sirsoft-ecommerce.user-currency.manage']); $target = User::factory()->create(); Sanctum::actingAs($admin); $fired = false; HookManager::addAction( 'sirsoft-ecommerce.admin.user_currency.changed', function () use (&$fired) { $fired = true; } ); $this->patchJson($this->url($target->uuid), ['currency' => 'JPY'])->assertOk(); $this->assertTrue($fired, '통화 변경 활동 로그 훅이 발화하지 않았습니다.'); } }