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, ]); });