OrderPaymentStatusServiceTest.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. namespace Tests\Unit\Services;
  3. use App\Models\Order;
  4. use App\Models\ProductSKU;
  5. use App\Services\OrderPaymentStatusService;
  6. use Illuminate\Foundation\Testing\RefreshDatabase;
  7. use Tests\TestCase;
  8. class OrderPaymentStatusServiceTest extends TestCase
  9. {
  10. use RefreshDatabase;
  11. protected $seed = true;
  12. public function test_marks_order_paid_when_all_mafs_have_payment_data(): void
  13. {
  14. $order = Order::factory()->create(['order_status_id' => Order::STATUS_HANDED_OVER]);
  15. ProductSKU::factory()->forOrder($order)->create([
  16. 'statement_number' => ' ST-1 ',
  17. 'upd_number' => ' UPD-1 ',
  18. ]);
  19. ProductSKU::factory()->forOrder($order)->create([
  20. 'statement_number' => 'ST-2',
  21. 'upd_number' => 'UPD-2',
  22. ]);
  23. $result = app(OrderPaymentStatusService::class)->markPaidIfAllMafsHavePaymentData($order);
  24. $this->assertTrue($result);
  25. $this->assertSame(Order::STATUS_PAID, $order->refresh()->order_status_id);
  26. }
  27. public function test_does_not_mark_paid_when_any_payment_field_is_blank(): void
  28. {
  29. $order = Order::factory()->create(['order_status_id' => Order::STATUS_HANDED_OVER]);
  30. ProductSKU::factory()->forOrder($order)->create([
  31. 'statement_number' => 'ST-1',
  32. 'upd_number' => 'UPD-1',
  33. ]);
  34. ProductSKU::factory()->forOrder($order)->create([
  35. 'statement_number' => ' ',
  36. 'upd_number' => 'UPD-2',
  37. ]);
  38. $result = app(OrderPaymentStatusService::class)->markPaidIfAllMafsHavePaymentData($order);
  39. $this->assertFalse($result);
  40. $this->assertSame(Order::STATUS_HANDED_OVER, $order->refresh()->order_status_id);
  41. }
  42. public function test_does_not_mark_paid_without_mafs(): void
  43. {
  44. $order = Order::factory()->create(['order_status_id' => Order::STATUS_HANDED_OVER]);
  45. $result = app(OrderPaymentStatusService::class)->markPaidIfAllMafsHavePaymentData($order);
  46. $this->assertFalse($result);
  47. $this->assertSame(Order::STATUS_HANDED_OVER, $order->refresh()->order_status_id);
  48. }
  49. public function test_backfill_candidates_query_returns_only_eligible_orders(): void
  50. {
  51. $eligibleOrder = Order::factory()->create([
  52. 'year' => 2026,
  53. 'order_status_id' => Order::STATUS_HANDED_OVER,
  54. ]);
  55. ProductSKU::factory()->forOrder($eligibleOrder)->create([
  56. 'year' => 2026,
  57. 'statement_number' => 'ST-1',
  58. 'upd_number' => 'UPD-1',
  59. ]);
  60. $paidOrder = Order::factory()->create([
  61. 'year' => 2026,
  62. 'order_status_id' => Order::STATUS_PAID,
  63. ]);
  64. ProductSKU::factory()->forOrder($paidOrder)->create([
  65. 'year' => 2026,
  66. 'statement_number' => 'ST-2',
  67. 'upd_number' => 'UPD-2',
  68. ]);
  69. $incompleteOrder = Order::factory()->create([
  70. 'year' => 2026,
  71. 'order_status_id' => Order::STATUS_HANDED_OVER,
  72. ]);
  73. ProductSKU::factory()->forOrder($incompleteOrder)->create([
  74. 'year' => 2026,
  75. 'statement_number' => 'ST-3',
  76. 'upd_number' => null,
  77. ]);
  78. $candidateIds = app(OrderPaymentStatusService::class)
  79. ->paidBackfillCandidatesQuery(2026)
  80. ->pluck('id')
  81. ->all();
  82. $this->assertSame([$eligibleOrder->id], $candidateIds);
  83. }
  84. }