From 4138d0d1caf513bdc7fcb9b43aeca29f6803ed47 Mon Sep 17 00:00:00 2001 From: Devansh Date: Mon, 18 Apr 2022 19:37:56 +0530 Subject: [PATCH] Added Unit Test --- .../ProductOrderedInventoryFactory.php | 31 +++++++ .../src/Models/ProductOrderedInventory.php | 32 +++++++- .../Sales/Order/OrderItemRepositoryCest.php | 80 +++++++++++++++++++ 3 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 packages/Webkul/Product/src/Database/Factories/ProductOrderedInventoryFactory.php create mode 100644 tests/unit/Sales/Order/OrderItemRepositoryCest.php diff --git a/packages/Webkul/Product/src/Database/Factories/ProductOrderedInventoryFactory.php b/packages/Webkul/Product/src/Database/Factories/ProductOrderedInventoryFactory.php new file mode 100644 index 000000000..b5139c73f --- /dev/null +++ b/packages/Webkul/Product/src/Database/Factories/ProductOrderedInventoryFactory.php @@ -0,0 +1,31 @@ + $this->faker->numberBetween(100, 200), + 'product_id' => Product::factory(), + 'channel_id' => 1, + ]; + } +} diff --git a/packages/Webkul/Product/src/Models/ProductOrderedInventory.php b/packages/Webkul/Product/src/Models/ProductOrderedInventory.php index ab5423cf4..992d93ac9 100644 --- a/packages/Webkul/Product/src/Models/ProductOrderedInventory.php +++ b/packages/Webkul/Product/src/Models/ProductOrderedInventory.php @@ -2,15 +2,29 @@ namespace Webkul\Product\Models; +use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Webkul\Inventory\Models\InventorySourceProxy; use Webkul\Core\Models\ChannelProxy; use Webkul\Product\Contracts\ProductOrderedInventory as ProductOrderedInventoryContract; +use Webkul\Product\Database\Factories\ProductOrderedInventoryFactory; class ProductOrderedInventory extends Model implements ProductOrderedInventoryContract { + use HasFactory; + + /** + * Timestamps. + * + * @var bool + */ public $timestamps = false; + /** + * Fillables. + * + * @var array + */ protected $fillable = [ 'qty', 'product_id', @@ -19,6 +33,8 @@ class ProductOrderedInventory extends Model implements ProductOrderedInventoryCo /** * Get the channel owns the inventory. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function channel() { @@ -27,9 +43,21 @@ class ProductOrderedInventory extends Model implements ProductOrderedInventoryCo /** * Get the product that owns the product inventory. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function product() { return $this->belongsTo(ProductProxy::modelClass()); } -} \ No newline at end of file + + /** + * Create a new factory instance for the model. + * + * @return Factory + */ + protected static function newFactory(): Factory + { + return ProductOrderedInventoryFactory::new (); + } +} diff --git a/tests/unit/Sales/Order/OrderItemRepositoryCest.php b/tests/unit/Sales/Order/OrderItemRepositoryCest.php new file mode 100644 index 000000000..d257c865c --- /dev/null +++ b/tests/unit/Sales/Order/OrderItemRepositoryCest.php @@ -0,0 +1,80 @@ +getProperty('model'); + $property->setAccessible(true); + + $this->repository = $reflection->newInstanceWithoutConstructor(); + } + + public function testUpdateProductOrderedInventories(UnitTester $I) + { + /** + * Having 10 quantity in inventory. + */ + $product = $I->haveProduct(Bagisto::SIMPLE_PRODUCT, [ + 'productInventory' => ['qty' => 10], + ]); + + /** + * 2 quantities are on hold. + */ + $productOrderedInventory = $I->have(ProductOrderedInventory::class, [ + 'product_id' => $product->id, + 'qty' => 2, + ]); + + /** + * 5 quantities are shipped. + */ + $orderItem1 = $I->have(OrderItem::class, [ + 'product_id' => $product->id, + 'qty_ordered' => 5, + 'qty_shipped' => 5, + ]); + + /** + * 2 quantities are in queue. + */ + $orderItem2 = $I->have(OrderItem::class, [ + 'product_id' => $product->id, + 'qty_ordered' => 2, + 'qty_shipped' => 0, + ]); + + /** + * Now testing the repository method with shipped one cancelled. + */ + $this->repository->updateProductOrderedInventories($orderItem1); + $productOrderedInventory->refresh(); + $I->assertNotEquals(0, $productOrderedInventory->qty); + $I->assertEquals(2, $productOrderedInventory->qty); + + /** + * Now testing the repository method with pending one cancelled. + */ + $this->repository->updateProductOrderedInventories($orderItem2); + $productOrderedInventory->refresh(); + $I->assertEquals(0, $productOrderedInventory->qty); + } +}