mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-30 21:21:09 -04:00 
			
		
		
		
	v5.0.0 update
This commit is contained in:
		
							
								
								
									
										142
									
								
								tests/Feature/Admin/ItemTest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								tests/Feature/Admin/ItemTest.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,142 @@ | ||||
| <?php | ||||
|  | ||||
| use Crater\Http\Controllers\V1\Admin\Item\ItemsController; | ||||
| use Crater\Http\Requests\ItemsRequest; | ||||
| use Crater\Models\Item; | ||||
| use Crater\Models\Tax; | ||||
| use Crater\Models\User; | ||||
| use Illuminate\Support\Facades\Artisan; | ||||
| use Laravel\Sanctum\Sanctum; | ||||
| use function Pest\Laravel\getJson; | ||||
| use function Pest\Laravel\postJson; | ||||
| use function Pest\Laravel\putJson; | ||||
|  | ||||
| beforeEach(function () { | ||||
|     Artisan::call('db:seed', ['--class' => 'DatabaseSeeder', '--force' => true]); | ||||
|     Artisan::call('db:seed', ['--class' => 'DemoSeeder', '--force' => true]); | ||||
|  | ||||
|     $user = User::find(1); | ||||
|     $this->withHeaders([ | ||||
|         'company' => $user->companies()->first()->id, | ||||
|     ]); | ||||
|     Sanctum::actingAs( | ||||
|         $user, | ||||
|         ['*'] | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| test('get items', function () { | ||||
|     $response = getJson('api/v1/items?page=1'); | ||||
|  | ||||
|     $response->assertOk(); | ||||
| }); | ||||
|  | ||||
| test('create item', function () { | ||||
|     $item = Item::factory()->raw([ | ||||
|         'taxes' => [ | ||||
|             Tax::factory()->raw(), | ||||
|             Tax::factory()->raw(), | ||||
|         ], | ||||
|     ]); | ||||
|  | ||||
|     $response = postJson('api/v1/items', $item); | ||||
|  | ||||
|     $this->assertDatabaseHas('items', [ | ||||
|         'name' => $item['name'], | ||||
|         'description' => $item['description'], | ||||
|         'price' => $item['price'], | ||||
|         'company_id' => $item['company_id'], | ||||
|     ]); | ||||
|  | ||||
|     $this->assertDatabaseHas('taxes', [ | ||||
|         'item_id' => $response->getData()->data->id, | ||||
|     ]); | ||||
|  | ||||
|     $response->assertOk(); | ||||
| }); | ||||
|  | ||||
| test('store validates using a form request', function () { | ||||
|     $this->assertActionUsesFormRequest( | ||||
|         ItemsController::class, | ||||
|         'store', | ||||
|         ItemsRequest::class | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| test('get item', function () { | ||||
|     $item = Item::factory()->create(); | ||||
|  | ||||
|     $response = getJson("api/v1/items/{$item->id}"); | ||||
|  | ||||
|     $response->assertOk(); | ||||
|  | ||||
|     $this->assertDatabaseHas('items', [ | ||||
|         'name' => $item['name'], | ||||
|         'description' => $item['description'], | ||||
|         'price' => $item['price'], | ||||
|         'company_id' => $item['company_id'], | ||||
|     ]); | ||||
| }); | ||||
|  | ||||
| test('update item', function () { | ||||
|     $item = Item::factory()->create(); | ||||
|  | ||||
|     $update_item = Item::factory()->raw([ | ||||
|         'taxes' => [ | ||||
|             Tax::factory()->raw(), | ||||
|         ], | ||||
|     ]); | ||||
|  | ||||
|     $response = putJson('api/v1/items/'.$item->id, $update_item); | ||||
|  | ||||
|     $response->assertOk(); | ||||
|  | ||||
|     $this->assertDatabaseHas('items', [ | ||||
|         'name' => $update_item['name'], | ||||
|         'description' => $update_item['description'], | ||||
|         'price' => $update_item['price'], | ||||
|         'company_id' => $update_item['company_id'], | ||||
|     ]); | ||||
|  | ||||
|     $this->assertDatabaseHas('taxes', [ | ||||
|         'item_id' => $item->id, | ||||
|     ]); | ||||
| }); | ||||
|  | ||||
| test('update validates using a form request', function () { | ||||
|     $this->assertActionUsesFormRequest( | ||||
|         ItemsController::class, | ||||
|         'update', | ||||
|         ItemsRequest::class | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| test('delete multiple items', function () { | ||||
|     $items = Item::factory()->count(5)->create(); | ||||
|  | ||||
|     $data = [ | ||||
|         'ids' => $items->pluck('id'), | ||||
|     ]; | ||||
|  | ||||
|     postJson("/api/v1/items/delete", $data)->assertOk(); | ||||
|  | ||||
|     foreach ($items as $item) { | ||||
|         $this->assertDeleted($item); | ||||
|     } | ||||
| }); | ||||
|  | ||||
| test('search items', function () { | ||||
|     $filters = [ | ||||
|         'page' => 1, | ||||
|         'limit' => 15, | ||||
|         'search' => 'doe', | ||||
|         'price' => 6, | ||||
|         'unit' => 'kg', | ||||
|     ]; | ||||
|  | ||||
|     $queryString = http_build_query($filters, '', '&'); | ||||
|  | ||||
|     $response = getJson('api/v1/items?'.$queryString); | ||||
|  | ||||
|     $response->assertOk(); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user