create(['status' => 1]); $vm = ModuleVmware::create([ 'customer_id' => $customer->id, 'vmware_id' => 'vm-217208', 'ram_mb' => 2048, 'status' => 1, ]); config()->set('portal-monitor.url', 'http://portal-monitor-api:8080'); config()->set('portal-monitor.api_key', 'test-api-key'); Http::fake([ '*/api/v1/vsphere/vms/vm-217208/metrics' => Http::response([ 'success' => true, 'data' => ['cpu_usage_percent' => 15.5, 'timestamp' => '2026-10-17T04:00:00Z'], ]), '*/api/v1/vsphere/vms/vm-217208/storage' => Http::response([ 'success' => true, 'data' => [ 'disks' => [['capacity_bytes' => 10737418240]], 'summary' => [ 'total_bytes' => 10420744192, 'used_bytes' => 5787086848, 'usage_percent' => 55.5343, ], ], ]), ]); $this->actingAs($customer, 'client') ->withHeaders(['x-access-token' => $this->buildClientAccessToken()]) ->getJson('/v1/system/vm-metrics?product=' . $vm->vmware_id) ->assertOk() ->assertJsonPath('success', true) ->assertJsonPath('data.cpu_usage_percent', 15.5) ->assertJsonPath('data.mem_total_mb', 2048) ->assertJsonPath('data.disk_used_bytes', 5787086848) ->assertJsonPath('data.disk_total_bytes', 10420744192) ->assertJsonPath('data.disk_usage_percent', 55.5343); } public function test_customer_cannot_read_another_customers_vm_metrics(): void { $owner = Customer::factory()->create(['status' => 1]); $attacker = Customer::factory()->create(['status' => 1]); $vm = ModuleVmware::create([ 'customer_id' => $owner->id, 'vmware_id' => 'vm-217209', 'status' => 1, ]); Http::fake(); $this->actingAs($attacker, 'client') ->withHeaders(['x-access-token' => $this->buildClientAccessToken()]) ->getJson('/v1/system/vm-metrics?product=' . $vm->vmware_id) ->assertNotFound(); Http::assertNothingSent(); } }