Skip to content

Commit 5b5485a

Browse files
committed
Update API tests
Signed-off-by: Sam Poyigi <[email protected]>
1 parent 1632fe0 commit 5b5485a

26 files changed

+795
-35
lines changed

src/ApiResources/Requests/MenuItemOptionRequest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ class MenuItemOptionRequest extends FormRequest
99
public function attributes()
1010
{
1111
return [
12-
'menu_id', lang('igniter.cart::default.menus.label_option'),
13-
'option_id', lang('igniter.cart::default.menus.label_option_id'),
14-
'priority', lang('igniter.cart::default.menus.label_option'),
15-
'required', lang('igniter.cart::default.menus.label_option_required'),
16-
'min_selected', lang('igniter.cart::default.menus.label_min_selected'),
17-
'max_selected', lang('igniter.cart::default.menus.label_max_selected'),
18-
'menu_option_values.*', lang('admin::lang.label_option_value_id'),
12+
'menu_id' => lang('igniter.cart::default.menus.label_option'),
13+
'option_id' => lang('igniter.cart::default.menus.label_option_id'),
14+
'priority' => lang('igniter.cart::default.menus.label_option'),
15+
'required' => lang('igniter.cart::default.menus.label_option_required'),
16+
'min_selected' => lang('igniter.cart::default.menus.label_min_selected'),
17+
'max_selected' => lang('igniter.cart::default.menus.label_max_selected'),
18+
'menu_option_values.*' => lang('admin::lang.label_option_value_id'),
1919
];
2020
}
2121

src/ApiResources/Requests/OrderRequest.php

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Igniter\Api\ApiResources\Requests;
44

55
use Igniter\System\Classes\FormRequest;
6-
use Illuminate\Support\Facades\Request;
76

87
class OrderRequest extends FormRequest
98
{
@@ -30,8 +29,6 @@ public function attributes()
3029

3130
public function rules()
3231
{
33-
$method = Request::method();
34-
3532
$rules = [
3633
'first_name' => ['between:1,48'],
3734
'last_name' => ['between:1,48'],
@@ -47,14 +44,14 @@ public function rules()
4744
'is_processed' => ['integer'],
4845
];
4946

50-
if ($method == 'post') {
47+
if ($this->method() == 'post') {
5148
$rules['first_name'][] = 'required';
5249
$rules['last_name'][] = 'required';
5350
$rules['order_type'][] = 'required';
5451
$rules['customer_id'][] = 'required';
5552
}
5653

57-
if (Request::input('order_type', 'collection') == 'delivery') {
54+
if ($this->input('order_type', 'collection') == 'delivery') {
5855
$rules['address_id'] = ['integer'];
5956
$rules['address.address_1'] = ['required', 'min:3', 'max:128'];
6057
$rules['address.address_2'] = ['sometimes', 'min:3', 'max:128'];

src/Classes/ApiManager.php

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Igniter\Api\Models\Resource;
66
use Igniter\Flame\Igniter;
7-
use Illuminate\Support\Facades\Artisan;
87
use Illuminate\Support\Facades\Route;
98
use Illuminate\Support\Facades\Schema;
109
use Illuminate\Support\Str;
@@ -46,26 +45,6 @@ public function getCurrentAction()
4645
return Str::afterLast(Route::currentRouteAction(), '@');
4746
}
4847

49-
public function buildResource($name, $model, $meta = [])
50-
{
51-
$controller = $this->parseName($name);
52-
$singularController = str_singular($controller);
53-
$namespace = '\\Igniter\\Api\\ApiResources';
54-
55-
Artisan::call('create:apiresource', [
56-
'extension' => 'Igniter.Api',
57-
'controller' => $controller,
58-
'--model' => $model,
59-
'--meta' => $meta,
60-
]);
61-
62-
if (!class_exists($controllerName = $namespace."\\{$controller}")) {
63-
return [null, null];
64-
}
65-
66-
return [$controllerName, $namespace."\\Transformers\\{$singularController}Transformer"];
67-
}
68-
6948
protected function loadResources()
7049
{
7150
Resource::syncAll();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Igniter\Api\Database\Factories;
4+
5+
use Igniter\Flame\Database\Factories\Factory;
6+
7+
class ResourceFactory extends Factory
8+
{
9+
protected $model = \Igniter\Api\Models\Resource::class;
10+
11+
public function definition(): array
12+
{
13+
return [
14+
'name' => $this->faker->sentence(2),
15+
'endpoint' => $this->faker->word(),
16+
'description' => $this->faker->paragraph(),
17+
'meta' => [
18+
'actions' => ['index', 'show', 'store', 'update', 'destroy'],
19+
'authorization' => [
20+
'index' => 'all',
21+
'show' => 'admin',
22+
'store' => 'admin',
23+
'update' => 'admin',
24+
'destroy' => 'admin',
25+
],
26+
],
27+
];
28+
}
29+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Igniter\Api\Database\Factories;
4+
5+
use Igniter\Flame\Database\Factories\Factory;
6+
7+
class TokenFactory extends Factory
8+
{
9+
protected $model = \Igniter\Api\Models\Token::class;
10+
11+
public function definition(): array
12+
{
13+
return [
14+
'tokenable_type' => 'users',
15+
'tokenable_id' => 1,
16+
'name' => $this->faker->sentence(2),
17+
'token' => $this->faker->sha256,
18+
'abilities' => ['*'],
19+
];
20+
}
21+
}

src/Http/Requests/ResourceRequest.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,18 @@
66

77
class ResourceRequest extends FormRequest
88
{
9-
public function rules()
9+
public function attributes(): array
10+
{
11+
return [
12+
'name' => lang('igniter.api::default.label_name'),
13+
'description' => lang('igniter.api::default.label_description'),
14+
'endpoint' => lang('igniter.api::default.label_endpoint'),
15+
'meta.actions' => lang('igniter.api::default.label_actions'),
16+
'meta.authorization' => lang('igniter.api::default.label_authorization'),
17+
];
18+
}
19+
20+
public function rules(): array
1021
{
1122
return [
1223
'name' => ['required', 'min:2', 'max:128', 'string'],

src/Models/Resource.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Igniter\Api\Models;
44

5+
use Igniter\Flame\Database\Factories\HasFactory;
56
use Igniter\Flame\Database\Model;
67
use Igniter\Flame\Database\Traits\HasPermalink;
78
use Igniter\Flame\Mail\Markdown;
@@ -13,6 +14,7 @@
1314
*/
1415
class Resource extends Model
1516
{
17+
use HasFactory;
1618
use HasPermalink;
1719

1820
/**

src/Models/Token.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Igniter\Api\Models;
44

5+
use Igniter\Flame\Database\Factories\HasFactory;
56
use Igniter\User\Models\Customer;
67
use Igniter\User\Models\User;
78
use Illuminate\Support\Str;
@@ -13,6 +14,8 @@
1314
*/
1415
class Token extends PersonalAccessToken
1516
{
17+
use HasFactory;
18+
1619
/**
1720
* @var string The database table used by the model.
1821
*/
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Igniter\Api\Tests\ApiResources\Requests;
4+
5+
use Igniter\Api\ApiResources\Requests\MenuItemOptionRequest;
6+
7+
it('returns correct attribute labels', function() {
8+
$request = new MenuItemOptionRequest();
9+
10+
$attributes = $request->attributes();
11+
12+
expect($attributes)->toHaveKey('menu_id', lang('igniter.cart::default.menus.label_option'))
13+
->and($attributes)->toHaveKey('option_id', lang('igniter.cart::default.menus.label_option_id'))
14+
->and($attributes)->toHaveKey('priority', lang('igniter.cart::default.menus.label_option'))
15+
->and($attributes)->toHaveKey('required', lang('igniter.cart::default.menus.label_option_required'))
16+
->and($attributes)->toHaveKey('min_selected', lang('igniter.cart::default.menus.label_min_selected'))
17+
->and($attributes)->toHaveKey('max_selected', lang('igniter.cart::default.menus.label_max_selected'))
18+
->and($attributes)->toHaveKey('menu_option_values.*', lang('admin::lang.label_option_value_id'));
19+
});
20+
21+
it('returns correct validation rules', function() {
22+
$request = new MenuItemOptionRequest();
23+
24+
$rules = $request->rules();
25+
26+
expect($rules)->toHaveKey('menu_id')
27+
->and($rules)->toHaveKey('option_id')
28+
->and($rules)->toHaveKey('priority')
29+
->and($rules)->toHaveKey('required')
30+
->and($rules)->toHaveKey('min_selected')
31+
->and($rules)->toHaveKey('max_selected')
32+
->and($rules)->toHaveKey('menu_option_values.*')
33+
->and($rules['menu_id'])->toContain('nullable', 'integer')
34+
->and($rules['option_id'])->toContain('required', 'integer')
35+
->and($rules['priority'])->toContain('integer')
36+
->and($rules['required'])->toContain('boolean')
37+
->and($rules['min_selected'])->toContain('integer', 'lte:max_selected')
38+
->and($rules['max_selected'])->toContain('integer', 'gte:min_selected')
39+
->and($rules['menu_option_values.*'])->toContain('array');
40+
});
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
namespace Igniter\Api\Tests\ApiResources\Requests;
4+
5+
use Igniter\Api\ApiResources\Requests\MenuOptionRequest;
6+
7+
it('returns correct attribute labels', function() {
8+
$request = new MenuOptionRequest();
9+
10+
$attributes = $request->attributes();
11+
12+
expect($attributes)->toHaveKey('option_name', lang('admin::lang.menu_options.label_option_group_name'))
13+
->and($attributes)->toHaveKey('display_type', lang('admin::lang.menu_options.label_display_type'))
14+
->and($attributes)->toHaveKey('priority', lang('admin::lang.menu_options.label_priority'))
15+
->and($attributes)->toHaveKey('locations.*', lang('admin::lang.label_location'))
16+
->and($attributes)->toHaveKey('option_values.*.option_value_id', lang('admin::lang.label_option_value_id'))
17+
->and($attributes)->toHaveKey('option_values.*.option_id', lang('admin::lang.label_option_id'))
18+
->and($attributes)->toHaveKey('option_values.*.value', lang('admin::lang.menu_options.label_option_value'))
19+
->and($attributes)->toHaveKey('option_values.*.price', lang('admin::lang.menu_options.label_option_price'))
20+
->and($attributes)->toHaveKey('option_values.*.priority', lang('admin::lang.menu_options.label_option_price'))
21+
->and($attributes)->toHaveKey('option_values.*.allergens.*', lang('igniter.cart::default.menus.label_allergens'));
22+
});
23+
24+
it('returns correct validation rules', function() {
25+
$request = new MenuOptionRequest();
26+
27+
$rules = $request->rules();
28+
29+
expect($rules)->toHaveKey('option_name')
30+
->and($rules)->toHaveKey('display_type')
31+
->and($rules)->toHaveKey('priority')
32+
->and($rules)->toHaveKey('locations.*')
33+
->and($rules)->toHaveKey('option_values.*.option_value_id')
34+
->and($rules)->toHaveKey('option_values.*.option_id')
35+
->and($rules)->toHaveKey('option_values.*.value')
36+
->and($rules)->toHaveKey('option_values.*.price')
37+
->and($rules)->toHaveKey('option_values.*.priority')
38+
->and($rules)->toHaveKey('option_values.*.allergens.*')
39+
->and($rules['option_name'])->toContain('required', 'min:2', 'max:32')
40+
->and($rules['display_type'])->toContain('required', 'alpha')
41+
->and($rules['priority'])->toContain('integer')
42+
->and($rules['locations.*'])->toContain('integer')
43+
->and($rules['option_values.*.option_value_id'])->toContain('integer')
44+
->and($rules['option_values.*.option_id'])->toContain('integer')
45+
->and($rules['option_values.*.value'])->toContain('min:2', 'max:128')
46+
->and($rules['option_values.*.price'])->toContain('numeric', 'min:0')
47+
->and($rules['option_values.*.priority'])->toContain('integer')
48+
->and($rules['option_values.*.allergens.*'])->toContain('integer');
49+
});

0 commit comments

Comments
 (0)