PaymentServiceP1Test.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace Webkul\BagistoApi\Tests\Unit\Services;
  3. use Mockery;
  4. use Tests\TestCase;
  5. use Webkul\BagistoApi\Dto\PaymentReplayInput;
  6. use Webkul\BagistoApi\Repositories\PaymentAttemptRepository;
  7. use Webkul\BagistoApi\Services\CartTokenService;
  8. use Webkul\BagistoApi\Services\PaymentService;
  9. use Webkul\Checkout\Repositories\CartRepository;
  10. use Webkul\Sales\Models\Order;
  11. use Webkul\Sales\Repositories\InvoiceRepository;
  12. use Webkul\Sales\Repositories\OrderRepository;
  13. use Webkul\Sales\Repositories\OrderTransactionRepository;
  14. class PaymentServiceP1Test extends TestCase
  15. {
  16. protected function tearDown(): void
  17. {
  18. Mockery::close();
  19. parent::tearDown();
  20. }
  21. public function test_replay_reschedules_reconciliation(): void
  22. {
  23. $order = new class
  24. {
  25. public int $id = 42;
  26. public ?int $customer_id = null;
  27. public string $status = Order::STATUS_PENDING;
  28. public float $grand_total = 10.5;
  29. public string $order_currency_code = 'USD';
  30. public string $cart_currency_code = 'USD';
  31. public object $payment;
  32. public function __construct()
  33. {
  34. $this->payment = new class
  35. {
  36. public string $method = 'paypal_smart_button';
  37. public array $additional = ['cart_id' => 5, 'express' => true];
  38. };
  39. }
  40. public function fresh(): static
  41. {
  42. return $this;
  43. }
  44. };
  45. $orderRepository = Mockery::mock(OrderRepository::class);
  46. $orderRepository->shouldReceive('find')->once()->with(42)->andReturn($order);
  47. $service = Mockery::mock(PaymentService::class, [
  48. $orderRepository,
  49. Mockery::mock(CartRepository::class),
  50. Mockery::mock(CartTokenService::class),
  51. Mockery::mock(InvoiceRepository::class),
  52. Mockery::mock(OrderTransactionRepository::class),
  53. Mockery::mock(PaymentAttemptRepository::class),
  54. ])->makePartial()->shouldAllowMockingProtectedMethods();
  55. $service->shouldReceive('createGatewayOrderForOrder')->once()->with($order)->andReturn('GW-NEW-1');
  56. $service->shouldReceive('writeGatewayOrderId')->once()->with($order, 'GW-NEW-1');
  57. $service->shouldReceive('recordAttempt')->once();
  58. $service->shouldReceive('scheduleReconciliation')->once()->with($order);
  59. $input = new PaymentReplayInput;
  60. $input->orderId = 42;
  61. /** @var PaymentService $service */
  62. $result = $service->replay($input, null);
  63. $this->assertSame('GW-NEW-1', $result['gatewayOrderId']);
  64. $this->assertSame($order, $result['order']);
  65. }
  66. }