Merge branch 'develop' of github.com:snipe/snipe-it into develop

This commit is contained in:
snipe 2017-02-22 22:20:32 -08:00
commit 904be03ffd
49 changed files with 441 additions and 7 deletions

View file

@ -4,7 +4,9 @@ namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Transformers\AssetsTransformer;
use App\Http\Transformers\ComponentsTransformer;
use App\Http\Transformers\ComponentsAssetsTransformer;
use App\Models\Component;
use App\Models\Company;
use App\Helpers\Helper;
@ -131,4 +133,26 @@ class ComponentsController extends Controller
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/components/message.delete.success')));
}
/**
* Display all assets attached to a component
*
* @author [A. Bergamasco] [@vjandrea]
* @since [v4.0]
* @param Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function getAssets(Request $request, $id)
{
$this->authorize('index', Asset::class);
$component = Component::findOrFail($id);
$assets = $component->assets();
$offset = request('offset', 0);
$limit = $request->input('limit', 50);
$total = $assets->count();
$assets = $assets->skip($offset)->take($limit)->get();
return (new ComponentsAssetsTransformer)->transformAssets($assets, $total);
}
}

View file

@ -0,0 +1,54 @@
<?php
namespace App\Http\Transformers;
use App\Models\Asset;
use Illuminate\Database\Eloquent\Collection;
use App\Http\Transformers\UsersTransformer;
use Gate;
class ComponentsAssetsTransformer
{
public function transformAssets (Collection $assets, $total)
{
$array = array();
foreach ($assets as $asset) {
$array[] = self::transformAsset($asset);
}
return (new DatatablesTransformer)->transformDatatables($array, $total);
}
public function transformAsset (Asset $asset)
{
$array = [
'id' => $asset->id,
'name' => e($asset->name),
'created_at' => $asset->created_at->format('Y-m-d'),
'qty' => $asset->components()->count(),
'can_checkout' => $asset->availableForCheckout(),
];
$permissions_array['available_actions'] = [
'checkout' => Gate::allows('checkout', Asset::class) ? true : false,
'checkin' => Gate::allows('checkin', Asset::class) ? true : false,
'update' => Gate::allows('update', Asset::class) ? true : false,
'delete' => Gate::allows('delete', Asset::class) ? true : false,
];
$array += $permissions_array;
if ($asset->model->fieldset) {
foreach ($asset->model->fieldset->fields as $field) {
$fields_array = [$field->name => $asset->{$field->convertUnicodeDbSlug()}];
$array += $fields_array;
}
}
return $array;
}
public function transformAssetsDatatable ($assets) {
return (new DatatablesTransformer)->transformDatatables($assets);
}
}

View file

@ -158,6 +158,7 @@
'status' => 'الحالة',
'supplier' => 'Supplier',
'suppliers' => 'الموردون',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'إجمالي الأصول',

View file

@ -158,6 +158,7 @@
'status' => 'Статус',
'supplier' => 'Supplier',
'suppliers' => 'Доставчици',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'общо активи',

View file

@ -158,6 +158,7 @@
'status' => 'Stav',
'supplier' => 'Supplier',
'suppliers' => 'Dodavatelé',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'celkem zařízení',

View file

@ -159,6 +159,7 @@
'supplier' => 'Supplier',
'suppliers' => 'Leverandører',
'submit' => 'Submit',
'sure_to_delete' => 'Are you sure you wish to delete',
'target' => 'Target',
'total_assets' => 'totale aktiver',
'total_licenses' => 'totale licenser',

View file

@ -159,6 +159,7 @@
'supplier' => 'Lieferant',
'suppliers' => 'Lieferanten',
'submit' => 'Abschicken',
'sure_to_delete' => 'Are you sure you wish to delete',
'target' => 'Target',
'total_assets' => 'Gesamte Assets',
'total_licenses' => 'Lizenzen insgesamt',

View file

@ -159,6 +159,7 @@
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'submit' => 'Submit',
'sure_to_delete' => 'Are you sure you wish to delete',
'target' => 'Target',
'total_assets' => 'total assets',
'total_licenses' => 'total licenses',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total assets',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total assets',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total assets',

View file

@ -158,6 +158,7 @@
'status' => 'Estados',
'supplier' => 'Proveedor',
'suppliers' => 'Proveedores',
'sure_to_delete' => '¿Está seguro de que desea eliminar',
'submit' => 'Enviar',
'target' => 'Target',
'total_assets' => 'Equipos',

View file

@ -158,6 +158,7 @@
'status' => 'Estados',
'supplier' => 'Proveedor',
'suppliers' => 'Proveedores',
'sure_to_delete' => '¿Está seguro de que desea borrar',
'submit' => 'Enviar',
'target' => 'Target',
'total_assets' => 'Equipos',

View file

@ -162,6 +162,7 @@
'status' => 'وضعیت',
'supplier' => 'Supplier',
'suppliers' => 'تامین کننده',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'کل دارایی',

View file

@ -158,6 +158,7 @@
'status' => 'Tila',
'supplier' => 'Supplier',
'suppliers' => 'Toimittajat',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'laitteita yhteensä',

View file

@ -158,6 +158,7 @@
'status' => 'Statut',
'supplier' => 'Supplier',
'suppliers' => 'Fournisseurs',
'sure_to_delete' => 'Êtes-vous sûr de vouloir supprimer',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'actifs au total',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total assets',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total assets',

View file

@ -158,6 +158,7 @@
'status' => 'Állapot',
'supplier' => 'Supplier',
'suppliers' => 'Beszállítók',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'eszköz összesen',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Pemasok',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total aset',

View file

@ -124,7 +124,7 @@
'previous' => 'Precedente',
'processing' => 'In elaborazione',
'profile' => 'Il tuo profilo',
'purchase_cost' => 'Prezzo d\'acquisto',
'purchase_cost' => 'Prezzo d\'acquisto',
'purchase_date' => 'Data di acquisto',
'qty' => 'Quantità',
'quantity' => 'Quantità',
@ -133,7 +133,7 @@
'remove_company' => 'Rimuovi associazioni azienda',
'reports' => 'Reports',
'requested' => 'Richiesto',
'request_canceled' => 'Request Canceled',
'request_canceled' => 'Richiesta annullata',
'save' => 'Salva',
'select' => 'Seleziona',
'search' => 'Cerca',
@ -158,6 +158,7 @@
'status' => 'Stato',
'supplier' => 'Fornitore',
'suppliers' => 'Fornitori',
'sure_to_delete' => 'Sei sicuro di voler eliminare',
'submit' => 'Invia',
'target' => 'Target',
'total_assets' => 'Assets totali',
@ -182,5 +183,5 @@
'yes' => 'SÌ',
'zip' => 'Zip',
'noimage' => 'Nessuna immagine caricata o immagine non trovata.',
'token_expired' => 'Your form session has expired. Please try again.',
'token_expired' => 'La tua sessione è scaduta. Riprova per cortesia.',
];

View file

@ -158,6 +158,7 @@
'status' => 'ステータス',
'supplier' => 'Supplier',
'suppliers' => '仕入先',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => '資産の合計',

View file

@ -158,6 +158,7 @@
'status' => '상태',
'supplier' => '공급자',
'suppliers' => '공급자',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => '제출',
'target' => 'Target',
'total_assets' => '총 자산',

View file

@ -158,6 +158,7 @@
'status' => 'Būklė',
'supplier' => 'Supplier',
'suppliers' => 'Tiekėjai',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'įrangos iš viso',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Pembekal',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'jumlah harta',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Leverancier',
'suppliers' => 'Leveranciers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Verzenden',
'target' => 'Target',
'total_assets' => 'totaal aantal materialen',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Leverandører',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Send',
'target' => 'Target',
'total_assets' => 'eiendeler totalt',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Dostawcy',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'Ogółem aktywów',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Fornecedores',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submeter',
'target' => 'Target',
'total_assets' => 'ativos no total',

View file

@ -158,6 +158,7 @@
'status' => 'Estado',
'supplier' => 'Supplier',
'suppliers' => 'Fornecedores',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submeter',
'target' => 'Target',
'total_assets' => 'artigos',

View file

@ -158,6 +158,7 @@
'status' => 'Stare',
'supplier' => 'Supplier',
'suppliers' => 'Furnizori',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'Total active',

View file

@ -158,6 +158,7 @@
'status' => 'Статус',
'supplier' => 'Supplier',
'suppliers' => 'Поставщики',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'Всего активов',

View file

@ -158,6 +158,7 @@
'status' => 'Status',
'supplier' => 'Supplier',
'suppliers' => 'Suppliers',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'total assets',

View file

@ -158,6 +158,7 @@
'status' => 'สถานะ',
'supplier' => 'Supplier',
'suppliers' => 'ตัวแทนจำหน่าย',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'ทรัพย์สินทั้งหมด',

View file

@ -158,6 +158,7 @@
'status' => 'Durum',
'supplier' => 'Supplier',
'suppliers' => 'Tedarikçiler',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'Toplam Demirbaşlar',

View file

@ -158,6 +158,7 @@
'status' => 'Tình trạng',
'supplier' => 'Supplier',
'suppliers' => 'Nhà cung cấp',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => 'Submit',
'target' => 'Target',
'total_assets' => 'tổng số tài sản',

View file

@ -158,6 +158,7 @@
'status' => '状态',
'supplier' => '供应商',
'suppliers' => '供应商',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => '提交',
'target' => 'Target',
'total_assets' => '共计资产',

View file

@ -158,6 +158,7 @@
'status' => '狀態',
'supplier' => '供應商',
'suppliers' => '供應商',
'sure_to_delete' => 'Are you sure you wish to delete',
'submit' => '送出',
'target' => 'Target',
'total_assets' => '總資產',

View file

@ -49,14 +49,14 @@
name="component_users"
class="table table-striped snipe-table"
id="table"
data-url="{{route('api.components.show', $component->id)}}"
data-url="{{route('api.components.assets', $component->id)}}"
data-cookie="true"
data-click-to-select="true"
data-cookie-id-table="componentDetailTable-{{ config('version.hash_version') }}"
>
<thead>
<tr>
<th data-switchable="false" data-searchable="false" data-sortable="false" data-field="name">{{ trans('general.asset') }}</th>
<th data-switchable="false" data-searchable="false" data-sortable="false" data-field="name" data-formatter="hardwareLinkFormatter">{{ trans('general.asset') }}</th>
<th data-switchable="false" data-searchable="false" data-sortable="false" data-field="qty">{{ trans('general.qty') }}</th>
<th data-switchable="false" data-searchable="false" data-sortable="false" data-field="created_at">{{ trans('general.date') }}</th>
</tr>

View file

@ -84,7 +84,7 @@
@if ($asset->company)
<tr>
<td>{{ trans('general.company') }}</td>
<td>{{ $asset->company->name }}</td>
<td><a href="{{ url('/companies/' . $asset->company->id) }}">{{ $asset->company->name }}</a></td>
</tr>
@endif

View file

@ -128,7 +128,7 @@ $('.snipe-table').bootstrapTable({
actions += '<a href="{{ url('/') }}/' + destination + '/' + row.id + '" '
+ ' class="btn btn-danger btn-sm delete-asset" '
+ ' data-toggle="modal" '
+ ' data-content="Are you sure you wish to delete ' + row.name + ' (' + row.id + ')?" '
+ ' data-content="{{ trans('general.sure_to_delete') }} ' + row.name + ' (' + row.id + ')?" '
+ ' data-title="{{ trans('general.delete') }}?" onClick="return false;">'
+ '<i class="fa fa-trash"></i></a></nobr>';
}

View file

@ -11,6 +11,9 @@
@if (!config('app.lock_passwords'))
<passport-clients></passport-clients>
<passport-authorized-clients></passport-authorized-clients>
@if(env('APP_ENV') != 'production')
<passport-personal-access-tokens></passport-personal-access-tokens>
@endif
@else
<p class="help-block">{{ trans('general.feature_disabled') }}</p>
@endif

View file

@ -142,6 +142,11 @@ Route::group(['prefix' => 'v1','namespace' => 'Api'], function () {
]
);
Route::get('components/{id}/assets', [
'as' =>'api.components.assets',
'uses' => 'ComponentsController@getAssets',
]);
Route::resource('suppliers', 'SuppliersController',
['names' =>

View file

@ -0,0 +1,46 @@
<?php
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
*
* @SuppressWarnings(PHPMD)
*/
class ApiTester extends \Codeception\Actor
{
use _generated\ApiTesterActions;
/**
* Define custom actions here
*/
public function getToken(\App\Models\User $user)
{
$client_repository = new \Laravel\Passport\ClientRepository();
$client = $client_repository->createPersonalAccessClient($user->id, 'Codeception API Test Client',
'http://localhost/');
\Illuminate\Support\Facades\DB::table('oauth_personal_access_clients')->insert([
'client_id' => $client->id,
'created_at' => new DateTime,
'updated_at' => new DateTime,
]);
$user->permissions = json_encode(['superuser' => true]);
$user->save();
$token = $user->createToken('CodeceptionAPItestToken')->accessToken;
return $token;
}
}

View file

@ -0,0 +1,10 @@
<?php
namespace Helper;
// here you can define custom actions
// all public methods declared in helper class will be available in $I
class Api extends \Codeception\Module
{
}

13
tests/api.suite.yml Normal file
View file

@ -0,0 +1,13 @@
class_name: ApiTester
modules:
enabled:
- \Helper\Api
- REST:
url: /api/v1
depends: Laravel5
- Asserts
config:
- Laravel5:
environment_file: .env.testing
disable_middleware: true
cleanup: true

View file

@ -0,0 +1,59 @@
<?php
class ApiComponentsAssetsCest
{
protected $faker;
protected $user;
public function _before(ApiTester $I)
{
$this->faker = \Faker\Factory::create();
$this->user = \App\Models\User::find(1);
$I->amBearerAuthenticated($I->getToken($this->user));
}
/** @test */
public function indexComponentsAssets(ApiTester $I)
{
$I->wantTo('Get a list of assets related to a component');
// generate
$component = factory(\App\Models\Component::class, 'component')
->create(['user_id' => $this->user->id, 'qty' => 20]);
$assets = factory(\App\Models\Asset::class, 'asset', 2)
->create(['user_id' => $this->user->id])
->each(function ($asset) use ($component) {
$component->assets()->attach($component->id, [
'component_id' => $component->id,
'user_id' => $this->user->id,
'created_at' => date('Y-m-d H:i:s'),
'assigned_qty' => 2,
'asset_id' => $asset->id
]);
});
$I->sendGET('/components/' . $component->id . '/assets/');
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$response = json_decode($I->grabResponse());
$I->assertEquals(2, $response->total);
$I->assertInstanceOf(\Illuminate\Database\Eloquent\Collection::class, $assets);
$I->seeResponseContainsJson(['rows' => [
0 => [
'name' => $assets[0]->name,
'id' => $assets[0]->id,
'created_at' => $assets[0]->created_at->format('Y-m-d'),
],
1 => [
'name' => $assets[1]->name,
'id' => $assets[1]->id,
'created_at' => $assets[1]->created_at->format('Y-m-d'),
],
]
]);
}
}

View file

@ -0,0 +1,182 @@
<?php
use Illuminate\Support\Facades\Auth;
class ApiComponentsCest
{
protected $faker;
protected $user;
public function _before(ApiTester $I)
{
$this->faker = \Faker\Factory::create();
$this->user = \App\Models\User::find(1);
$I->amBearerAuthenticated($I->getToken($this->user));
}
/** @test */
public function indexComponents(ApiTester $I)
{
$I->wantTo('Get a list of components');
// setup
$components = factory(\App\Models\Component::class, 'component', 10)->create(['user_id' => $this->user->id]);
// call
$I->sendGET('/components');
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
// sample verify
$component = $components->random();
$I->seeResponseContainsJson([
'name' => $component->name,
'qty' => $component->qty,
]);
}
/** @test */
public function createComponent(ApiTester $I)
{
$I->wantTo('Create a new component');
// setup
$category = factory(\App\Models\Category::class, 'category')->create(['user_id' => $this->user->id]);
$location = factory(\App\Models\Location::class, 'location')->create(['user_id' => $this->user->id]);
$company = factory(\App\Models\Company::class, 'company')->create();
$data = [
'category_id' => $category->id,
'company_id' => $company->id,
'location_id' => $location->id,
'name' => $this->faker->sentence(3),
'purchase_cost' => $this->faker->randomFloat(2, 0),
'purchase_date' => $this->faker->dateTime->format('Y-m-d'),
'qty' => rand(1, 10),
];
// create
$I->sendPOST('/components', $data);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$response = json_decode($I->grabResponse());
$id = $response->payload->id;
$I->assertEquals('success', $response->status);
// verify
$I->sendGET('/components/' . $id);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$I->seeResponseContainsJson([
'id' => $id,
'category' => [
'id' => $data['category_id'],
'name' => $category->name,
],
'company' => [
'id' => $data['company_id'],
'name' => $company->name,
],
'location' => [
'id' => $data['location_id'],
'name' => $location->name,
],
'name' => $data['name'],
'qty' => $data['qty'],
'purchase_cost' => $data['purchase_cost'],
'purchase_date' => $data['purchase_date'],
]);
}
/** @test */
public function updateComponentWithPatch(ApiTester $I)
{
$I->wantTo('Update a component with PATCH');
// create
$component = factory(\App\Models\Component::class, 'component')->create();
$I->assertInstanceOf(\App\Models\Component::class, $component);
$data = [
'name' => $this->faker->sentence(3),
'qty' => $this->faker->randomDigit + 1,
];
$I->assertNotEquals($component->name, $data['name']);
// update
$I->sendPATCH('/components/' . $component->id, $data);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$response = json_decode($I->grabResponse());
$I->assertEquals('success', $response->status);
// verify
$I->sendGET('/components/' . $component->id);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$I->seeResponseContainsJson([
'name' => $data['name'],
'id' => $component->id,
'qty' => $data['qty'],
]);
}
/** @test */
public function updateComponentWithPut(ApiTester $I)
{
$I->wantTo('Update a component with PUT');
// create
$component = factory(\App\Models\Component::class, 'component')->create();
$I->assertInstanceOf(\App\Models\Component::class, $component);
$data = [
'name' => $this->faker->sentence(3),
];
$I->assertNotEquals($component->name, $data['name']);
// update
$I->sendPUT('/components/' . $component->id, $data);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$response = json_decode($I->grabResponse());
$I->assertEquals('success', $response->status);
// verify
$I->sendGET('/components/' . $component->id);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
$I->seeResponseContainsJson([
'name' => e($data['name']),
'id' => e($component->id),
'qty' => e($component->qty),
]);
}
/** @test */
public function deleteComponentTest(ApiTester $I)
{
$I->wantTo('Delete a component');
// create
$component = factory(\App\Models\Component::class, 'component')->create();
$I->assertInstanceOf(\App\Models\Component::class, $component);
// delete
$I->sendDELETE('/components/' . $component->id);
$I->seeResponseIsJson();
$I->seeResponseCodeIs(200);
// verify, expect a 404
$I->sendGET('/components/' . $component->id);
$I->seeResponseCodeIs(404);
// $I->seeResponseIsJson(); // @todo: response is not JSON
}
}

2
tests/api/_bootstrap.php Normal file
View file

@ -0,0 +1,2 @@
<?php
// Here you can initialize variables that will be available to your tests