From 8c62393d3ff6c5c335781c5b7d7f81c374d50c6e Mon Sep 17 00:00:00 2001 From: KKlochko Date: Sun, 20 Aug 2023 11:14:23 +0300 Subject: [PATCH] Add ItemValidationByName. --- .../Controllers/API/v2/CartController.php | 8 ++-- app/Models/Item.php | 27 +++++------ .../Validation/ItemValidationByName.php | 18 ++++++++ .../Messages/ItemMessagesFactory.php | 20 +++++++++ tests/Feature/ItemTest.php | 27 ----------- .../Validation/ItemValidationByNameTest.php | 45 +++++++++++++++++++ 6 files changed, 97 insertions(+), 48 deletions(-) create mode 100644 app/Models/Validation/ItemValidationByName.php create mode 100644 app/Models/Validation/Messages/ItemMessagesFactory.php create mode 100644 tests/Feature/Validation/ItemValidationByNameTest.php diff --git a/app/Http/Controllers/API/v2/CartController.php b/app/Http/Controllers/API/v2/CartController.php index 7d928cd..e0f2790 100644 --- a/app/Http/Controllers/API/v2/CartController.php +++ b/app/Http/Controllers/API/v2/CartController.php @@ -24,6 +24,7 @@ use App\Http\Resources\API\v2\CartItemCollection; use App\Models\Validation\UserValidationByMatrixUsername; use App\Models\Validation\CityValidationByName; use App\Models\Validation\CompanyValidationByName; +use App\Models\Validation\ItemValidationByName; class CartController extends Controller { @@ -206,10 +207,9 @@ class CartController extends Controller if(!$validator->isValid()) return response()->json($validator->getMessageMap()); - // check for not valid item - $validation = Item::validate_with_name($itemName); - if(array_key_exists('error', $validation)) - return response()->json($validation); + $validator = new ItemValidationByName($itemName); + if(!$validator->isValid()) + return response()->json($validator->getMessageMap()); if($itemCount == 0) return response()->json([ diff --git a/app/Models/Item.php b/app/Models/Item.php index 1ad194c..f7a9601 100644 --- a/app/Models/Item.php +++ b/app/Models/Item.php @@ -7,7 +7,9 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; -class Item extends Model +use App\Models\Validation\ValidationByNameInterface; + +class Item extends Model implements ValidationByNameInterface { use HasFactory; @@ -87,25 +89,16 @@ class Item extends Model return $its_company->id == $company->id; } - public static function validate_with_name(string $name) + public static function isExistByName(string $name): bool { - $name = $name ?? ''; - - if($name == '') - return [ - 'error' => 'The item name is empty, please, write the name!!!' - ]; - - $item = Item::where('name', $name)->first(); + $count = Item::where('name', $name)->count(); - if(!$item) - return [ - 'error' => 'A item with the name does not exist!!!' - ]; + return $count != 0; + } - return [ - 'ok' => 'A item with the name is valid.' - ]; + public static function isNameValid(string $name): bool + { + return $name != ''; } } diff --git a/app/Models/Validation/ItemValidationByName.php b/app/Models/Validation/ItemValidationByName.php new file mode 100644 index 0000000..637b2c6 --- /dev/null +++ b/app/Models/Validation/ItemValidationByName.php @@ -0,0 +1,18 @@ +create(), + ); + } +} diff --git a/app/Models/Validation/Messages/ItemMessagesFactory.php b/app/Models/Validation/Messages/ItemMessagesFactory.php new file mode 100644 index 0000000..4316065 --- /dev/null +++ b/app/Models/Validation/Messages/ItemMessagesFactory.php @@ -0,0 +1,20 @@ + 'A item with the name is valid.', + 'not_found' => 'A item with the name does not exist!!!', + 'invalid_name' => 'The item name is empty, please, write the name!!!', + ]; + + public function create() + { + return new BaseMessages($this->messages); + } +} + diff --git a/tests/Feature/ItemTest.php b/tests/Feature/ItemTest.php index f973d15..53a272b 100644 --- a/tests/Feature/ItemTest.php +++ b/tests/Feature/ItemTest.php @@ -38,31 +38,4 @@ class ItemTest extends TestCase $this->assertFalse($is_belong); } - - /* Item validation */ - - public function test_item_with_empty_name(): void - { - $json = Item::validate_with_name(''); - - $this->assertEquals($json['error'], 'The item name is empty, please, write the name!!!'); - } - - public function test_not_existing_item_with_name(): void - { - $name = '404 Item'; - - $json = Item::validate_with_name($name); - - $this->assertEquals($json['error'], 'A item with the name does not exist!!!'); - } - - public function test_valid_item_with_name(): void - { - $name = 'Pizza Polo'; - - $json = Item::validate_with_name($name); - - $this->assertEquals($json['ok'], 'A item with the name is valid.'); - } } diff --git a/tests/Feature/Validation/ItemValidationByNameTest.php b/tests/Feature/Validation/ItemValidationByNameTest.php new file mode 100644 index 0000000..91c86a9 --- /dev/null +++ b/tests/Feature/Validation/ItemValidationByNameTest.php @@ -0,0 +1,45 @@ + [ + 'name' => '', + 'key' => 'error', + 'message' => 'The item name is empty, please, write the name!!!', + 'isValid' => false, + ], + 'Not Found Case' => [ + 'name' => '404 Item', + 'key' => 'error', + 'message' => 'A item with the name does not exist!!!', + 'isValid' => false, + ], + 'Found Case' => [ + 'name' => 'Pizza Polo', + 'key' => 'ok', + 'message' => 'A item with the name is valid.', + 'isValid' => true, + ] + ]; + } + + /** + * @dataProvider dataProvider + */ + public function testCityValidationWithName(string $name, string $key, string $message, bool $isValid): void + { + $validator = new ItemValidationByName($name); + $json = $validator->getMessageMap(); + + $this->assertEquals($json[$key], $message); + $this->assertEquals($validator->isValid(), $isValid); + } +}