mirror of
https://github.com/snipe/snipe-it.git
synced 2026-04-03 14:28:32 +00:00
220 lines
6.6 KiB
PHP
220 lines
6.6 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Consumables\Api;
|
|
|
|
use App\Models\Consumable;
|
|
use App\Models\User;
|
|
use Illuminate\Http\UploadedFile;
|
|
use Tests\TestCase;
|
|
|
|
class ConsumableFileTest extends TestCase
|
|
{
|
|
public function test_consumable_api_accepts_file_upload()
|
|
{
|
|
// Upload a file to a model
|
|
|
|
// Create a model to work with
|
|
$consumable = Consumable::factory()->create();
|
|
|
|
// Create a superuser to run this as
|
|
$user = User::factory()->superuser()->create();
|
|
|
|
// Upload a file
|
|
$this->actingAsForApi($user)
|
|
->post(
|
|
route('api.files.store', ['object_type' => 'consumables', 'id' => $consumable->id]), [
|
|
'file' => [UploadedFile::fake()->create('test.jpg', 100)],
|
|
]
|
|
)
|
|
->assertOk();
|
|
}
|
|
|
|
public function test_consumable_api_lists_files()
|
|
{
|
|
// List all files on a model
|
|
|
|
// Create a model to work with
|
|
$consumable = Consumable::factory()->create();
|
|
|
|
// Create a superuser to run this as
|
|
$user = User::factory()->superuser()->create();
|
|
|
|
// List the files
|
|
$this->actingAsForApi($user)
|
|
->getJson(
|
|
route('api.files.index', ['object_type' => 'consumables', 'id' => $consumable->id])
|
|
)
|
|
->assertOk()
|
|
->assertJsonStructure(
|
|
[
|
|
'rows',
|
|
'total',
|
|
]
|
|
);
|
|
}
|
|
|
|
public function test_consumable_fails_if_invalid_type_passed_in_url()
|
|
{
|
|
// List all files on a model
|
|
|
|
// Create an model to work with
|
|
$consumable = Consumable::factory()->create();
|
|
|
|
// Create a superuser to run this as
|
|
$user = User::factory()->superuser()->create();
|
|
|
|
// List the files
|
|
$this->actingAsForApi($user)
|
|
->getJson(
|
|
route('api.files.index', ['object_type' => 'shibboleeeeeet', 'id' => $consumable->id])
|
|
)
|
|
->assertStatus(404);
|
|
}
|
|
|
|
public function test_consumable_fails_if_invalid_id_passed_in_url()
|
|
{
|
|
// List all files on a model
|
|
|
|
// Create an model to work with
|
|
$consumable = Consumable::factory()->create();
|
|
|
|
// Create a superuser to run this as
|
|
$user = User::factory()->superuser()->create();
|
|
|
|
// List the files
|
|
$this->actingAsForApi($user)
|
|
->getJson(
|
|
route('api.files.index', ['object_type' => 'consumables', 'id' => 100000])
|
|
)
|
|
->assertOk()
|
|
->assertStatusMessageIs('error');
|
|
}
|
|
|
|
public function test_consumable_api_downloads_file()
|
|
{
|
|
// Download a file from a model
|
|
|
|
// Create a model to work with
|
|
$consumable = Consumable::factory()->create();
|
|
|
|
// Create a superuser to run this as
|
|
$user = User::factory()->superuser()->create();
|
|
|
|
// Upload a file
|
|
$this->actingAsForApi($user)
|
|
->post(
|
|
route('api.files.store', ['object_type' => 'consumables', 'id' => $consumable->id]), [
|
|
'file' => [UploadedFile::fake()->create('test.jpg', 100)],
|
|
]
|
|
)
|
|
->assertOk()
|
|
->assertJsonStructure(
|
|
[
|
|
'status',
|
|
'messages',
|
|
]
|
|
);
|
|
|
|
// Upload a file with notes
|
|
$this->actingAsForApi($user)
|
|
->post(
|
|
route('api.files.store', ['object_type' => 'consumables', 'id' => $consumable->id]), [
|
|
'file' => [UploadedFile::fake()->create('test.jpg', 100)],
|
|
'notes' => 'manual',
|
|
]
|
|
)
|
|
->assertOk()
|
|
->assertJsonStructure(
|
|
[
|
|
'status',
|
|
'messages',
|
|
]
|
|
);
|
|
|
|
// List the files to get the file ID
|
|
$result = $this->actingAsForApi($user)
|
|
->getJson(
|
|
route('api.files.index', ['object_type' => 'consumables', 'id' => $consumable->id, 'order' => 'asc'])
|
|
)
|
|
->assertOk()
|
|
->assertJsonStructure(
|
|
[
|
|
'total',
|
|
'rows' => [
|
|
'*' => [
|
|
'id',
|
|
'filename',
|
|
'url',
|
|
'created_by',
|
|
'created_at',
|
|
'deleted_at',
|
|
'note',
|
|
'available_actions',
|
|
],
|
|
],
|
|
]
|
|
)
|
|
->assertJsonPath('rows.0.note', null)
|
|
->assertJsonPath('rows.1.note', 'manual');
|
|
|
|
// Get the file
|
|
$this->actingAsForApi($user)
|
|
->get(
|
|
route(
|
|
'api.files.show', [
|
|
'object_type' => 'consumables',
|
|
'id' => $consumable->id,
|
|
'file_id' => $result->decodeResponseJson()->json()['rows'][0]['id'],
|
|
]
|
|
)
|
|
)
|
|
->assertOk();
|
|
}
|
|
|
|
public function test_consumable_api_deletes_file()
|
|
{
|
|
// Delete a file from a model
|
|
|
|
// Create a model to work with
|
|
$consumable = Consumable::factory()->create();
|
|
|
|
// Create a superuser to run this as
|
|
$user = User::factory()->superuser()->create();
|
|
|
|
// Upload a file
|
|
$this->actingAsForApi($user)
|
|
->post(
|
|
route('api.files.store', ['object_type' => 'consumables', 'id' => $consumable->id]), [
|
|
'file' => [UploadedFile::fake()->create('test.jpg', 100)],
|
|
]
|
|
)
|
|
->assertOk();
|
|
|
|
// List the files to get the file ID
|
|
$result = $this->actingAsForApi($user)
|
|
->getJson(
|
|
route('api.files.index', ['object_type' => 'consumables', 'id' => $consumable->id])
|
|
)
|
|
->assertOk();
|
|
|
|
// Delete the file
|
|
$this->actingAsForApi($user)
|
|
->delete(
|
|
route(
|
|
'api.files.destroy', [
|
|
'object_type' => 'consumables',
|
|
'id' => $consumable->id,
|
|
'file_id' => $result->decodeResponseJson()->json()['rows'][0]['id'],
|
|
]
|
|
)
|
|
)
|
|
->assertOk()
|
|
->assertJsonStructure(
|
|
[
|
|
'status',
|
|
'messages',
|
|
]
|
|
);
|
|
}
|
|
}
|