|
@@ -73,6 +73,78 @@ class PayPlusCashierLogicTest extends TestCase
|
|
|
$this->assertSame(2, $logic->resolvePayoutStatus('REFUNDED'));
|
|
$this->assertSame(2, $logic->resolvePayoutStatus('REFUNDED'));
|
|
|
$this->assertSame(0, $logic->resolvePayoutStatus('PROCESSING'));
|
|
$this->assertSame(0, $logic->resolvePayoutStatus('PROCESSING'));
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /** @test */
|
|
|
|
|
+ public function it_queries_payout_detail_for_notify_and_uses_query_status()
|
|
|
|
|
+ {
|
|
|
|
|
+ $service = new FakePayPlusForCashier([
|
|
|
|
|
+ [
|
|
|
|
|
+ 'code' => 200,
|
|
|
|
|
+ 'data' => [
|
|
|
|
|
+ 'reference_id' => 'TX100',
|
|
|
|
|
+ 'transaction_id' => 'T100',
|
|
|
|
|
+ 'transaction_status' => 'PAID',
|
|
|
|
|
+ 'description' => 'paid',
|
|
|
|
|
+ ],
|
|
|
|
|
+ ],
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $logic = new PayPlusCashierLogic($service);
|
|
|
|
|
+ $detail = $logic->queryPayoutDetailForNotify([
|
|
|
|
|
+ 'reference_id' => 'TX100',
|
|
|
|
|
+ 'transaction_id' => 'T100',
|
|
|
|
|
+ 'status' => 'REJECTED',
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $this->assertSame('/rest/v2/payouts/detail', $service->calls[0]['path']);
|
|
|
|
|
+ $this->assertSame('TX100', $service->calls[0]['payload']['reference_id']);
|
|
|
|
|
+ $this->assertSame('T100', $service->calls[0]['payload']['transaction_id']);
|
|
|
|
|
+ $this->assertSame('PAID', $detail['transaction_status']);
|
|
|
|
|
+ $this->assertSame(1, $logic->resolvePayoutStatus($detail['transaction_status']));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /** @test */
|
|
|
|
|
+ public function it_returns_empty_notify_detail_when_query_has_no_order_data()
|
|
|
|
|
+ {
|
|
|
|
|
+ $service = new FakePayPlusForCashier([
|
|
|
|
|
+ ['code' => 200],
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $logic = new PayPlusCashierLogic($service);
|
|
|
|
|
+ $detail = $logic->queryPayoutDetailForNotify([
|
|
|
|
|
+ 'reference_id' => 'TX100',
|
|
|
|
|
+ 'transaction_id' => 'T100',
|
|
|
|
|
+ 'status' => 'PAID',
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $this->assertSame([], $detail);
|
|
|
|
|
+ $this->assertCount(1, $service->calls);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /** @test */
|
|
|
|
|
+ public function it_keeps_processing_payout_notify_unhandled_after_query()
|
|
|
|
|
+ {
|
|
|
|
|
+ $service = new FakePayPlusForCashier([
|
|
|
|
|
+ [
|
|
|
|
|
+ 'code' => 200,
|
|
|
|
|
+ 'data' => [
|
|
|
|
|
+ 'reference_id' => 'TX100',
|
|
|
|
|
+ 'transaction_id' => 'T100',
|
|
|
|
|
+ 'transaction_status' => 'PROCESSING',
|
|
|
|
|
+ ],
|
|
|
|
|
+ ],
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $logic = new PayPlusCashierLogic($service);
|
|
|
|
|
+ $detail = $logic->queryPayoutDetailForNotify([
|
|
|
|
|
+ 'reference_id' => 'TX100',
|
|
|
|
|
+ 'transaction_id' => 'T100',
|
|
|
|
|
+ 'status' => 'REJECTED',
|
|
|
|
|
+ ]);
|
|
|
|
|
+
|
|
|
|
|
+ $this->assertSame('PROCESSING', $detail['transaction_status']);
|
|
|
|
|
+ $this->assertSame(0, $logic->resolvePayoutStatus($detail['transaction_status']));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class FakePayPlusForCashier extends PayPlus
|
|
class FakePayPlusForCashier extends PayPlus
|