add soft delete via muffin/trash to all product related tables
CI / testsuite (mysql, 8.1, ) (push) Failing after 0s
Details
CI / testsuite (mysql, 8.4, ) (push) Failing after 0s
Details
CI / testsuite (pgsql, 8.1, ) (push) Failing after 0s
Details
CI / testsuite (pgsql, 8.4, ) (push) Failing after 0s
Details
CI / testsuite (sqlite, 8.1, ) (push) Failing after 0s
Details
CI / testsuite (sqlite, 8.1, prefer-lowest) (push) Failing after 0s
Details
CI / testsuite (sqlite, 8.4, ) (push) Failing after 0s
Details
CI / Coding Standard & Static Analysis (push) Failing after 0s
Details
CI / testsuite (mysql, 8.1, ) (push) Failing after 0s
Details
CI / testsuite (mysql, 8.4, ) (push) Failing after 0s
Details
CI / testsuite (pgsql, 8.1, ) (push) Failing after 0s
Details
CI / testsuite (pgsql, 8.4, ) (push) Failing after 0s
Details
CI / testsuite (sqlite, 8.1, ) (push) Failing after 0s
Details
CI / testsuite (sqlite, 8.1, prefer-lowest) (push) Failing after 0s
Details
CI / testsuite (sqlite, 8.4, ) (push) Failing after 0s
Details
CI / Coding Standard & Static Analysis (push) Failing after 0s
Details
This commit is contained in:
parent
013bec1b54
commit
cf7c67763c
|
@ -7,6 +7,7 @@
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=8.1",
|
"php": ">=8.1",
|
||||||
"dereuromark/cakephp-tools": "^3.9",
|
"dereuromark/cakephp-tools": "^3.9",
|
||||||
|
"muffin/trash": "^4.2",
|
||||||
"hi-powered-dev/cheese-cake": "dev-prod",
|
"hi-powered-dev/cheese-cake": "dev-prod",
|
||||||
"cakephp/cakephp": "^5.0.1"
|
"cakephp/cakephp": "^5.0.1"
|
||||||
},
|
},
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Migrations\BaseMigration;
|
||||||
|
|
||||||
|
class AddSoftDeleteToAllTables extends BaseMigration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Change Method.
|
||||||
|
*
|
||||||
|
* More information on this method is available here:
|
||||||
|
* https://book.cakephp.org/migrations/4/en/migrations.html#the-change-method
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function change(): void
|
||||||
|
{
|
||||||
|
$table = $this->table('products');
|
||||||
|
$table->addColumn('deleted', 'datetime', [
|
||||||
|
'default' => null,
|
||||||
|
'null' => true,
|
||||||
|
]);
|
||||||
|
$table->update();
|
||||||
|
|
||||||
|
$table = $this->table('product_category_attributes');
|
||||||
|
$table->addColumn('deleted', 'datetime', [
|
||||||
|
'default' => null,
|
||||||
|
'null' => true,
|
||||||
|
]);
|
||||||
|
$table->update();
|
||||||
|
|
||||||
|
$table = $this->table('product_category_attribute_options');
|
||||||
|
$table->addColumn('deleted', 'datetime', [
|
||||||
|
'default' => null,
|
||||||
|
'null' => true,
|
||||||
|
]);
|
||||||
|
$table->update();
|
||||||
|
|
||||||
|
$table = $this->table('product_categories');
|
||||||
|
$table->addColumn('deleted', 'datetime', [
|
||||||
|
'default' => null,
|
||||||
|
'null' => true,
|
||||||
|
]);
|
||||||
|
$table->update();
|
||||||
|
|
||||||
|
$table = $this->table('product_catalogs');
|
||||||
|
$table->addColumn('deleted', 'datetime', [
|
||||||
|
'default' => null,
|
||||||
|
'null' => true,
|
||||||
|
]);
|
||||||
|
$table->update();
|
||||||
|
|
||||||
|
$table = $this->table('external_product_catalogs_product_catalogs');
|
||||||
|
$table->addColumn('deleted', 'datetime', [
|
||||||
|
'default' => null,
|
||||||
|
'null' => true,
|
||||||
|
]);
|
||||||
|
$table->update();
|
||||||
|
}
|
||||||
|
}
|
|
@ -141,6 +141,11 @@ class ProductCategoriesController extends AppController
|
||||||
$productCategoriesTable = $this->getTable();
|
$productCategoriesTable = $this->getTable();
|
||||||
|
|
||||||
$productCategory = $productCategoriesTable->get($id);
|
$productCategory = $productCategoriesTable->get($id);
|
||||||
|
// $productCategoriesTable->behaviors()->get('Tree')->setConfig([
|
||||||
|
// 'scope' => [
|
||||||
|
// 'product_catalog_id' => $productCategory->product_catalog_id,
|
||||||
|
// ],
|
||||||
|
// ]);
|
||||||
if ($productCategoriesTable->delete($productCategory)) {
|
if ($productCategoriesTable->delete($productCategory)) {
|
||||||
$this->Flash->success(__('The product category has been deleted.'));
|
$this->Flash->success(__('The product category has been deleted.'));
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -14,6 +14,7 @@ use Cake\ORM\Entity;
|
||||||
* @property string $product_catalog_id
|
* @property string $product_catalog_id
|
||||||
* @property DateTime $created
|
* @property DateTime $created
|
||||||
* @property bool $enabled
|
* @property bool $enabled
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property ExternalProductCatalog $external_product_catalog
|
* @property ExternalProductCatalog $external_product_catalog
|
||||||
* @property ProductCatalog $product_catalog
|
* @property ProductCatalog $product_catalog
|
||||||
|
@ -34,6 +35,8 @@ class ExternalProductCatalogsProductCatalog extends Entity
|
||||||
'product_catalog_id' => true,
|
'product_catalog_id' => true,
|
||||||
'created' => true,
|
'created' => true,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
'external_product_catalog' => true,
|
'external_product_catalog' => true,
|
||||||
'product_catalog' => true,
|
'product_catalog' => true,
|
||||||
];
|
];
|
||||||
|
|
|
@ -3,6 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace CakeProducts\Model\Entity;
|
namespace CakeProducts\Model\Entity;
|
||||||
|
|
||||||
|
use Cake\I18n\DateTime;
|
||||||
use Cake\ORM\Entity;
|
use Cake\ORM\Entity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,6 +13,7 @@ use Cake\ORM\Entity;
|
||||||
* @property string $name
|
* @property string $name
|
||||||
* @property string $product_category_id
|
* @property string $product_category_id
|
||||||
* @property \CakeProducts\Model\Enum\ProductProductTypeId $product_type_id
|
* @property \CakeProducts\Model\Enum\ProductProductTypeId $product_type_id
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property \CakeProducts\Model\Entity\ProductCategory $product_category
|
* @property \CakeProducts\Model\Entity\ProductCategory $product_category
|
||||||
* @property \CakeProducts\Model\Entity\ProductAttribute[] $product_attributes
|
* @property \CakeProducts\Model\Entity\ProductAttribute[] $product_attributes
|
||||||
|
@ -31,7 +33,9 @@ class Product extends Entity
|
||||||
'name' => true,
|
'name' => true,
|
||||||
'product_category_id' => true,
|
'product_category_id' => true,
|
||||||
'product_type_id' => true,
|
'product_type_id' => true,
|
||||||
'product_category' => true,
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
|
'product_category' => false,
|
||||||
'product_attributes' => true,
|
'product_attributes' => true,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace CakeProducts\Model\Entity;
|
namespace CakeProducts\Model\Entity;
|
||||||
|
|
||||||
|
use Cake\I18n\DateTime;
|
||||||
use Cake\ORM\Entity;
|
use Cake\ORM\Entity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,6 +14,7 @@ use Cake\ORM\Entity;
|
||||||
* @property string $product_category_attribute_id
|
* @property string $product_category_attribute_id
|
||||||
* @property string|null $attribute_value
|
* @property string|null $attribute_value
|
||||||
* @property string|null $product_category_attribute_option_id
|
* @property string|null $product_category_attribute_option_id
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property Product $product
|
* @property Product $product
|
||||||
* @property ProductCategoryAttribute $product_category_attribute
|
* @property ProductCategoryAttribute $product_category_attribute
|
||||||
|
@ -34,6 +36,8 @@ class ProductAttribute extends Entity
|
||||||
'product_category_attribute_id' => true,
|
'product_category_attribute_id' => true,
|
||||||
'attribute_value' => true,
|
'attribute_value' => true,
|
||||||
'product_category_attribute_option_id' => true,
|
'product_category_attribute_option_id' => true,
|
||||||
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
'product' => false,
|
'product' => false,
|
||||||
'product_category_attribute' => false,
|
'product_category_attribute' => false,
|
||||||
'product_category_attribute_option' => false,
|
'product_category_attribute_option' => false,
|
||||||
|
|
|
@ -3,6 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace CakeProducts\Model\Entity;
|
namespace CakeProducts\Model\Entity;
|
||||||
|
|
||||||
|
use Cake\I18n\DateTime;
|
||||||
use Cake\ORM\Entity;
|
use Cake\ORM\Entity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,6 +13,7 @@ use Cake\ORM\Entity;
|
||||||
* @property string $name
|
* @property string $name
|
||||||
* @property string|null $catalog_description
|
* @property string|null $catalog_description
|
||||||
* @property bool $enabled
|
* @property bool $enabled
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property ProductCategory[] $product_categories
|
* @property ProductCategory[] $product_categories
|
||||||
* @property ExternalProductCatalog[] $external_product_catalogs
|
* @property ExternalProductCatalog[] $external_product_catalogs
|
||||||
|
@ -31,6 +33,8 @@ class ProductCatalog extends Entity
|
||||||
'name' => true,
|
'name' => true,
|
||||||
'catalog_description' => true,
|
'catalog_description' => true,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
'product_categories' => true,
|
'product_categories' => true,
|
||||||
'external_product_catalogs' => true,
|
'external_product_catalogs' => true,
|
||||||
];
|
];
|
||||||
|
|
|
@ -3,6 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace CakeProducts\Model\Entity;
|
namespace CakeProducts\Model\Entity;
|
||||||
|
|
||||||
|
use Cake\I18n\DateTime;
|
||||||
use Cake\ORM\Entity;
|
use Cake\ORM\Entity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,6 +18,7 @@ use Cake\ORM\Entity;
|
||||||
* @property int $lft
|
* @property int $lft
|
||||||
* @property int $rght
|
* @property int $rght
|
||||||
* @property bool $enabled
|
* @property bool $enabled
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property \CakeProducts\Model\Entity\ProductCatalog $product_catalog
|
* @property \CakeProducts\Model\Entity\ProductCatalog $product_catalog
|
||||||
* @property \CakeProducts\Model\Entity\ParentProductCategory $parent_product_category
|
* @property \CakeProducts\Model\Entity\ParentProductCategory $parent_product_category
|
||||||
|
@ -42,6 +44,8 @@ class ProductCategory extends Entity
|
||||||
'lft' => true,
|
'lft' => true,
|
||||||
'rght' => true,
|
'rght' => true,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
'product_catalog' => true,
|
'product_catalog' => true,
|
||||||
'parent_product_category' => true,
|
'parent_product_category' => true,
|
||||||
'child_product_categories' => true,
|
'child_product_categories' => true,
|
||||||
|
|
|
@ -3,6 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace CakeProducts\Model\Entity;
|
namespace CakeProducts\Model\Entity;
|
||||||
|
|
||||||
|
use Cake\I18n\DateTime;
|
||||||
use Cake\ORM\Entity;
|
use Cake\ORM\Entity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,6 +14,7 @@ use Cake\ORM\Entity;
|
||||||
* @property string|null $product_category_id
|
* @property string|null $product_category_id
|
||||||
* @property int $attribute_type_id
|
* @property int $attribute_type_id
|
||||||
* @property bool $enabled
|
* @property bool $enabled
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property ProductCategory $product_category
|
* @property ProductCategory $product_category
|
||||||
* @property ProductCategoryAttributeOption[] $product_category_attribute_options
|
* @property ProductCategoryAttributeOption[] $product_category_attribute_options
|
||||||
|
@ -33,6 +35,8 @@ class ProductCategoryAttribute extends Entity
|
||||||
'product_category_id' => true,
|
'product_category_id' => true,
|
||||||
'attribute_type_id' => true,
|
'attribute_type_id' => true,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
'product_category' => true,
|
'product_category' => true,
|
||||||
'product_category_attribute_options' => true,
|
'product_category_attribute_options' => true,
|
||||||
];
|
];
|
||||||
|
|
|
@ -3,6 +3,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace CakeProducts\Model\Entity;
|
namespace CakeProducts\Model\Entity;
|
||||||
|
|
||||||
|
use Cake\I18n\DateTime;
|
||||||
use Cake\ORM\Entity;
|
use Cake\ORM\Entity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -13,6 +14,7 @@ use Cake\ORM\Entity;
|
||||||
* @property string $attribute_value
|
* @property string $attribute_value
|
||||||
* @property string $attribute_label
|
* @property string $attribute_label
|
||||||
* @property bool $enabled
|
* @property bool $enabled
|
||||||
|
* @property DateTime|null $deleted
|
||||||
*
|
*
|
||||||
* @property ProductCategoryAttribute $product_category_attribute
|
* @property ProductCategoryAttribute $product_category_attribute
|
||||||
*/
|
*/
|
||||||
|
@ -32,6 +34,8 @@ class ProductCategoryAttributeOption extends Entity
|
||||||
'attribute_value' => true,
|
'attribute_value' => true,
|
||||||
'attribute_label' => true,
|
'attribute_label' => true,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => true,
|
||||||
|
// entities
|
||||||
'product_category_attribute' => true,
|
'product_category_attribute' => true,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,8 @@ class ExternalProductCatalogsProductCatalogsTable extends Table
|
||||||
// 'foreignKey' => 'product_catalog_id',
|
// 'foreignKey' => 'product_catalog_id',
|
||||||
'joinType' => 'INNER',
|
'joinType' => 'INNER',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -92,6 +94,10 @@ class ExternalProductCatalogsProductCatalogsTable extends Table
|
||||||
$validator
|
$validator
|
||||||
->boolean('enabled');
|
->boolean('enabled');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,11 @@ class ExternalProductCatalogsTable extends Table
|
||||||
$this->hasMany('ExternalProductCatalogsProductCatalogs', [
|
$this->hasMany('ExternalProductCatalogsProductCatalogs', [
|
||||||
'foreignKey' => 'external_product_catalog_id',
|
'foreignKey' => 'external_product_catalog_id',
|
||||||
'className' => 'CakeProducts.ExternalProductCatalogsProductCatalogs',
|
'className' => 'CakeProducts.ExternalProductCatalogsProductCatalogs',
|
||||||
|
'dependent' => true,
|
||||||
|
'cascadeCallbacks' => true,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -63,6 +63,7 @@ class ProductAttributesTable extends Table
|
||||||
'foreignKey' => 'product_category_attribute_option_id',
|
'foreignKey' => 'product_category_attribute_option_id',
|
||||||
'className' => 'CakeProducts.ProductCategoryAttributeOptions',
|
'className' => 'CakeProducts.ProductCategoryAttributeOptions',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,6 +91,10 @@ class ProductAttributesTable extends Table
|
||||||
->uuid('product_category_attribute_option_id')
|
->uuid('product_category_attribute_option_id')
|
||||||
->allowEmptyString('product_category_attribute_option_id');
|
->allowEmptyString('product_category_attribute_option_id');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,8 @@ class ProductCatalogsTable extends Table
|
||||||
'through' => 'ExternalProductCatalogsProductCatalogs',
|
'through' => 'ExternalProductCatalogsProductCatalogs',
|
||||||
'className' => 'CakeProducts.ExternalProductCatalogs',
|
'className' => 'CakeProducts.ExternalProductCatalogs',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,6 +86,10 @@ class ProductCatalogsTable extends Table
|
||||||
->requirePresence('enabled', 'create')
|
->requirePresence('enabled', 'create')
|
||||||
->notEmptyString('enabled');
|
->notEmptyString('enabled');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,9 @@ class ProductCategoriesTable extends Table
|
||||||
$this->setEntityClass(
|
$this->setEntityClass(
|
||||||
Configure::read('CakeProducts.ProductCategories.entity', 'CakeProducts\Model\Entity\ProductCategory')
|
Configure::read('CakeProducts.ProductCategories.entity', 'CakeProducts\Model\Entity\ProductCategory')
|
||||||
);
|
);
|
||||||
$this->addBehavior('Tree');
|
$this->addBehavior('Tree', [
|
||||||
|
'cascadeCallbacks' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
$this->belongsTo('ProductCatalogs', [
|
$this->belongsTo('ProductCatalogs', [
|
||||||
'foreignKey' => 'product_catalog_id',
|
'foreignKey' => 'product_catalog_id',
|
||||||
|
@ -79,13 +81,18 @@ class ProductCategoriesTable extends Table
|
||||||
$this->hasMany('ChildProductCategories', [
|
$this->hasMany('ChildProductCategories', [
|
||||||
'className' => 'CakeProducts.ProductCategories',
|
'className' => 'CakeProducts.ProductCategories',
|
||||||
'foreignKey' => 'parent_id',
|
'foreignKey' => 'parent_id',
|
||||||
|
'dependent' => true,
|
||||||
|
'cascadeCallbacks' => true,
|
||||||
]);
|
]);
|
||||||
$this->hasMany('ProductCategoryAttributes', [
|
$this->hasMany('ProductCategoryAttributes', [
|
||||||
'foreignKey' => 'product_category_id',
|
'foreignKey' => 'product_category_id',
|
||||||
'bindingKey' => 'internal_id',
|
'bindingKey' => 'internal_id',
|
||||||
'className' => 'CakeProducts.ProductCategoryAttributes',
|
'className' => 'CakeProducts.ProductCategoryAttributes',
|
||||||
|
'dependent' => true,
|
||||||
|
'cascadeCallbacks' => true,
|
||||||
]);
|
]);
|
||||||
$this->behaviors()->Tree->setConfig('scope', ['product_catalog_id' => $this->treeCatalogId]);
|
$this->behaviors()->Tree->setConfig('scope', ['product_catalog_id' => $this->treeCatalogId]);
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -118,6 +125,10 @@ class ProductCategoriesTable extends Table
|
||||||
->boolean('enabled')
|
->boolean('enabled')
|
||||||
->notEmptyString('enabled');
|
->notEmptyString('enabled');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,8 @@ class ProductCategoryAttributeOptionsTable extends Table
|
||||||
'joinType' => 'INNER',
|
'joinType' => 'INNER',
|
||||||
'className' => 'CakeProducts.ProductCategoryAttributes',
|
'className' => 'CakeProducts.ProductCategoryAttributes',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,6 +86,10 @@ class ProductCategoryAttributeOptionsTable extends Table
|
||||||
->boolean('enabled')
|
->boolean('enabled')
|
||||||
->notEmptyString('enabled');
|
->notEmptyString('enabled');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,12 @@ class ProductCategoryAttributesTable extends Table
|
||||||
'foreignKey' => 'product_category_attribute_id',
|
'foreignKey' => 'product_category_attribute_id',
|
||||||
'className' => 'CakeProducts.ProductCategoryAttributeOptions',
|
'className' => 'CakeProducts.ProductCategoryAttributeOptions',
|
||||||
'saveStrategy' => 'replace',
|
'saveStrategy' => 'replace',
|
||||||
|
'dependent' => true,
|
||||||
|
'cascadeCallbacks' => true,
|
||||||
]);
|
]);
|
||||||
$this->getSchema()->setColumnType('attribute_type_id', EnumType::from(ProductCategoryAttributeTypeId::class));
|
$this->getSchema()->setColumnType('attribute_type_id', EnumType::from(ProductCategoryAttributeTypeId::class));
|
||||||
|
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,6 +97,10 @@ class ProductCategoryAttributesTable extends Table
|
||||||
->requirePresence('enabled', 'create')
|
->requirePresence('enabled', 'create')
|
||||||
->notEmptyString('enabled');
|
->notEmptyString('enabled');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,12 @@ class ProductsTable extends Table
|
||||||
|
|
||||||
$this->hasMany('ProductAttributes', [
|
$this->hasMany('ProductAttributes', [
|
||||||
'className' => 'CakeProducts.ProductAttributes',
|
'className' => 'CakeProducts.ProductAttributes',
|
||||||
|
'dependent' => true,
|
||||||
|
'cascadeCallbacks' => true,
|
||||||
]);
|
]);
|
||||||
$this->getSchema()->setColumnType('product_type_id', EnumType::from(ProductProductTypeId::class));
|
$this->getSchema()->setColumnType('product_type_id', EnumType::from(ProductProductTypeId::class));
|
||||||
|
|
||||||
|
$this->addBehavior('Muffin/Trash.Trash');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -88,6 +91,10 @@ class ProductsTable extends Table
|
||||||
->requirePresence('product_type_id', 'create')
|
->requirePresence('product_type_id', 'create')
|
||||||
->notEmptyString('product_type_id');
|
->notEmptyString('product_type_id');
|
||||||
|
|
||||||
|
$validator
|
||||||
|
->dateTime('deleted')
|
||||||
|
->allowEmptyDateTime('deleted');
|
||||||
|
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ class ExternalProductCatalogsFixture extends TestFixture
|
||||||
'base_url' => 'http://localhost:8766',
|
'base_url' => 'http://localhost:8766',
|
||||||
'api_url' => 'http://localhost:8766/api',
|
'api_url' => 'http://localhost:8766/api',
|
||||||
'created' => '2024-11-22 09:39:37',
|
'created' => '2024-11-22 09:39:37',
|
||||||
'deleted' => '2024-11-22 09:39:37',
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -19,10 +19,12 @@ class ExternalProductCatalogsProductCatalogsFixture extends TestFixture
|
||||||
{
|
{
|
||||||
$this->records = [
|
$this->records = [
|
||||||
[
|
[
|
||||||
|
'id' => 1,
|
||||||
'external_product_catalog_id' => '115153f3-2f59-4234-8ff8-e1b205769999',
|
'external_product_catalog_id' => '115153f3-2f59-4234-8ff8-e1b205769999',
|
||||||
'product_catalog_id' => '115153f3-2f59-4234-8ff8-e1b205761428',
|
'product_catalog_id' => '115153f3-2f59-4234-8ff8-e1b205761428',
|
||||||
'created' => '2024-11-22 09:39:37',
|
'created' => '2024-11-22 09:39:37',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -23,12 +23,14 @@ class ProductCatalogsFixture extends TestFixture
|
||||||
'name' => 'Automotive',
|
'name' => 'Automotive',
|
||||||
'catalog_description' => '',
|
'catalog_description' => '',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 'f56f3412-ed23-490b-be6e-016208c415d2',
|
'id' => 'f56f3412-ed23-490b-be6e-016208c415d2',
|
||||||
'name' => 'Software',
|
'name' => 'Software',
|
||||||
'catalog_description' => '',
|
'catalog_description' => '',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -28,6 +28,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 1,
|
'lft' => 1,
|
||||||
'rght' => 4,
|
'rght' => 4,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 2,
|
'id' => 2,
|
||||||
|
@ -39,6 +40,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 2,
|
'lft' => 2,
|
||||||
'rght' => 3,
|
'rght' => 3,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 3,
|
'id' => 3,
|
||||||
|
@ -50,6 +52,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 5,
|
'lft' => 5,
|
||||||
'rght' => 8,
|
'rght' => 8,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 4,
|
'id' => 4,
|
||||||
|
@ -61,6 +64,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 6,
|
'lft' => 6,
|
||||||
'rght' => 7,
|
'rght' => 7,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 5,
|
'id' => 5,
|
||||||
|
@ -72,6 +76,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 9,
|
'lft' => 9,
|
||||||
'rght' => 12,
|
'rght' => 12,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 6,
|
'id' => 6,
|
||||||
|
@ -83,6 +88,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 10,
|
'lft' => 10,
|
||||||
'rght' => 11,
|
'rght' => 11,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 7,
|
'id' => 7,
|
||||||
|
@ -94,6 +100,7 @@ class ProductCategoriesFixture extends TestFixture
|
||||||
'lft' => 1,
|
'lft' => 1,
|
||||||
'rght' => 2,
|
'rght' => 2,
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -24,6 +24,7 @@ class ProductCategoryAttributeOptionsFixture extends TestFixture
|
||||||
'attribute_value' => 'Red',
|
'attribute_value' => 'Red',
|
||||||
'attribute_label' => 'Red',
|
'attribute_label' => 'Red',
|
||||||
'enabled' => 1,
|
'enabled' => 1,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 'e06f1723-2456-483a-b3c4-004603e032a1',
|
'id' => 'e06f1723-2456-483a-b3c4-004603e032a1',
|
||||||
|
@ -31,6 +32,7 @@ class ProductCategoryAttributeOptionsFixture extends TestFixture
|
||||||
'attribute_value' => 'Blue',
|
'attribute_value' => 'Blue',
|
||||||
'attribute_label' => 'Blue',
|
'attribute_label' => 'Blue',
|
||||||
'enabled' => 1,
|
'enabled' => 1,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'id' => 'e06f1723-2456-483a-b3c4-004603e032a2',
|
'id' => 'e06f1723-2456-483a-b3c4-004603e032a2',
|
||||||
|
@ -38,6 +40,7 @@ class ProductCategoryAttributeOptionsFixture extends TestFixture
|
||||||
'attribute_value' => 'Green',
|
'attribute_value' => 'Green',
|
||||||
'attribute_label' => 'Green',
|
'attribute_label' => 'Green',
|
||||||
'enabled' => 1,
|
'enabled' => 1,
|
||||||
|
'deleted' => null,
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -24,6 +24,7 @@ class ProductCategoryAttributesFixture extends TestFixture
|
||||||
'product_category_id' => '6d223283-361b-4f9f-a7f1-c97aa0ca4c23',
|
'product_category_id' => '6d223283-361b-4f9f-a7f1-c97aa0ca4c23',
|
||||||
'attribute_type_id' => 1,
|
'attribute_type_id' => 1,
|
||||||
'enabled' => 1,
|
'enabled' => 1,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -23,6 +23,7 @@ class ProductsFixture extends TestFixture
|
||||||
'name' => '12AWG RED TXL Wire',
|
'name' => '12AWG RED TXL Wire',
|
||||||
'product_category_id' => '6d223283-361b-4f9f-a7f1-c97aa0ca4c23',
|
'product_category_id' => '6d223283-361b-4f9f-a7f1-c97aa0ca4c23',
|
||||||
'product_type_id' => 1,
|
'product_type_id' => 1,
|
||||||
|
'deleted' => null,
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
parent::init();
|
parent::init();
|
||||||
|
|
|
@ -45,7 +45,7 @@ class ExternalProductCatalogsProductCatalogsControllerTest extends BaseControlle
|
||||||
// $this->enableCsrfToken();
|
// $this->enableCsrfToken();
|
||||||
// $this->enableSecurityToken();
|
// $this->enableSecurityToken();
|
||||||
$this->disableErrorHandlerMiddleware();
|
$this->disableErrorHandlerMiddleware();
|
||||||
$this->ExternalProductCatalogsProductCatalogs = $this->getTableLocator()->get('ExternalProductCatalogsProductCatalogs');
|
$this->ExternalProductCatalogsProductCatalogs = $this->getTableLocator()->get('CakeProducts.ExternalProductCatalogsProductCatalogs');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -99,6 +99,7 @@ class ExternalProductCatalogsProductCatalogsControllerTest extends BaseControlle
|
||||||
*/
|
*/
|
||||||
public function testDelete(): void
|
public function testDelete(): void
|
||||||
{
|
{
|
||||||
|
$cntBeforeWithTrashed = $this->ExternalProductCatalogsProductCatalogs->find('withTrashed')->count();
|
||||||
$cntBefore = $this->ExternalProductCatalogsProductCatalogs->find()->count();
|
$cntBefore = $this->ExternalProductCatalogsProductCatalogs->find()->count();
|
||||||
|
|
||||||
// $this->loginUserByRole('admin');
|
// $this->loginUserByRole('admin');
|
||||||
|
@ -112,7 +113,9 @@ class ExternalProductCatalogsProductCatalogsControllerTest extends BaseControlle
|
||||||
$this->assertResponseCode(302);
|
$this->assertResponseCode(302);
|
||||||
$this->assertRedirectContains('external-product-catalogs');
|
$this->assertRedirectContains('external-product-catalogs');
|
||||||
|
|
||||||
|
$cntAfterWithTrashed = $this->ExternalProductCatalogsProductCatalogs->find('withTrashed')->count();
|
||||||
$cntAfter = $this->ExternalProductCatalogsProductCatalogs->find()->count();
|
$cntAfter = $this->ExternalProductCatalogsProductCatalogs->find()->count();
|
||||||
$this->assertEquals($cntBefore - 1, $cntAfter);
|
$this->assertEquals($cntBefore - 1, $cntAfter);
|
||||||
|
$this->assertEquals($cntBeforeWithTrashed, $cntAfterWithTrashed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ class ProductCategoriesControllerTest extends BaseControllerTest
|
||||||
// $this->enableCsrfToken();
|
// $this->enableCsrfToken();
|
||||||
// $this->enableSecurityToken();
|
// $this->enableSecurityToken();
|
||||||
$this->disableErrorHandlerMiddleware();
|
$this->disableErrorHandlerMiddleware();
|
||||||
$this->ProductCategories = $this->getTableLocator()->get('ProductCategories');
|
$this->ProductCategories = $this->getTableLocator()->get('CakeProducts.ProductCategories');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -315,7 +315,7 @@ class ProductCategoriesControllerTest extends BaseControllerTest
|
||||||
public function testDelete(): void
|
public function testDelete(): void
|
||||||
{
|
{
|
||||||
$cntBefore = $this->ProductCategories->find()->count();
|
$cntBefore = $this->ProductCategories->find()->count();
|
||||||
|
$cntBeforeWithTrashed = $this->ProductCategories->find('withTrashed')->count();
|
||||||
$this->loginUserByRole('admin');
|
$this->loginUserByRole('admin');
|
||||||
$url = [
|
$url = [
|
||||||
'plugin' => 'CakeProducts',
|
'plugin' => 'CakeProducts',
|
||||||
|
@ -328,6 +328,9 @@ class ProductCategoriesControllerTest extends BaseControllerTest
|
||||||
$this->assertRedirectContains('product-categories');
|
$this->assertRedirectContains('product-categories');
|
||||||
|
|
||||||
$cntAfter = $this->ProductCategories->find()->count();
|
$cntAfter = $this->ProductCategories->find()->count();
|
||||||
$this->assertEquals($cntBefore - 1, $cntAfter);
|
$cntAfterWithTrashed = $this->ProductCategories->find('withTrashed')->count();
|
||||||
|
|
||||||
|
$this->assertEquals($cntBefore - 2, $cntAfter); // has 1 child category
|
||||||
|
$this->assertEquals($cntBeforeWithTrashed, $cntAfterWithTrashed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,7 @@ class ExternalProductCatalogsTableTest extends TestCase
|
||||||
// verify all behaviors loaded
|
// verify all behaviors loaded
|
||||||
$expectedBehaviors = [
|
$expectedBehaviors = [
|
||||||
'Timestamp',
|
'Timestamp',
|
||||||
|
'Trash',
|
||||||
];
|
];
|
||||||
$behaviors = $this->ExternalProductCatalogs->behaviors();
|
$behaviors = $this->ExternalProductCatalogs->behaviors();
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,9 @@ class ProductCatalogsTableTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify all behaviors loaded
|
// verify all behaviors loaded
|
||||||
$expectedBehaviors = [];
|
$expectedBehaviors = [
|
||||||
|
'Trash',
|
||||||
|
];
|
||||||
$behaviors = $this->ProductCatalogs->behaviors();
|
$behaviors = $this->ProductCatalogs->behaviors();
|
||||||
|
|
||||||
$this->assertCount(count($expectedBehaviors), $behaviors);
|
$this->assertCount(count($expectedBehaviors), $behaviors);
|
||||||
|
|
|
@ -78,6 +78,7 @@ class ProductCategoriesTableTest extends TestCase
|
||||||
// verify all behaviors loaded
|
// verify all behaviors loaded
|
||||||
$expectedBehaviors = [
|
$expectedBehaviors = [
|
||||||
'Tree',
|
'Tree',
|
||||||
|
'Trash',
|
||||||
];
|
];
|
||||||
$behaviors = $this->ProductCategories->behaviors();
|
$behaviors = $this->ProductCategories->behaviors();
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,9 @@ class ProductCategoryAttributeOptionsTableTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify all behaviors loaded
|
// verify all behaviors loaded
|
||||||
$expectedBehaviors = [];
|
$expectedBehaviors = [
|
||||||
|
'Trash',
|
||||||
|
];
|
||||||
$behaviors = $this->ProductCategoryAttributeOptions->behaviors();
|
$behaviors = $this->ProductCategoryAttributeOptions->behaviors();
|
||||||
|
|
||||||
$this->assertCount(count($expectedBehaviors), $behaviors);
|
$this->assertCount(count($expectedBehaviors), $behaviors);
|
||||||
|
|
|
@ -74,7 +74,9 @@ class ProductCategoryAttributesTableTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify all behaviors loaded
|
// verify all behaviors loaded
|
||||||
$expectedBehaviors = [];
|
$expectedBehaviors = [
|
||||||
|
'Trash',
|
||||||
|
];
|
||||||
$behaviors = $this->ProductCategoryAttributes->behaviors();
|
$behaviors = $this->ProductCategoryAttributes->behaviors();
|
||||||
|
|
||||||
$this->assertCount(count($expectedBehaviors), $behaviors);
|
$this->assertCount(count($expectedBehaviors), $behaviors);
|
||||||
|
|
|
@ -73,7 +73,9 @@ class ProductsTableTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify all behaviors loaded
|
// verify all behaviors loaded
|
||||||
$expectedBehaviors = [];
|
$expectedBehaviors = [
|
||||||
|
'Trash',
|
||||||
|
];
|
||||||
$behaviors = $this->Products->behaviors();
|
$behaviors = $this->Products->behaviors();
|
||||||
|
|
||||||
$this->assertCount(count($expectedBehaviors), $behaviors);
|
$this->assertCount(count($expectedBehaviors), $behaviors);
|
||||||
|
|
Loading…
Reference in New Issue