|
|
@@ -0,0 +1,104 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Tests\Unit\Services;
|
|
|
+
|
|
|
+use App\Models\Order;
|
|
|
+use App\Models\ProductSKU;
|
|
|
+use App\Services\OrderPaymentStatusService;
|
|
|
+use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
+use Tests\TestCase;
|
|
|
+
|
|
|
+class OrderPaymentStatusServiceTest extends TestCase
|
|
|
+{
|
|
|
+ use RefreshDatabase;
|
|
|
+
|
|
|
+ protected $seed = true;
|
|
|
+
|
|
|
+ public function test_marks_order_paid_when_all_mafs_have_payment_data(): void
|
|
|
+ {
|
|
|
+ $order = Order::factory()->create(['order_status_id' => Order::STATUS_HANDED_OVER]);
|
|
|
+
|
|
|
+ ProductSKU::factory()->forOrder($order)->create([
|
|
|
+ 'statement_number' => ' ST-1 ',
|
|
|
+ 'upd_number' => ' UPD-1 ',
|
|
|
+ ]);
|
|
|
+ ProductSKU::factory()->forOrder($order)->create([
|
|
|
+ 'statement_number' => 'ST-2',
|
|
|
+ 'upd_number' => 'UPD-2',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $result = app(OrderPaymentStatusService::class)->markPaidIfAllMafsHavePaymentData($order);
|
|
|
+
|
|
|
+ $this->assertTrue($result);
|
|
|
+ $this->assertSame(Order::STATUS_PAID, $order->refresh()->order_status_id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_does_not_mark_paid_when_any_payment_field_is_blank(): void
|
|
|
+ {
|
|
|
+ $order = Order::factory()->create(['order_status_id' => Order::STATUS_HANDED_OVER]);
|
|
|
+
|
|
|
+ ProductSKU::factory()->forOrder($order)->create([
|
|
|
+ 'statement_number' => 'ST-1',
|
|
|
+ 'upd_number' => 'UPD-1',
|
|
|
+ ]);
|
|
|
+ ProductSKU::factory()->forOrder($order)->create([
|
|
|
+ 'statement_number' => ' ',
|
|
|
+ 'upd_number' => 'UPD-2',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $result = app(OrderPaymentStatusService::class)->markPaidIfAllMafsHavePaymentData($order);
|
|
|
+
|
|
|
+ $this->assertFalse($result);
|
|
|
+ $this->assertSame(Order::STATUS_HANDED_OVER, $order->refresh()->order_status_id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_does_not_mark_paid_without_mafs(): void
|
|
|
+ {
|
|
|
+ $order = Order::factory()->create(['order_status_id' => Order::STATUS_HANDED_OVER]);
|
|
|
+
|
|
|
+ $result = app(OrderPaymentStatusService::class)->markPaidIfAllMafsHavePaymentData($order);
|
|
|
+
|
|
|
+ $this->assertFalse($result);
|
|
|
+ $this->assertSame(Order::STATUS_HANDED_OVER, $order->refresh()->order_status_id);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function test_backfill_candidates_query_returns_only_eligible_orders(): void
|
|
|
+ {
|
|
|
+ $eligibleOrder = Order::factory()->create([
|
|
|
+ 'year' => 2026,
|
|
|
+ 'order_status_id' => Order::STATUS_HANDED_OVER,
|
|
|
+ ]);
|
|
|
+ ProductSKU::factory()->forOrder($eligibleOrder)->create([
|
|
|
+ 'year' => 2026,
|
|
|
+ 'statement_number' => 'ST-1',
|
|
|
+ 'upd_number' => 'UPD-1',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $paidOrder = Order::factory()->create([
|
|
|
+ 'year' => 2026,
|
|
|
+ 'order_status_id' => Order::STATUS_PAID,
|
|
|
+ ]);
|
|
|
+ ProductSKU::factory()->forOrder($paidOrder)->create([
|
|
|
+ 'year' => 2026,
|
|
|
+ 'statement_number' => 'ST-2',
|
|
|
+ 'upd_number' => 'UPD-2',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $incompleteOrder = Order::factory()->create([
|
|
|
+ 'year' => 2026,
|
|
|
+ 'order_status_id' => Order::STATUS_HANDED_OVER,
|
|
|
+ ]);
|
|
|
+ ProductSKU::factory()->forOrder($incompleteOrder)->create([
|
|
|
+ 'year' => 2026,
|
|
|
+ 'statement_number' => 'ST-3',
|
|
|
+ 'upd_number' => null,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $candidateIds = app(OrderPaymentStatusService::class)
|
|
|
+ ->paidBackfillCandidatesQuery(2026)
|
|
|
+ ->pluck('id')
|
|
|
+ ->all();
|
|
|
+
|
|
|
+ $this->assertSame([$eligibleOrder->id], $candidateIds);
|
|
|
+ }
|
|
|
+}
|