Add ItemValidationByName.
continuous-integration/drone/push Build is passing Details

main
KKlochko 2 years ago
parent c9974b007a
commit 8c62393d3f

@ -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([

@ -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 != '';
}
}

@ -0,0 +1,18 @@
<?php
namespace App\Models\Validation;
use App\Models\Validation\ModelValidationByName;
use App\Models\Validation\Messages\ItemMessagesFactory;
class ItemValidationByName extends ModelValidationByName
{
public function __construct(string $name)
{
parent::__construct(
$name,
'App\Models\Item',
(new ItemMessagesFactory())->create(),
);
}
}

@ -0,0 +1,20 @@
<?php
namespace App\Models\Validation\Messages;
use App\Models\Validation\Messages\BaseMessages;
class ItemMessagesFactory
{
protected array $messages = [
'found' => '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);
}
}

@ -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.');
}
}

@ -0,0 +1,45 @@
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Validation\ItemValidationByName;
class ItemValidationByNameTest extends TestCase
{
public function dataProvider() {
return [
'Invalid Case' => [
'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);
}
}
Loading…
Cancel
Save