'Full Administrator', 'guard_name' => 'admin']); $admin = User::factory()->create(); $admin->assignRole('Full Administrator'); $customer = Customer::factory()->create(); $response = $this->actingAs($admin, 'admin')->postJson( "/api/v1/administrator/customers/{$customer->uuid}/services", [ 'custom' => [ 'name' => 'VPS riêng', 'category' => 'vps', 'unit_price' => 200000, 'cpu' => 8, 'ram_mb' => 16384, 'disk_gb' => 200, 'specs' => [['label' => 'Vị trí', 'value' => 'HCM']], ], 'billing_cycle' => 'quarterly', 'payment_status' => 'unpaid', ], )->assertCreated(); $service = Service::findOrFail($response->json('data.id')); $custom = CustomProduct::findOrFail($service->custom_product_id); $this->assertNull($service->product_id); $this->assertSame('vps', $service->type); $this->assertSame(16384, $custom->ram_mb); $this->assertSame(600000, (int) Invoice::where('customer_id', $customer->id)->value('total')); $this->assertSame( 1200000, collect(RenewalPricing::options($custom))->firstWhere('months', 6)['price'], ); } public function test_requires_product_or_custom(): void { Role::firstOrCreate(['name' => 'Full Administrator', 'guard_name' => 'admin']); $admin = User::factory()->create(); $admin->assignRole('Full Administrator'); $customer = Customer::factory()->create(); $this->actingAs($admin, 'admin') ->postJson("/api/v1/administrator/customers/{$customer->uuid}/services", ['payment_status' => 'unpaid']) ->assertStatus(422); } }