BackfillPaidOrderStatusesJobTest.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace Tests\Unit\Jobs;
  3. use App\Jobs\BackfillPaidOrderStatusesJob;
  4. use App\Models\Order;
  5. use App\Models\ProductSKU;
  6. use Illuminate\Foundation\Testing\RefreshDatabase;
  7. use Illuminate\Support\Facades\Bus;
  8. use Illuminate\Support\Facades\Queue;
  9. use Tests\TestCase;
  10. class BackfillPaidOrderStatusesJobTest extends TestCase
  11. {
  12. use RefreshDatabase;
  13. protected $seed = true;
  14. public function test_job_can_be_dispatched(): void
  15. {
  16. Bus::fake();
  17. BackfillPaidOrderStatusesJob::dispatch(2026);
  18. Bus::assertDispatched(BackfillPaidOrderStatusesJob::class);
  19. }
  20. public function test_job_is_queued_via_queue_fake(): void
  21. {
  22. Queue::fake();
  23. BackfillPaidOrderStatusesJob::dispatch();
  24. Queue::assertPushed(BackfillPaidOrderStatusesJob::class);
  25. }
  26. public function test_job_marks_only_eligible_orders_as_paid(): void
  27. {
  28. $eligibleOrder = Order::factory()->create([
  29. 'year' => 2026,
  30. 'order_status_id' => Order::STATUS_HANDED_OVER,
  31. ]);
  32. ProductSKU::factory()->forOrder($eligibleOrder)->create([
  33. 'year' => 2026,
  34. 'statement_number' => 'ST-1',
  35. 'upd_number' => 'UPD-1',
  36. ]);
  37. $incompleteOrder = Order::factory()->create([
  38. 'year' => 2026,
  39. 'order_status_id' => Order::STATUS_HANDED_OVER,
  40. ]);
  41. ProductSKU::factory()->forOrder($incompleteOrder)->create([
  42. 'year' => 2026,
  43. 'statement_number' => 'ST-2',
  44. 'upd_number' => null,
  45. ]);
  46. $emptyOrder = Order::factory()->create([
  47. 'year' => 2026,
  48. 'order_status_id' => Order::STATUS_HANDED_OVER,
  49. ]);
  50. (new BackfillPaidOrderStatusesJob(year: 2026, chunkSize: 1))->handle(app(\App\Services\OrderPaymentStatusService::class));
  51. $this->assertSame(Order::STATUS_PAID, $eligibleOrder->refresh()->order_status_id);
  52. $this->assertSame(Order::STATUS_HANDED_OVER, $incompleteOrder->refresh()->order_status_id);
  53. $this->assertSame(Order::STATUS_HANDED_OVER, $emptyOrder->refresh()->order_status_id);
  54. }
  55. public function test_job_respects_year_filter(): void
  56. {
  57. $currentYearOrder = Order::factory()->create([
  58. 'year' => 2026,
  59. 'order_status_id' => Order::STATUS_HANDED_OVER,
  60. ]);
  61. ProductSKU::factory()->forOrder($currentYearOrder)->create([
  62. 'year' => 2026,
  63. 'statement_number' => 'ST-1',
  64. 'upd_number' => 'UPD-1',
  65. ]);
  66. $otherYearOrder = Order::factory()->create([
  67. 'year' => 2025,
  68. 'order_status_id' => Order::STATUS_HANDED_OVER,
  69. ]);
  70. ProductSKU::factory()->forOrder($otherYearOrder)->create([
  71. 'year' => 2025,
  72. 'statement_number' => 'ST-2',
  73. 'upd_number' => 'UPD-2',
  74. ]);
  75. (new BackfillPaidOrderStatusesJob(year: 2026))->handle(app(\App\Services\OrderPaymentStatusService::class));
  76. $this->assertSame(Order::STATUS_PAID, $currentYearOrder->refresh()->order_status_id);
  77. $this->assertSame(Order::STATUS_HANDED_OVER, $otherYearOrder->refresh()->order_status_id);
  78. }
  79. }