Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php use Illuminate\Support\Facades\Mail; use Webkul\Admin\Mail\Order\RefundedNotificati..
Decoded Output download
<?php
use Illuminate\Support\Facades\Mail;
use Webkul\Admin\Mail\Order\RefundedNotification as AdminRefundedNotification;
use Webkul\Checkout\Models\Cart;
use Webkul\Checkout\Models\CartAddress;
use Webkul\Checkout\Models\CartItem;
use Webkul\Checkout\Models\CartPayment;
use Webkul\Checkout\Models\CartShippingRate;
use Webkul\Customer\Models\Customer;
use Webkul\Customer\Models\CustomerAddress;
use Webkul\Faker\Helpers\Product as ProductFaker;
use Webkul\Sales\Models\Order;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Sales\Models\OrderItem;
use Webkul\Sales\Models\OrderPayment;
use Webkul\Sales\Models\Refund;
use Webkul\Shop\Mail\Order\RefundedNotification as ShopRefundedNotification;
use function Pest\Laravel\get;
use function Pest\Laravel\postJson;
it('should return the refund index page', function () {
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.sales.refunds.index'))
->assertOk()
->assertSeeText(trans('admin::app.sales.refunds.index.title'));
});
it('should fails the validation error when refund items data not provided', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => [
'INVALID_DATA',
],
'shipping' => '0',
'adjustment_refund' => '0',
'adjustment_fee' => '0',
],
])
->assertJsonValidationErrorFor('refund.items.0')
->assertUnprocessable();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
it('should fails the validation error when refund items data provided with wrong way', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => [
fake()->word(),
],
],
])
->assertJsonValidationErrorFor('refund.items.0')
->assertUnprocessable();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
it('should store the order refund', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_shipped' => 1,
'qty_invoiced' => 1,
'qty_canceled' => 1,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
foreach ($order->items as $item) {
foreach ($order->channel->inventory_sources as $inventorySource) {
$items[$item->id] = $inventorySource->id;
}
}
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => $items,
'shipping' => 0,
'adjustment_refund' => '0',
'adjustment_fee' => '0',
],
])
->assertRedirect(route('admin.sales.refunds.index'))
->isRedirection();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Refund::class => [
[
'state' => 'refunded',
'order_id' => $order->id,
],
],
]);
});
it('should store the order refund and send email to the customer', function () {
// Arrange.
Mail::fake();
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_shipped' => 1,
'qty_invoiced' => 1,
'qty_canceled' => 1,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
foreach ($order->items as $item) {
foreach ($order->channel->inventory_sources as $inventorySource) {
$items[$item->id] = $inventorySource->id;
}
}
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => $items,
'shipping' => 0,
'adjustment_refund' => '0',
'adjustment_fee' => '0',
],
])
->assertRedirect(route('admin.sales.refunds.index'))
->isRedirection();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Refund::class => [
[
'state' => 'refunded',
'order_id' => $order->id,
],
],
]);
Mail::assertQueued(AdminRefundedNotification::class);
Mail::assertQueued(ShopRefundedNotification::class);
Mail::assertQueuedCount(2);
});
it('should return the order refunded data', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
$summary = [
'subtotal' => ['price' => 0],
'discount' => ['price' => 0],
'tax' => ['price' => 0],
'shipping' => ['price' => 0],
'grand_total' => ['price' => 0],
];
$items = [];
foreach ($order->items as $item) {
if ($item->qty_to_refund) {
$items[$item->id] = rand(1, $item->qty_to_refund);
}
}
foreach ($items as $orderItemId => $qty) {
$orderItem = OrderItem::find($orderItemId);
$summary['subtotal']['price'] += $orderItem->base_price * $qty;
$summary['discount']['price'] += ($orderItem->base_discount_amount / $orderItem->qty_ordered) * $qty;
$summary['tax']['price'] += ($orderItem->tax_amount / $orderItem->qty_ordered) * $qty;
}
$summary['shipping']['price'] += $order->base_shipping_invoiced - $order->base_shipping_refunded - $order->base_shipping_discount_amount;
$summary['grand_total']['price'] += $summary['subtotal']['price'] + $summary['tax']['price'] + $summary['shipping']['price'] - $summary['discount']['price'];
$refund = [
'items' => $items,
'shipping' => $order->base_shipping_invoiced - $order->base_shipping_refunded - $order->base_shipping_discount_amount,
'adjustment_refund' => 0,
'adjustment_fee' => 0,
];
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.update_totals', $order->id), $refund)
->assertOk()
->assertJsonPath('grand_total.price', $summary['grand_total']['price']);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
it('should return the view page of refund', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_shipped' => 1,
'qty_invoiced' => 1,
'qty_canceled' => 1,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
$refund = Refund::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.sales.refunds.view', $refund->id))
->assertOk()
->assertSeeText(trans('admin::app.sales.refunds.view.title', ['refund_id' => $refund->id]))
->assertSeeText(trans('admin::app.sales.refunds.view.product-ordered'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
?>
Did this file decode correctly?
Original Code
<?php
use Illuminate\Support\Facades\Mail;
use Webkul\Admin\Mail\Order\RefundedNotification as AdminRefundedNotification;
use Webkul\Checkout\Models\Cart;
use Webkul\Checkout\Models\CartAddress;
use Webkul\Checkout\Models\CartItem;
use Webkul\Checkout\Models\CartPayment;
use Webkul\Checkout\Models\CartShippingRate;
use Webkul\Customer\Models\Customer;
use Webkul\Customer\Models\CustomerAddress;
use Webkul\Faker\Helpers\Product as ProductFaker;
use Webkul\Sales\Models\Order;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Sales\Models\OrderItem;
use Webkul\Sales\Models\OrderPayment;
use Webkul\Sales\Models\Refund;
use Webkul\Shop\Mail\Order\RefundedNotification as ShopRefundedNotification;
use function Pest\Laravel\get;
use function Pest\Laravel\postJson;
it('should return the refund index page', function () {
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.sales.refunds.index'))
->assertOk()
->assertSeeText(trans('admin::app.sales.refunds.index.title'));
});
it('should fails the validation error when refund items data not provided', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => [
'INVALID_DATA',
],
'shipping' => '0',
'adjustment_refund' => '0',
'adjustment_fee' => '0',
],
])
->assertJsonValidationErrorFor('refund.items.0')
->assertUnprocessable();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
it('should fails the validation error when refund items data provided with wrong way', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => [
fake()->word(),
],
],
])
->assertJsonValidationErrorFor('refund.items.0')
->assertUnprocessable();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
it('should store the order refund', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_shipped' => 1,
'qty_invoiced' => 1,
'qty_canceled' => 1,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
foreach ($order->items as $item) {
foreach ($order->channel->inventory_sources as $inventorySource) {
$items[$item->id] = $inventorySource->id;
}
}
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => $items,
'shipping' => 0,
'adjustment_refund' => '0',
'adjustment_fee' => '0',
],
])
->assertRedirect(route('admin.sales.refunds.index'))
->isRedirection();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Refund::class => [
[
'state' => 'refunded',
'order_id' => $order->id,
],
],
]);
});
it('should store the order refund and send email to the customer', function () {
// Arrange.
Mail::fake();
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_shipped' => 1,
'qty_invoiced' => 1,
'qty_canceled' => 1,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
foreach ($order->items as $item) {
foreach ($order->channel->inventory_sources as $inventorySource) {
$items[$item->id] = $inventorySource->id;
}
}
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.store', $order->id), [
'refund' => [
'items' => $items,
'shipping' => 0,
'adjustment_refund' => '0',
'adjustment_fee' => '0',
],
])
->assertRedirect(route('admin.sales.refunds.index'))
->isRedirection();
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
Refund::class => [
[
'state' => 'refunded',
'order_id' => $order->id,
],
],
]);
Mail::assertQueued(AdminRefundedNotification::class);
Mail::assertQueued(ShopRefundedNotification::class);
Mail::assertQueuedCount(2);
});
it('should return the order refunded data', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
$summary = [
'subtotal' => ['price' => 0],
'discount' => ['price' => 0],
'tax' => ['price' => 0],
'shipping' => ['price' => 0],
'grand_total' => ['price' => 0],
];
$items = [];
foreach ($order->items as $item) {
if ($item->qty_to_refund) {
$items[$item->id] = rand(1, $item->qty_to_refund);
}
}
foreach ($items as $orderItemId => $qty) {
$orderItem = OrderItem::find($orderItemId);
$summary['subtotal']['price'] += $orderItem->base_price * $qty;
$summary['discount']['price'] += ($orderItem->base_discount_amount / $orderItem->qty_ordered) * $qty;
$summary['tax']['price'] += ($orderItem->tax_amount / $orderItem->qty_ordered) * $qty;
}
$summary['shipping']['price'] += $order->base_shipping_invoiced - $order->base_shipping_refunded - $order->base_shipping_discount_amount;
$summary['grand_total']['price'] += $summary['subtotal']['price'] + $summary['tax']['price'] + $summary['shipping']['price'] - $summary['discount']['price'];
$refund = [
'items' => $items,
'shipping' => $order->base_shipping_invoiced - $order->base_shipping_refunded - $order->base_shipping_discount_amount,
'adjustment_refund' => 0,
'adjustment_fee' => 0,
];
// Act and Assert.
$this->loginAsAdmin();
postJson(route('admin.sales.refunds.update_totals', $order->id), $refund)
->assertOk()
->assertJsonPath('grand_total.price', $summary['grand_total']['price']);
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
it('should return the view page of refund', function () {
// Arrange.
$product = (new ProductFaker([
'attributes' => [
5 => 'new',
],
'attribute_value' => [
'new' => [
'boolean_value' => true,
],
],
]))
->getSimpleProductFactory()
->create();
$customer = Customer::factory()->create();
$cart = Cart::factory()->create([
'customer_id' => $customer->id,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
'customer_email' => $customer->email,
'is_guest' => 0,
]);
$additional = [
'product_id' => $product->id,
'rating' => '0',
'is_buy_now' => '0',
'quantity' => '1',
];
$cartItem = CartItem::factory()->create([
'cart_id' => $cart->id,
'product_id' => $product->id,
'sku' => $product->sku,
'quantity' => $additional['quantity'],
'name' => $product->name,
'price' => $convertedPrice = core()->convertPrice($price = $product->price),
'price_incl_tax' => $convertedPrice,
'base_price' => $price,
'base_price_incl_tax' => $price,
'total' => $total = $convertedPrice * $additional['quantity'],
'total_incl_tax' => $total,
'base_total' => $price * $additional['quantity'],
'weight' => $product->weight ?? 0,
'total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'base_total_weight' => ($product->weight ?? 0) * $additional['quantity'],
'type' => $product->type,
'additional' => $additional,
]);
$customerAddress = CustomerAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CustomerAddress::ADDRESS_TYPE,
]);
$cartBillingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_BILLING,
]);
$cartShippingAddress = CartAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => CartAddress::ADDRESS_TYPE_SHIPPING,
]);
$cartPayment = CartPayment::factory()->create([
'cart_id' => $cart->id,
'method' => $paymentMethod = 'cashondelivery',
'method_title' => core()->getConfigData('sales.payment_methods.'.$paymentMethod.'.title'),
]);
$cartShippingRate = CartShippingRate::factory()->create([
'carrier' => 'free',
'carrier_title' => 'Free shipping',
'method' => 'free_free',
'method_title' => 'Free Shipping',
'method_description' => 'Free Shipping',
'cart_address_id' => $cartShippingAddress->id,
]);
$order = Order::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'customer_email' => $customer->email,
'customer_first_name' => $customer->first_name,
'customer_last_name' => $customer->last_name,
]);
$orderItem = OrderItem::factory()->create([
'product_id' => $product->id,
'order_id' => $order->id,
'sku' => $product->sku,
'type' => $product->type,
'name' => $product->name,
'qty_shipped' => 1,
'qty_invoiced' => 1,
'qty_canceled' => 1,
]);
$orderBillingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
]);
$orderShippingAddress = OrderAddress::factory()->create([
'cart_id' => $cart->id,
'customer_id' => $customer->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
]);
$orderPayment = OrderPayment::factory()->create([
'order_id' => $order->id,
]);
$refund = Refund::factory()->create([
'order_id' => $order->id,
]);
// Act and Assert.
$this->loginAsAdmin();
get(route('admin.sales.refunds.view', $refund->id))
->assertOk()
->assertSeeText(trans('admin::app.sales.refunds.view.title', ['refund_id' => $refund->id]))
->assertSeeText(trans('admin::app.sales.refunds.view.product-ordered'));
$cart->refresh();
$cartItem->refresh();
$cartBillingAddress->refresh();
$cartShippingAddress->refresh();
$orderBillingAddress->refresh();
$orderShippingAddress->refresh();
$order->refresh();
$orderItem->refresh();
$this->assertModelWise([
Cart::class => [
$this->prepareCart($cart),
],
CartItem::class => [
$this->prepareCartItem($cartItem),
],
CartPayment::class => [
$this->prepareCartPayment($cartPayment),
],
CartAddress::class => [
$this->prepareAddress($cartBillingAddress),
],
CartAddress::class => [
$this->prepareAddress($cartShippingAddress),
],
CartShippingRate::class => [
$this->prepareCartShippingRate($cartShippingRate),
],
CustomerAddress::class => [
$this->prepareAddress($customerAddress),
],
Order::class => [
$this->prepareOrder($order),
],
OrderItem::class => [
$this->prepareOrderItem($orderItem),
],
OrderAddress::class => [
$this->prepareAddress($orderBillingAddress),
$this->prepareAddress($orderShippingAddress),
],
OrderPayment::class => [
$this->prepareOrderPayment($orderPayment),
],
]);
});
Function Calls
None |
Stats
MD5 | c6c3e84cb385f233d016abbcdb0c43cc |
Eval Count | 0 |
Decode Time | 92 ms |