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