sarga/tests/unit/BookingProduct/BookingProductEventTicketCe...

359 lines
12 KiB
PHP

<?php
use Carbon\Carbon;
use Codeception\Example;
use Webkul\BookingProduct\Helpers\EventTicket;
use Webkul\BookingProduct\Models\BookingProduct;
use Webkul\BookingProduct\Models\BookingProductEventTicket;
use Webkul\Checkout\Models\CartItem;
use Helper\Bagisto;
use Webkul\Product\Models\Product;
class BookingProductEventTicketCest
{
protected $typeHelper, $bookingProduct;
public function _before(UnitTester $I): void
{
$this->typeHelper = app(EventTicket::class);
$product = $I->haveProduct(Bagisto::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
],
];
}
}