| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- <?php
- namespace Webkul\BagistoApi\Tests\Unit\Transformers;
- use Illuminate\Http\Request;
- use Tests\TestCase;
- use Webkul\BagistoApi\Transformers\ExpressOrderResource;
- /**
- * Coverage for express-checkout order shaping:
- *
- * - shipping_amount / tax_amount are zeroed
- * - grand_total == sub_total - discount_amount
- * - billing address is filled from the configured placeholder when
- * the cart has no real address attached
- */
- class ExpressOrderResourceTest extends TestCase
- {
- public function test_zeros_out_tax_and_shipping_and_uses_placeholder_address(): void
- {
- config(['bagistoapi.express_checkout.placeholder_address' => [
- 'first_name' => 'Express',
- 'last_name' => 'Checkout',
- 'email' => 'expr@placeholder.local',
- 'address' => 'Pending',
- 'city' => 'PendingCity',
- 'state' => 'PendingState',
- 'country' => 'US',
- 'postcode' => '00000',
- 'phone' => '0000000000',
- ]]);
- $cart = $this->fakeCart([
- 'id' => 99,
- 'sub_total' => 100.0,
- 'base_sub_total' => 100.0,
- 'discount_amount' => 10.0,
- 'base_discount_amount' => 10.0,
- ]);
- $payload = (new ExpressOrderResource($cart))->toArray(Request::create('/'));
- $this->assertSame(0, $payload['tax_amount']);
- $this->assertSame(0, $payload['shipping_tax_amount']);
- $this->assertEquals(90.0, $payload['grand_total']);
- $this->assertEquals(90.0, $payload['base_grand_total']);
- $this->assertSame('PendingCity', $payload['billing_address']['city']);
- $this->assertSame('00000', $payload['billing_address']['postcode']);
- $this->assertSame('order_billing', $payload['billing_address']['address_type']);
- }
- public function test_shipping_address_omitted_for_non_stockable_carts(): void
- {
- $cart = $this->fakeCart([
- 'id' => 1,
- 'sub_total' => 50.0,
- 'base_sub_total' => 50.0,
- 'discount_amount' => 0,
- 'haveStockable' => false,
- ]);
- $payload = (new ExpressOrderResource($cart))->toArray(Request::create('/'));
- $this->assertNull($payload['shipping_address']);
- $this->assertNotEmpty($payload['billing_address']);
- }
- /**
- * Build a cart-shaped stdClass that exposes every property the
- * resource reads. Eloquent's behavior is irrelevant here - the
- * resource only does property access + a `haveStockableItems()`
- * method call.
- */
- private function fakeCart(array $overrides): object
- {
- $defaults = [
- 'id' => 1,
- 'is_guest' => 1,
- 'customer_id' => null,
- 'customer' => null,
- 'customer_email' => null,
- 'customer_first_name' => null,
- 'customer_last_name' => null,
- 'channel_id' => 1,
- 'items_count' => 1,
- 'items_qty' => 1,
- 'base_currency_code' => 'USD',
- 'channel_currency_code' => 'USD',
- 'cart_currency_code' => 'USD',
- 'sub_total' => 0,
- 'sub_total_incl_tax' => 0,
- 'base_sub_total' => 0,
- 'base_sub_total_incl_tax' => 0,
- 'coupon_code' => null,
- 'applied_cart_rule_ids' => null,
- 'discount_amount' => 0,
- 'base_discount_amount' => 0,
- 'billing_address' => null,
- 'shipping_address' => null,
- 'payment' => null,
- 'items' => collect(),
- 'haveStockable' => true,
- ];
- $data = array_merge($defaults, $overrides);
- $cart = new class
- {
- public ?object $channel = null;
- public ?object $payment = null;
- public ?object $billing_address = null;
- public ?object $shipping_address = null;
- public mixed $items = null;
- public bool $haveStockable = true;
- public function haveStockableItems(): bool
- {
- return $this->haveStockable;
- }
- };
- foreach ($data as $key => $value) {
- $cart->{$key} = $value;
- }
- $cart->channel = new class {
- public string $name = 'Default';
- };
- $cart->payment = (object) [
- 'method' => 'paypal_smart_button',
- 'method_title' => 'PayPal Smart Button',
- ];
- return $cart;
- }
- }
|