Merge branch 'master' into issue-4119

Merged with master.
This commit is contained in:
devansh bawari 2020-11-13 11:54:39 +05:30
commit 8a5c6dc6b8
3 changed files with 136 additions and 25 deletions

View File

@ -122,8 +122,8 @@ class ProductRepository extends Repository
if ($categoryId) {
$qb->where('product_categories.category_id', $categoryId);
}
}
return $qb->get();
}
@ -334,7 +334,7 @@ class ProductRepository extends Repository
*/
public function getNewProducts()
{
$count = core()->getConfigData('catalog.products.homepage.no_of_new_product_homepage');
$count = core()->getConfigData('catalog.products.homepage.no_of_new_product_homepage');
$results = app(ProductFlatRepository::class)->scopeQuery(function ($query) {
$channel = request()->get('channel') ?: (core()->getCurrentChannelCode() ?: core()->getDefaultChannelCode());
@ -614,7 +614,7 @@ class ProductRepository extends Repository
{
$ids = [];
foreach (['name', 'sku', 'status', 'url_key'] as $code) {
foreach (['name', 'sku', 'product_number', 'status', 'url_key'] as $code) {
$ids[$code] = Attribute::query()->where(['code' => $code])->firstOrFail()->id;
}
@ -675,6 +675,18 @@ class ProductRepository extends Repository
$newProductFlat->sku = $copiedProduct->sku;
}
// change product number
if ($oldValue->attribute_id === $attributeIds['product_number']) {
$copyProductNumber = trans('admin::app.copy-of-slug');
$copiedProductNumber = sprintf('%s%s-%s',
Str::startsWith($originalProduct->product_number, $copyProductNumber) ? '' : $copyProductNumber,
$originalProduct->product_number,
$randomSuffix
);
$newValue->text_value = $copiedProductNumber;
$newProductFlat->product_number = $copiedProductNumber;
}
// force the copied product to be inactive so the admin can adjust it before release
if ($oldValue->attribute_id === $attributeIds['status']) {
$newValue->boolean_value = 0;

View File

@ -2,26 +2,44 @@
namespace Tests\Functional\Admin\Catalog;
use FunctionalTester;
use Faker\Factory;
use Webkul\Attribute\Models\Attribute;
use Webkul\Attribute\Models\AttributeFamily;
use Webkul\Attribute\Models\AttributeOption;
use Webkul\Core\Helpers\Laravel5Helper;
use FunctionalTester;
use Webkul\Core\Models\Locale;
use Webkul\Product\Models\Product;
use Webkul\Attribute\Models\Attribute;
use Webkul\Core\Helpers\Laravel5Helper;
use Webkul\Attribute\Models\AttributeFamily;
use Webkul\Attribute\Models\AttributeOption;
use Webkul\Product\Models\ProductAttributeValue;
class ProductCest
{
/** @var Factory $faker */
/**
* Factory $faker
*
* @var Faker\Factory
*/
private $faker;
/** @var Attribute $attributeBrand */
/**
* Attribute $attributeBrand
*
* @var Webkul\Attribute\Models\Attribute
*/
private $attributeBrand;
/** @var AttributeOption $attributeBrandDefaultOption */
/**
* AttributeOption $attributeBrandDefaultOption
*
* @var Webkul\Attribute\Models\AttributeOption
*/
private $attributeBrandDefaultOption;
/** @var AttributeOption $attributeBrandOption */
/**
* AttributeOption $attributeBrandOption
*
* @var Webkul\Attribute\Models\AttributeOption
*/
private $attributeBrandOption;
public function _before(FunctionalTester $I): void
@ -47,12 +65,10 @@ class ProductCest
];
}
$this->attributeBrandDefaultOption = $I->have(AttributeOption::class,
$defaultAttributeOptionAttributes);
$this->attributeBrandDefaultOption = $I->have(AttributeOption::class, $defaultAttributeOptionAttributes);
$this->attributeBrandOption = $I->have(AttributeOption::class, [
'attribute_id' => $this->attributeBrand->id,
]);
}
public function testIndex(FunctionalTester $I): void
@ -90,9 +106,7 @@ class ProductCest
$I->fillField('sku', $sku);
$I->click(__('admin::app.catalog.products.save-btn-title'));
$I->seeInSource('Product created successfully.');
$I->seeCurrentRouteIs('admin.catalog.products.edit');
$productTitle = $this->faker->word;
@ -100,11 +114,9 @@ class ProductCest
$I->fillField('name', $productTitle);
$I->fillField('url_key', $productUrlKey);
$I->selectOption($this->attributeBrand->code,
$this->attributeBrandDefaultOption->id);
$I->selectOption($this->attributeBrand->code, $this->attributeBrandDefaultOption->id);
$I->fillField('price', $this->faker->randomFloat(2));
$I->fillField('weight', $this->faker->randomDigit);
$I->fillField('short_description', $this->faker->paragraph(1, true));
$I->fillField('description', $this->faker->paragraph(5, true));
@ -119,11 +131,18 @@ class ProductCest
'attribute_family_id' => $attributeFamily->id,
]);
$productAttribute = $I->grabRecord(ProductAttributeValue::class, [
'product_id' => $product->id,
'attribute_id' => $this->attributeBrand->id,
'integer_value' => $this->attributeBrandDefaultOption->id
]);
$I->seeRecord(ProductAttributeValue::class, [
'product_id' => $product->id,
'attribute_id' => $this->attributeBrand->id,
'integer_value' => $this->attributeBrandDefaultOption->id,
'text_value' => null,
'integer_value' => $this->attributeBrandDefaultOption->id
]);
$I->assertNull($productAttribute->text_value);
}
}

View File

@ -2,25 +2,105 @@
namespace Tests\Functional\Admin\Sales;
use Faker\Factory;
use FunctionalTester;
use Codeception\Util\Locator;
use Webkul\Sales\Models\Order;
use Webkul\Sales\Models\OrderItem;
use Webkul\Sales\Models\OrderAddress;
use Webkul\Sales\Models\OrderPayment;
use Webkul\Core\Helpers\Laravel5Helper;
class OrderCest
{
public function testIndex(FunctionalTester $I): void
{
/* simple order no further association like address, shipping method, payment method, etc. */
$order = $I->have(Order::class);
/* login as admin */
$I->loginAsAdmin();
/* go to order view page */
$I->amOnAdminRoute('admin.dashboard.index');
$I->click(__('admin::app.layouts.sales'), '//*[contains(@class, "navbar-left")]');
$I->seeCurrentRouteIs('admin.sales.orders.index');
$I->click(__('admin::app.layouts.orders'), '//*[contains(@class, "aside-nav")]');
/* now test index page */
$I->seeCurrentRouteIs('admin.sales.orders.index');
$I->see($order->id, '//script[@type="text/x-template"]');
$I->see($order->sub_total, '//script[@type="text/x-template"]');
}
public function testCancelCashOnDeliveryOrder(FunctionalTester $I): void
{
/* generate cash on delivery order */
$order = $this->generateCashOnDeliveryOrder($I);
/* login as admin */
$I->loginAsAdmin();
/* go to order view page */
$I->amOnPage(route('admin.sales.orders.view', $order->id));
$I->seeCurrentRouteIs('admin.sales.orders.view');
/* now test cancel order */
$I->see('Cancel', Locator::href(route('admin.sales.orders.cancel', $order->id)));
$I->click('Cancel', Locator::href(route('admin.sales.orders.cancel', $order->id)));
$I->seeCurrentRouteIs('admin.sales.orders.view');
$I->see(0.00, '#due-amount-on-cancelled');
}
private function generateCashOnDeliveryOrder(FunctionalTester $I)
{
$product = $I->haveProduct(Laravel5Helper::SIMPLE_PRODUCT, [
'productAttributes' => [],
'productInventory' => [
'qty' => 5,
],
'attributeValues' => [
'status' => 1,
],
]);
$order = $I->have(OrderItem::class, ['product_id' => $product->id])->order;
$I->have(OrderAddress::class, $this->generateAddressData([
'order_id' => $order->id,
'address_type' => OrderAddress::ADDRESS_TYPE_SHIPPING,
'customer_id' => $order->customer->id,
]));
$I->have(OrderAddress::class, $this->generateAddressData([
'order_id' => $order->id,
'address_type' => OrderAddress::ADDRESS_TYPE_BILLING,
'customer_id' => $order->customer->id,
]));
$I->have(OrderPayment::class, [
'method' => 'cashondelivery',
'method_title' => null,
'order_id' => $order->id,
]);
return $order;
}
private function generateAddressData(array $additionalData): array
{
$faker = Factory::create();
return array_merge([
'city' => $faker->city,
'company_name' => $faker->company,
'country' => $faker->countryCode,
'email' => $faker->email,
'first_name' => $faker->firstName,
'last_name' => $faker->lastName,
'phone' => $faker->phoneNumber,
'postcode' => $faker->postcode,
'state' => $faker->state,
], $additionalData);
}
}