Files
api/services/nginx/app/tests/Api/VehiclesApiTest.php
T
2026-07-06 09:21:31 +02:00

197 lines
6.7 KiB
PHP

<?php
declare(strict_types=1);
usesApiSuite();
it('defaults wash subscriptions to false when a customer creates a vehicle without the field', function (): void {
api_test_covers('POST /vehicles', 'happy');
$session = api_fixtures()->createUserSession(['add_vehicle']);
$response = api_client()->post('/vehicles', [
'type' => 53,
'reg' => 'DEFAULTOWN',
], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
$vehicleId = (int)($response->data()['id'] ?? 0);
expect($vehicleId)->toBeGreaterThan(0);
$row = api_fixtures()->fetchRowById('customer_vehicles', $vehicleId);
expect($row)->not->toBeNull();
expect((int)$row['customer_id'])->toBe((int)$session['user']['customer_number']);
expect((int)$row['wash_subscription'])->toBe(0);
expect($response->data())->toMatchArray([
'id' => $vehicleId,
'customer_id' => (int)$session['user']['customer_number'],
'reg' => 'DEFAULTOWN',
'wash_subscription' => false,
]);
api_fixtures()->cleanupDeleteById('customer_vehicles', $vehicleId);
api_fixtures()->cleanupDeleteWhere('customer_vehicle_subscription_versions', ['vehicle_id' => $vehicleId]);
});
it('defaults wash subscriptions to false when a superuser creates a vehicle for another customer without the field', function (): void {
api_test_covers('POST /vehicles', 'happy');
$targetCustomer = api_fixtures()->createUser(['display_name' => 'Vehicle Default Target Customer']);
$session = api_fixtures()->createUserSession(['add_vehicle_other']);
$response = api_client()->post('/vehicles', [
'customer_id' => $targetCustomer['customer_number'],
'type' => 53,
'reg' => 'DEFAULTSU',
], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
$vehicleId = (int)($response->data()['id'] ?? 0);
expect($vehicleId)->toBeGreaterThan(0);
$row = api_fixtures()->fetchRowById('customer_vehicles', $vehicleId);
expect($row)->not->toBeNull();
expect((int)$row['customer_id'])->toBe((int)$targetCustomer['customer_number']);
expect((int)$row['wash_subscription'])->toBe(0);
expect($response->data())->toMatchArray([
'id' => $vehicleId,
'customer_id' => (int)$targetCustomer['customer_number'],
'reg' => 'DEFAULTSU',
'wash_subscription' => false,
]);
api_fixtures()->cleanupDeleteById('customer_vehicles', $vehicleId);
api_fixtures()->cleanupDeleteWhere('customer_vehicle_subscription_versions', ['vehicle_id' => $vehicleId]);
});
it('still honors an explicit wash subscription true value on vehicle create', function (): void {
api_test_covers('POST /vehicles', 'happy');
$session = api_fixtures()->createUserSession(['add_vehicle']);
$response = api_client()->post('/vehicles', [
'type' => 53,
'reg' => 'EXPLICITON',
'wash_subscription' => true,
], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
$vehicleId = (int)($response->data()['id'] ?? 0);
expect($vehicleId)->toBeGreaterThan(0);
$row = api_fixtures()->fetchRowById('customer_vehicles', $vehicleId);
expect($row)->not->toBeNull();
expect((int)$row['wash_subscription'])->toBe(1);
expect($response->data())->toMatchArray([
'id' => $vehicleId,
'reg' => 'EXPLICITON',
'wash_subscription' => true,
]);
api_fixtures()->cleanupDeleteById('customer_vehicles', $vehicleId);
api_fixtures()->cleanupDeleteWhere('customer_vehicle_subscription_versions', ['vehicle_id' => $vehicleId]);
});
it('returns the newest vehicle last_order_id that still has order items', function (): void {
api_test_covers('GET /vehicles', 'happy');
$session = api_fixtures()->createUserSession(['list_own_vehicles']);
$department = api_fixtures()->createDepartment(['name' => 'Vehicle API Department']);
$vehicle = api_fixtures()->createVehicle([
'customer_id' => $session['user']['customer_number'],
'type' => 53,
'reg' => 'SIDSTEV1',
'reference' => 'VEHICLE-LAST-WASH',
]);
$olderOrder = api_fixtures()->createOrder([
'customer_id' => $session['user']['customer_number'],
'cashier_id' => $session['user']['id'],
'department_id' => $department['id'],
'reference' => 'OLDER-ORDER',
'reg_1' => $vehicle['reg'],
]);
api_fixtures()->createOrderItem([
'order_id' => $olderOrder['id'],
'product_id' => 53,
'cashier_id' => $session['user']['id'],
'price' => 599,
'quantity' => 1,
]);
$newerOrder = api_fixtures()->createOrder([
'customer_id' => $session['user']['customer_number'],
'cashier_id' => $session['user']['id'],
'department_id' => $department['id'],
'reference' => 'NEWER-ORDER',
'reg_1' => $vehicle['reg'],
]);
$response = api_client()->get('/vehicles?id=' . $vehicle['id'], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
expect($newerOrder['id'])->toBeGreaterThan($olderOrder['id']);
expect($response->data())->toMatchArray([
'id' => $vehicle['id'],
'reg' => $vehicle['reg'],
'last_order_id' => $olderOrder['id'],
]);
});
it('returns a null vehicle last_order_id when no order with items exists', function (): void {
api_test_covers('GET /vehicles', 'happy');
$session = api_fixtures()->createUserSession(['list_own_vehicles']);
$department = api_fixtures()->createDepartment(['name' => 'Vehicle API Department Null']);
$vehicle = api_fixtures()->createVehicle([
'customer_id' => $session['user']['customer_number'],
'type' => 53,
'reg' => 'SIDSTEV2',
'reference' => 'VEHICLE-NO-LAST-WASH',
]);
api_fixtures()->createOrder([
'customer_id' => $session['user']['customer_number'],
'cashier_id' => $session['user']['id'],
'department_id' => $department['id'],
'reference' => 'EMPTY-ORDER-1',
'reg_1' => $vehicle['reg'],
]);
api_fixtures()->createOrder([
'customer_id' => $session['user']['customer_number'],
'cashier_id' => $session['user']['id'],
'department_id' => $department['id'],
'reference' => 'EMPTY-ORDER-2',
'reg_1' => $vehicle['reg'],
]);
$response = api_client()->get('/vehicles?id=' . $vehicle['id'], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
expect($response->data())->toMatchArray([
'id' => $vehicle['id'],
'reg' => $vehicle['reg'],
'last_order_id' => null,
]);
});