diff --git a/packages/Webkul/BookingProduct/src/Helpers/EventTicket.php b/packages/Webkul/BookingProduct/src/Helpers/EventTicket.php
index cdd98dd75..f1116614f 100644
--- a/packages/Webkul/BookingProduct/src/Helpers/EventTicket.php
+++ b/packages/Webkul/BookingProduct/src/Helpers/EventTicket.php
@@ -151,7 +151,7 @@ class EventTicket extends Booking
$price += $ticket->price;
}
- if ($price == $item->base_price) {
+ if ($price === $item->base_price) {
return;
}
diff --git a/packages/Webkul/BookingProduct/src/Resources/views/shop/velocity/products/view/booking/event.blade.php b/packages/Webkul/BookingProduct/src/Resources/views/shop/velocity/products/view/booking/event.blade.php
index a50adda53..37a1791f8 100644
--- a/packages/Webkul/BookingProduct/src/Resources/views/shop/velocity/products/view/booking/event.blade.php
+++ b/packages/Webkul/BookingProduct/src/Resources/views/shop/velocity/products/view/booking/event.blade.php
@@ -25,7 +25,11 @@
@{{ ticket.name }}
-
+
+ @{{ ticket.original_formated_price }}
+ @{{ ticket.formated_price_text }}
+
+
@{{ ticket.formated_price_text }}
@@ -62,4 +66,15 @@
+
@endpush
\ No newline at end of file
diff --git a/tests/acceptance.suite.yml b/tests/acceptance.suite.yml
index ba234fcea..012379ee8 100644
--- a/tests/acceptance.suite.yml
+++ b/tests/acceptance.suite.yml
@@ -20,10 +20,11 @@ modules:
connection_timeout: 60
request_timeout: 60
log_js_errors: true
- - Laravel5:
+ - Webkul\Core\Helpers\Laravel5Helper:
part: ORM
cleanup: false
environment_file: .env
database_seeder_class: DatabaseSeeder
url: http://nginx
+
step_decorators: ~
\ No newline at end of file
diff --git a/tests/acceptance/BookingProduct/BookingProductEventTicketCest.php b/tests/acceptance/BookingProduct/BookingProductEventTicketCest.php
new file mode 100644
index 000000000..be5f61de4
--- /dev/null
+++ b/tests/acceptance/BookingProduct/BookingProductEventTicketCest.php
@@ -0,0 +1,49 @@
+faker = Factory::create();
+ }
+
+ public function testSpecialPricesAreShown(AcceptanceTester $I): void
+ {
+ $product = $I->haveProduct(Laravel5Helper::VIRTUAL_PRODUCT);
+ Product::query()->where('id', $product->id)->update(['type' => 'booking']);
+
+ $bookingProduct = $I->have(BookingProduct::class, [
+ 'type' => 'event',
+ 'available_to' => Carbon::now()->addMinutes($this->faker->numberBetween(2, 59))->toDateTimeString(),
+ 'product_id' => $product->id,
+ ]);
+
+ $scenario['ticket'] = [
+ 'price' => 10,
+ 'special_price' => 5
+ ];
+
+ $ticket = $I->have(BookingProductEventTicket::class, array_merge(
+ ['booking_product_id' => $bookingProduct->id], $scenario['ticket'])
+ );
+
+ $I->amOnPage($product->url_key);
+
+ $I->see(core()->currency($ticket->price), '//span[@class="regular-price"]');
+ $I->see(__('bookingproduct::app.shop.products.per-ticket-price', ['price' => core()->currency($ticket->special_price)]),
+ '//span[@class="special-price"]');
+
+ }
+}
\ No newline at end of file
diff --git a/tests/unit/BookingProduct/BookingProductEventTicketCest.php b/tests/unit/BookingProduct/BookingProductEventTicketCest.php
new file mode 100644
index 000000000..3c7d413f7
--- /dev/null
+++ b/tests/unit/BookingProduct/BookingProductEventTicketCest.php
@@ -0,0 +1,358 @@
+typeHelper = app(EventTicket::class);
+
+ $product = $I->haveProduct(Laravel5Helper::VIRTUAL_PRODUCT);
+ Product::query()->where('id', $product->id)->update(['type' => 'booking']);
+
+ $availableTo = Carbon::now()->addMinutes($I->fake()->numberBetween(2, 59));
+
+ $this->bookingProduct = $I->have(BookingProduct::class, [
+ 'type' => 'event',
+ 'available_to' => $availableTo->toDateTimeString(),
+ 'product_id' => $product->id,
+ ]);
+ }
+
+ /**
+ * @param UnitTester $I
+ * @param Example $scenario
+ *
+ * @dataProvider getTestDataForFormatPrice
+ */
+ public function testFormatPrice(UnitTester $I, Example $scenario): void
+ {
+ $tickets[] = $I->have(BookingProductEventTicket::class, array_merge(
+ ['booking_product_id' => $this->bookingProduct->id], $scenario['ticket'])
+ );
+
+ $formattedTickets = $this->typeHelper->formatPrice($tickets);
+
+ foreach ($scenario['expectFields'] as $field) {
+ $I->assertEquals($scenario['expectFields']['converted_price'], $formattedTickets[0]['converted_price']);
+ }
+
+ }
+
+ /**
+ * @param UnitTester $I
+ * @param Example $scenario
+ *
+ * @dataProvider getTestDataForAddAdditionalPrices
+ */
+ public function testAddAdditionalPrices(UnitTester $I, Example $scenario): void
+ {
+ $ticket = $I->have(BookingProductEventTicket::class, array_merge(
+ ['booking_product_id' => $this->bookingProduct->id], $scenario['ticket'])
+ );
+
+ $inputData = $scenario['inputData'];
+ $inputData['product_id'] = $this->bookingProduct->product_id;
+ $inputData['additional']['product_id'] = $this->bookingProduct->product_id;
+ $inputData['additional']['booking']['ticket_id'] = $ticket->id;
+
+ $addTicketPrices = $this->typeHelper->addAdditionalPrices([$inputData]);
+
+ $I->assertEquals($scenario['expected']['price'], $addTicketPrices[0]['price']);
+ $I->assertEquals($scenario['expected']['base_price'], $addTicketPrices[0]['base_price']);
+ $I->assertEquals($scenario['expected']['total'], $addTicketPrices[0]['total']);
+ $I->assertEquals($scenario['expected']['base_total'], $addTicketPrices[0]['base_total']);
+ }
+
+ /**
+ * @param UnitTester $I
+ * @param Example $scenario
+ *
+ * @dataProvider getTestDataForValidateCartItem
+ */
+ public function testValidateCartItem(UnitTester $I, Example $scenario): void
+ {
+ $ticket = $I->have(BookingProductEventTicket::class, array_merge(
+ ['booking_product_id' => $this->bookingProduct->id], $scenario['ticket'])
+ );
+
+ $product = Product::query()->find($this->bookingProduct->product_id);
+
+ $data = [
+ 'is_buy_now' => 0,
+ 'product_id' => $product->id,
+ 'quantity' => $scenario['qty'],
+ "booking" => [
+ "qty" => [
+ $ticket->id => $scenario['qty'],
+ ]
+ ]
+ ];
+
+ $cart = cart()->addProduct($product->id, $data);
+ $I->assertEquals('booking', $cart->items[0]->type);
+
+ $product->getTypeInstance()->validateCartItem($cart->items[0]);
+
+ $finalPrice = $product->price + $scenario['expected'];
+ $finalTotal = ($product->price + $scenario['expected']) * $scenario['qty'];
+
+ $I->seeRecord(CartItem::class, [
+ 'id' => $cart->items[0]->id,
+ 'price' => core()->convertPrice($finalPrice),
+ 'base_price' => $finalPrice,
+ 'total' => core()->convertPrice($finalTotal),
+ 'base_total' => $finalTotal,
+ ]);
+ }
+
+ /**
+ * @param UnitTester $I
+ * @param Example $scenario
+ *
+ * @dataProvider getTestDataForHasSalePrice
+ */
+ public function testHasSalePrice(UnitTester $I, Example $scenario): void
+ {
+ $ticket = $I->have(BookingProductEventTicket::class, array_merge(
+ ['booking_product_id' => $this->bookingProduct->id], $scenario['ticket'])
+ );
+
+ $I->assertEquals($scenario['expect'], $this->typeHelper->isInSale($ticket));
+ }
+
+ /* Data Providers */
+
+ private function getTestDataForFormatPrice(): array
+ {
+ return [
+ [
+ 'ticket' => ['price' => 10],
+ 'expectFields' => [
+ 'converted_price' => 10,
+ 'formated_price' => '$10.00',
+ 'formated_price_text' => '$10.00 Per Ticket'
+ ]
+ ],
+ [
+ 'ticket' => ['price' => 20, 'special_price' => 10],
+ 'expectFields' => [
+ 'converted_price' => 10,
+ 'formated_price' => '$10.00',
+ 'formated_price_text' => '$10.00 Per Ticket',
+ 'original_converted_price' => 20,
+ 'original_formated_price' => '$20.00',
+ ]
+ ],
+ [
+ 'ticket' => [
+ 'price' => 20,
+ 'special_price' => 10,
+ 'special_price_from' => '0000-00-00 00:00:00',
+ 'special_price_to' => '0000-00-00 00:00:00',
+ ],
+ 'expectFields' => [
+ 'converted_price' => 10,
+ 'formated_price' => '$10.00',
+ 'formated_price_text' => '$10.00 Per Ticket',
+ 'original_converted_price' => 20,
+ 'original_formated_price' => '$20.00',
+ ]
+ ],
+ [
+ 'ticket' => [
+ 'price' => 10,
+ 'special_price' => 7,
+ 'special_price_from' => Carbon::yesterday(),
+ 'special_price_to' => Carbon::now(),
+ ],
+ 'expectFields' => [
+ 'converted_price' => 10,
+ 'formated_price' => '$10.00',
+ 'formated_price_text' => '$10.00 Per Ticket',
+ ]
+ ],
+ ];
+ }
+
+ private function getTestDataForAddAdditionalPrices(): array
+ {
+ return [
+ [
+ 'ticket' => ['price' => 5],
+ 'inputData' => [
+ 'quantity' => 1,
+ 'price' => 10.0,
+ 'base_price' => 10.0,
+ 'total' => 10.0,
+ 'base_total' => 10.0,
+ 'additional' => [
+ 'quantity' => 1,
+ ]
+ ],
+ 'expected' => [
+ 'price' => 15.0,
+ 'base_price' => 15.0,
+ 'total' => 15.0,
+ 'base_total' => 15.0,
+ ]
+ ],
+ [
+ 'ticket' => ['price' => 20, 'special_price' => 10],
+ 'inputData' => [
+ 'quantity' => 1,
+ 'price' => 20.0,
+ 'base_price' => 20.0,
+ 'total' => 20.0,
+ 'base_total' => 20.0,
+ 'additional' => [
+ 'quantity' => 1,
+ ]
+ ],
+ 'expected' => [
+ 'price' => 30.0,
+ 'base_price' => 30.0,
+ 'total' => 30.0,
+ 'base_total' => 30.0,
+ ]
+ ],
+ [
+ 'ticket' => ['price' => 20, 'special_price' => 10],
+ 'inputData' => [
+ 'quantity' => 2,
+ 'price' => 20.0,
+ 'base_price' => 20.0,
+ 'total' => 20.0,
+ 'base_total' => 20.0,
+ 'additional' => [
+ 'quantity' => 2,
+ ]
+ ],
+ 'expected' => [
+ 'price' => 30.0,
+ 'base_price' => 30.0,
+ 'total' => 40.0,
+ 'base_total' => 40.0,
+ ]
+ ],
+ ];
+ }
+
+ private function getTestDataForValidateCartItem(): array
+ {
+ return [
+ [
+ 'ticket' => ['price' => 10],
+ 'qty' => 1,
+ 'expected' => 10,
+ ],
+ [
+ 'ticket' => ['price' => 20, 'special_price' => 10],
+ 'qty' => 1,
+ 'expected' => 10,
+ ],
+ [
+ 'ticket' => ['price' => 20, 'special_price' => 10],
+ 'qty' => 2,
+ 'expected' => 10
+ ],
+ [
+ 'ticket' => [
+ 'price' => 20,
+ 'special_price' => 10,
+ 'special_price_from' => '0000-00-00 00:00:00',
+ 'special_price_to' => '0000-00-00 00:00:00',
+ ],
+ 'qty' => 2,
+ 'expected' => 10
+ ],
+ [
+ 'ticket' => [
+ 'price' => 10,
+ 'special_price' => 7,
+ 'special_price_from' => Carbon::yesterday(),
+ 'special_price_to' => Carbon::now(),
+ ],
+ 'qty' => 2,
+ 'expected' => 10
+ ],
+ ];
+ }
+
+ private function getTestDataForHasSalePrice(): array
+ {
+ return [
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => null
+ ],
+ 'expect' => false
+ ],
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => '5.0000'
+ ],
+ 'expect' => true
+ ],
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => '5.0000',
+ 'special_price_from' => null,
+ 'special_price_to' => null,
+ ],
+ 'expect' => true
+ ],
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => '5.0000',
+ 'special_price_from' => '0000-00-00 00:00:00',
+ 'special_price_to' => '0000-00-00 00:00:00',
+ ],
+ 'expect' => true
+ ],
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => '5.0000',
+ 'special_price_from' => Carbon::yesterday(),
+ 'special_price_to' => Carbon::tomorrow(),
+ ],
+ 'expect' => true
+ ],
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => '5.0000',
+ 'special_price_from' => Carbon::yesterday(),
+ 'special_price_to' => Carbon::now(),
+ ],
+ 'expect' => false
+ ],
+ [
+ 'ticket' => [
+ 'price' => '10.0000',
+ 'special_price' => '5.0000',
+ 'special_price_from' => Carbon::now(),
+ 'special_price_to' => Carbon::tomorrow(),
+ ],
+ 'expect' => true
+ ],
+ ];
+ }
+
+
+}