loginAsCustomer(); get(route('shop.customers.account.orders.index')) ->assertOk() ->assertSeeText(trans('shop::app.customers.account.orders.title')); }); it('should view the order', 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), 'base_price' => $price, 'total' => $convertedPrice * $additional['quantity'], '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'), ]); $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->loginAsCustomer($customer); get(route('shop.customers.account.orders.view', $order->id)) ->assertOk() ->assertSeeText(trans('shop::app.customers.account.orders.view.information.sku')) ->assertSeeText(trans('shop::app.customers.account.orders.view.information.product-name')) ->assertSeeText(trans('shop::app.customers.account.orders.view.information.total-due')) ->assertSeeText(trans('shop::app.customers.account.orders.view.page-title', ['order_id' => $order->increment_id])); $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), ], 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 cancel the customer order', 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), 'base_price' => $price, 'total' => $convertedPrice * $additional['quantity'], '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'), ]); $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->loginAsCustomer($customer); postJson(route('shop.customers.account.orders.cancel', $order->id)) ->assertRedirect(); $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), ], 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 print the order invoice', 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), 'base_price' => $price, 'total' => $convertedPrice * $additional['quantity'], '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'), ]); $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, ]); $invoice = Invoice::factory([ 'order_id' => $order->id, 'state' => 'paid', ])->create(); $invoiceItem = InvoiceItem::factory()->create([ 'invoice_id' => $invoice->id, 'order_item_id' => $orderItem->id, 'name' => $orderItem->name, 'sku' => $orderItem->sku, 'qty' => 1, 'price' => $orderItem->price, 'base_price' => $orderItem->base_price, 'total' => $orderItem->price, 'base_total' => $orderItem->base_price, 'tax_amount' => (($orderItem->tax_amount / $orderItem->qty_ordered)), 'base_tax_amount' => (($orderItem->base_tax_amount / $orderItem->qty_ordered)), 'discount_amount' => (($orderItem->discount_amount / $orderItem->qty_ordered)), 'base_discount_amount' => (($orderItem->base_discount_amount / $orderItem->qty_ordered)), 'product_id' => $orderItem->product_id, 'product_type' => $orderItem->product_type, 'additional' => $orderItem->additional, ]); // Act and Assert. $this->loginAsCustomer($customer); getJson(route('shop.customers.account.orders.print-invoice', $invoice->id)) ->assertDownload('invoice-'.$invoice->created_at->format('d-m-Y').'.pdf'); $cart->refresh(); $cartItem->refresh(); $cartBillingAddress->refresh(); $cartShippingAddress->refresh(); $orderBillingAddress->refresh(); $orderShippingAddress->refresh(); $order->refresh(); $orderItem->refresh(); $invoiceItem->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), ], 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), ], InvoiceItem::class => [ $this->prepareInvoiceItem($invoiceItem), ], ]); });