ReconcilePendingPaymentJobTest.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace Webkul\BagistoApi\Tests\Unit\Jobs;
  3. use Illuminate\Support\Facades\DB;
  4. use Illuminate\Support\Facades\Event;
  5. use Mockery;
  6. use Tests\TestCase;
  7. use Webkul\BagistoApi\Jobs\ReconcilePendingPaymentJob;
  8. use Webkul\Paypal\Payment\SmartButton;
  9. use Webkul\Sales\Models\Order;
  10. use Webkul\Sales\Repositories\OrderRepository;
  11. class ReconcilePendingPaymentJobTest extends TestCase
  12. {
  13. protected function tearDown(): void
  14. {
  15. Mockery::close();
  16. parent::tearDown();
  17. }
  18. public function test_cancel_path_is_wrapped_in_db_transaction(): void
  19. {
  20. Event::fake();
  21. $order = new class
  22. {
  23. public int $id = 99;
  24. public string $status = Order::STATUS_PENDING;
  25. public object $payment;
  26. public function __construct()
  27. {
  28. $this->payment = new class
  29. {
  30. public string $method = 'paypal_smart_button';
  31. public array $additional = ['gateway_order_id' => 'GW-LOCK-1'];
  32. };
  33. }
  34. };
  35. $orderRepository = Mockery::mock(OrderRepository::class);
  36. $orderRepository->shouldReceive('find')->once()->with(99)->andReturn($order);
  37. $orderRepository->shouldReceive('cancel')->never();
  38. $smartButton = Mockery::mock(SmartButton::class);
  39. $smartButton->shouldReceive('getOrder')->once()->with('GW-LOCK-1')->andReturn(
  40. (object) [
  41. 'result' => (object) [
  42. 'status' => 'VOIDED',
  43. 'purchase_units' => [(object) ['payments' => (object) ['captures' => []]]],
  44. ],
  45. ]
  46. );
  47. $this->app->instance(SmartButton::class, $smartButton);
  48. DB::shouldReceive('transaction')->once()->andReturn(false);
  49. (new ReconcilePendingPaymentJob(99))->handle($orderRepository);
  50. Event::assertDispatched('bagistoapi.payment.reconcile.voided');
  51. Event::assertNotDispatched('bagistoapi.payment.reconcile.cancelled');
  52. }
  53. }