Files
api/services/nginx/app/tests/Api/OrderBookingConfirmationResendApiTest.php
T

176 lines
6.1 KiB
PHP

<?php
declare(strict_types=1);
use classes\email;
use classes\pdf_store;
putenv('EMAIL_FAKE_MODE=1');
usesApiSuite();
it('allows department admins to resend order booking confirmations', function (): void {
$customer = api_fixtures()->createUser([
'display_name' => 'Resend Booking Confirmation Customer',
'email' => 'resend-booking-confirmation@example.test',
]);
$branding = api_fixtures()->createBranding([
'name' => 'Resend Booking Confirmation Brand',
'address' => 'Resend Booking Confirmation Address 1',
]);
$department = api_fixtures()->createDepartment([
'name' => 'Resend Booking Confirmation Department',
'branding' => $branding['id'],
]);
$booking = api_fixtures()->createOrderBooking([
'customer_number' => $customer['customer_number'],
'department' => $department['id'],
'reference' => 'RESEND-CONFIRMATION',
'reg_1' => 'RESEND1',
]);
$session = api_fixtures()->createUserSession([
'resend_booking_confirmations',
'department_access_' . $department['id'],
]);
$response = api_client()->post('/order-bookings/booking-confirmation/resend', [
'id' => $booking['id'],
], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
expect($response->data())
->toBeArray()
->toHaveKey('message', 'Booking confirmation resent successfully.')
->toHaveKey('booking')
->and($response->data()['booking'])
->toBeArray()
->and($response->data()['booking']['id'] ?? null)
->toBe($booking['id'])
->and($response->data()['booking']['reference'] ?? null)
->toBe('RESEND-CONFIRMATION');
});
it('requires department access when resending order booking confirmations', function (): void {
$customer = api_fixtures()->createUser([
'display_name' => 'Resend Booking Confirmation Foreign Customer',
]);
$department = api_fixtures()->createDepartment([
'name' => 'Resend Booking Confirmation Foreign Department',
]);
$booking = api_fixtures()->createOrderBooking([
'customer_number' => $customer['customer_number'],
'department' => $department['id'],
]);
$session = api_fixtures()->createUserSession([
'resend_booking_confirmations',
]);
$response = api_client()->post('/order-bookings/booking-confirmation/resend', [
'id' => $booking['id'],
], $session['headers']);
$response
->assertStatus(403)
->assertEnvelope()
->assertSuccess(false)
->assertMissingPermissions(['department_access_' . $department['id']]);
});
it('allows department admins to resend order booking completion confirmations', function (): void {
email::resetFakeDeliveries();
$customer = api_fixtures()->createUser([
'display_name' => 'Resend Completion Confirmation Customer',
'email' => 'resend-completion-confirmation@example.test',
]);
$department = api_fixtures()->createDepartment([
'name' => 'Resend Completion Confirmation Department',
]);
$cashier = api_fixtures()->createUser([
'display_name' => 'Resend Completion Confirmation Cashier',
]);
$order = api_fixtures()->createOrder([
'customer_id' => $customer['customer_number'],
'cashier_id' => $cashier['id'],
'department_id' => $department['id'],
]);
$booking = api_fixtures()->createOrderBooking([
'customer_number' => $customer['customer_number'],
'department' => $department['id'],
'reference' => 'RESEND-COMPLETION',
'reg_1' => 'DONE1',
'order_id' => $order['id'],
]);
api_fixtures()->createOrderAttachment([
'order_id' => $order['id'],
'content' => json_encode([
'document' => 'completion-confirmation-test.pdf',
'other' => 'wash_certificate',
], JSON_THROW_ON_ERROR),
]);
(new pdf_store())->createObject('completion-confirmation-test.pdf', '%PDF-1.4 test completion confirmation');
$session = api_fixtures()->createUserSession([
'complete_bookings',
'department_access_' . $department['id'],
]);
$response = api_client()->post('/order-bookings/completion-confirmation/resend', [
'id' => $booking['id'],
], $session['headers']);
$response
->assertStatus(200)
->assertEnvelope()
->assertSuccess();
expect($response->data())
->toBeArray()
->toHaveKey('message', 'Completion confirmation resent successfully.')
->toHaveKey('booking')
->and($response->data()['booking'])
->toBeArray()
->and($response->data()['booking']['id'] ?? null)
->toBe($booking['id'])
->and(email::$fake_deliveries)
->toHaveCount(1)
->and(email::$fake_deliveries[0]['to'] ?? null)
->toBe('resend-completion-confirmation@example.test')
->and(email::$fake_deliveries[0]['subject'] ?? '')
->toContain('RESEND-COMPLETION');
});
it('requires department access when resending order booking completion confirmations', function (): void {
$customer = api_fixtures()->createUser([
'display_name' => 'Resend Completion Confirmation Foreign Customer',
]);
$department = api_fixtures()->createDepartment([
'name' => 'Resend Completion Confirmation Foreign Department',
]);
$order = api_fixtures()->createOrder([
'customer_id' => $customer['customer_number'],
'department_id' => $department['id'],
]);
$booking = api_fixtures()->createOrderBooking([
'customer_number' => $customer['customer_number'],
'department' => $department['id'],
'order_id' => $order['id'],
]);
$session = api_fixtures()->createUserSession([
'complete_bookings',
]);
$response = api_client()->post('/order-bookings/completion-confirmation/resend', [
'id' => $booking['id'],
], $session['headers']);
$response
->assertStatus(403)
->assertEnvelope()
->assertSuccess(false)
->assertMissingPermissions(['department_access_' . $department['id']]);
});