From 4f73a13c6be4fb6f1052017164d97fab7dfb5f5b Mon Sep 17 00:00:00 2001 From: Andrea Bergamasco Date: Tue, 21 Feb 2017 23:25:46 +0100 Subject: [PATCH 1/2] Hotfix/translate row delete msg (#3305) * Toggles the disabled state of auto_increment_prefix To insert a prefix you had to toggle the checkbox, save the settings and reload. With this script it is immediate. Fixes #1390 * Delete asset image: made checkbox more visible Related to #3153 * Added missing translation to bootstrap table partial The "Are you sure to delete" confirmation was hardcoded. Added translation row to all locales and other small corrections to it/general lang file. --- resources/lang/ar/general.php | 1 + resources/lang/bg/general.php | 1 + resources/lang/cs/general.php | 1 + resources/lang/da/general.php | 1 + resources/lang/de/general.php | 1 + resources/lang/el/general.php | 1 + resources/lang/en-GB/general.php | 1 + resources/lang/en-ID/general.php | 1 + resources/lang/en/general.php | 1 + resources/lang/es-CO/general.php | 1 + resources/lang/es-ES/general.php | 1 + resources/lang/fa/general.php | 1 + resources/lang/fi/general.php | 1 + resources/lang/fr/general.php | 1 + resources/lang/he/general.php | 1 + resources/lang/hr/general.php | 1 + resources/lang/hu/general.php | 1 + resources/lang/id/general.php | 1 + resources/lang/it/general.php | 7 ++++--- resources/lang/ja/general.php | 1 + resources/lang/ko/general.php | 1 + resources/lang/lt/general.php | 1 + resources/lang/ms/general.php | 1 + resources/lang/nl/general.php | 1 + resources/lang/no/general.php | 1 + resources/lang/pl/general.php | 1 + resources/lang/pt-BR/general.php | 1 + resources/lang/pt-PT/general.php | 1 + resources/lang/ro/general.php | 1 + resources/lang/ru/general.php | 1 + resources/lang/sv-SE/general.php | 1 + resources/lang/th/general.php | 1 + resources/lang/tr/general.php | 1 + resources/lang/vi/general.php | 1 + resources/lang/zh-CN/general.php | 1 + resources/lang/zh-TW/general.php | 1 + resources/views/partials/bootstrap-table.blade.php | 2 +- 37 files changed, 40 insertions(+), 4 deletions(-) diff --git a/resources/lang/ar/general.php b/resources/lang/ar/general.php index 08e3535343..a3daa8f6b8 100644 --- a/resources/lang/ar/general.php +++ b/resources/lang/ar/general.php @@ -158,6 +158,7 @@ 'status' => 'الحالة', 'supplier' => 'Supplier', 'suppliers' => 'الموردون', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => 'Submit', 'target' => 'Target', 'total_assets' => 'إجمالي الأصول', diff --git a/resources/lang/bg/general.php b/resources/lang/bg/general.php index 23a831c5fd..2b43936e01 100644 --- a/resources/lang/bg/general.php +++ b/resources/lang/bg/general.php @@ -158,6 +158,7 @@ 'status' => 'Статус', 'supplier' => 'Supplier', 'suppliers' => 'Доставчици', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => 'Submit', 'target' => 'Target', 'total_assets' => 'общо активи', diff --git a/resources/lang/cs/general.php b/resources/lang/cs/general.php index 57e8f3bff4..a3b8be5795 100644 --- a/resources/lang/cs/general.php +++ b/resources/lang/cs/general.php @@ -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í', diff --git a/resources/lang/da/general.php b/resources/lang/da/general.php index 6e596d49c6..ef3ea52955 100644 --- a/resources/lang/da/general.php +++ b/resources/lang/da/general.php @@ -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', diff --git a/resources/lang/de/general.php b/resources/lang/de/general.php index bdb0b6319e..717361568f 100644 --- a/resources/lang/de/general.php +++ b/resources/lang/de/general.php @@ -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', diff --git a/resources/lang/el/general.php b/resources/lang/el/general.php index e77e73bad4..2a97647aa9 100644 --- a/resources/lang/el/general.php +++ b/resources/lang/el/general.php @@ -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', diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php index 69df7ea30b..2e116783c4 100644 --- a/resources/lang/en-GB/general.php +++ b/resources/lang/en-GB/general.php @@ -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', diff --git a/resources/lang/en-ID/general.php b/resources/lang/en-ID/general.php index 1f7ad27819..f44e4ab401 100644 --- a/resources/lang/en-ID/general.php +++ b/resources/lang/en-ID/general.php @@ -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', diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index e77e73bad4..921b956f6e 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -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', diff --git a/resources/lang/es-CO/general.php b/resources/lang/es-CO/general.php index 7d39320356..f12813941a 100644 --- a/resources/lang/es-CO/general.php +++ b/resources/lang/es-CO/general.php @@ -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', diff --git a/resources/lang/es-ES/general.php b/resources/lang/es-ES/general.php index 7d39320356..42592adfc7 100644 --- a/resources/lang/es-ES/general.php +++ b/resources/lang/es-ES/general.php @@ -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', diff --git a/resources/lang/fa/general.php b/resources/lang/fa/general.php index ad99023e4f..370c1f9c97 100644 --- a/resources/lang/fa/general.php +++ b/resources/lang/fa/general.php @@ -162,6 +162,7 @@ 'status' => 'وضعیت', 'supplier' => 'Supplier', 'suppliers' => 'تامین کننده', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => 'Submit', 'target' => 'Target', 'total_assets' => 'کل دارایی', diff --git a/resources/lang/fi/general.php b/resources/lang/fi/general.php index fcf006c97b..370ead063d 100644 --- a/resources/lang/fi/general.php +++ b/resources/lang/fi/general.php @@ -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ä', diff --git a/resources/lang/fr/general.php b/resources/lang/fr/general.php index efa32d2840..2945915dc7 100644 --- a/resources/lang/fr/general.php +++ b/resources/lang/fr/general.php @@ -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', diff --git a/resources/lang/he/general.php b/resources/lang/he/general.php index e77e73bad4..921b956f6e 100644 --- a/resources/lang/he/general.php +++ b/resources/lang/he/general.php @@ -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', diff --git a/resources/lang/hr/general.php b/resources/lang/hr/general.php index e77e73bad4..921b956f6e 100644 --- a/resources/lang/hr/general.php +++ b/resources/lang/hr/general.php @@ -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', diff --git a/resources/lang/hu/general.php b/resources/lang/hu/general.php index dc2d7176ba..dcc4d496e9 100644 --- a/resources/lang/hu/general.php +++ b/resources/lang/hu/general.php @@ -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', diff --git a/resources/lang/id/general.php b/resources/lang/id/general.php index 4defe14bd2..2cbf516925 100644 --- a/resources/lang/id/general.php +++ b/resources/lang/id/general.php @@ -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', diff --git a/resources/lang/it/general.php b/resources/lang/it/general.php index 36d1bfcb89..459d9cf03f 100644 --- a/resources/lang/it/general.php +++ b/resources/lang/it/general.php @@ -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.', ]; diff --git a/resources/lang/ja/general.php b/resources/lang/ja/general.php index a435189f39..b1c35d6fe6 100644 --- a/resources/lang/ja/general.php +++ b/resources/lang/ja/general.php @@ -158,6 +158,7 @@ 'status' => 'ステータス', 'supplier' => 'Supplier', 'suppliers' => '仕入先', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => 'Submit', 'target' => 'Target', 'total_assets' => '資産の合計', diff --git a/resources/lang/ko/general.php b/resources/lang/ko/general.php index 30663a7531..d83d2984cc 100644 --- a/resources/lang/ko/general.php +++ b/resources/lang/ko/general.php @@ -158,6 +158,7 @@ 'status' => '상태', 'supplier' => '공급자', 'suppliers' => '공급자', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => '제출', 'target' => 'Target', 'total_assets' => '총 자산', diff --git a/resources/lang/lt/general.php b/resources/lang/lt/general.php index ba1699a05c..a615a61bda 100644 --- a/resources/lang/lt/general.php +++ b/resources/lang/lt/general.php @@ -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', diff --git a/resources/lang/ms/general.php b/resources/lang/ms/general.php index 89e42e4267..174607ed69 100644 --- a/resources/lang/ms/general.php +++ b/resources/lang/ms/general.php @@ -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', diff --git a/resources/lang/nl/general.php b/resources/lang/nl/general.php index 703e040ac2..9c7bdfd623 100644 --- a/resources/lang/nl/general.php +++ b/resources/lang/nl/general.php @@ -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', diff --git a/resources/lang/no/general.php b/resources/lang/no/general.php index 6bfc815ce4..05a612e83a 100644 --- a/resources/lang/no/general.php +++ b/resources/lang/no/general.php @@ -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', diff --git a/resources/lang/pl/general.php b/resources/lang/pl/general.php index 4c42b5f102..69ef357ea8 100644 --- a/resources/lang/pl/general.php +++ b/resources/lang/pl/general.php @@ -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', diff --git a/resources/lang/pt-BR/general.php b/resources/lang/pt-BR/general.php index ffc959066c..8fb33ee0e5 100644 --- a/resources/lang/pt-BR/general.php +++ b/resources/lang/pt-BR/general.php @@ -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', diff --git a/resources/lang/pt-PT/general.php b/resources/lang/pt-PT/general.php index 5d54757304..526d5583c8 100644 --- a/resources/lang/pt-PT/general.php +++ b/resources/lang/pt-PT/general.php @@ -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', diff --git a/resources/lang/ro/general.php b/resources/lang/ro/general.php index 5e7a8c82e8..c04220a6fc 100644 --- a/resources/lang/ro/general.php +++ b/resources/lang/ro/general.php @@ -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', diff --git a/resources/lang/ru/general.php b/resources/lang/ru/general.php index 98907f890a..212db91da6 100644 --- a/resources/lang/ru/general.php +++ b/resources/lang/ru/general.php @@ -158,6 +158,7 @@ 'status' => 'Статус', 'supplier' => 'Supplier', 'suppliers' => 'Поставщики', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => 'Submit', 'target' => 'Target', 'total_assets' => 'Всего активов', diff --git a/resources/lang/sv-SE/general.php b/resources/lang/sv-SE/general.php index eb33d961ee..03e355ef66 100644 --- a/resources/lang/sv-SE/general.php +++ b/resources/lang/sv-SE/general.php @@ -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', diff --git a/resources/lang/th/general.php b/resources/lang/th/general.php index fcb750de43..35a43c1554 100644 --- a/resources/lang/th/general.php +++ b/resources/lang/th/general.php @@ -158,6 +158,7 @@ 'status' => 'สถานะ', 'supplier' => 'Supplier', 'suppliers' => 'ตัวแทนจำหน่าย', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => 'Submit', 'target' => 'Target', 'total_assets' => 'ทรัพย์สินทั้งหมด', diff --git a/resources/lang/tr/general.php b/resources/lang/tr/general.php index b0cfec33a9..8b6879cb51 100644 --- a/resources/lang/tr/general.php +++ b/resources/lang/tr/general.php @@ -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', diff --git a/resources/lang/vi/general.php b/resources/lang/vi/general.php index e77f90f8bf..fc20d96b5c 100644 --- a/resources/lang/vi/general.php +++ b/resources/lang/vi/general.php @@ -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', diff --git a/resources/lang/zh-CN/general.php b/resources/lang/zh-CN/general.php index a4bfc49d93..56d18d7284 100644 --- a/resources/lang/zh-CN/general.php +++ b/resources/lang/zh-CN/general.php @@ -158,6 +158,7 @@ 'status' => '状态', 'supplier' => '供应商', 'suppliers' => '供应商', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => '提交', 'target' => 'Target', 'total_assets' => '共计资产', diff --git a/resources/lang/zh-TW/general.php b/resources/lang/zh-TW/general.php index d5243cb02b..2e12797832 100644 --- a/resources/lang/zh-TW/general.php +++ b/resources/lang/zh-TW/general.php @@ -158,6 +158,7 @@ 'status' => '狀態', 'supplier' => '供應商', 'suppliers' => '供應商', + 'sure_to_delete' => 'Are you sure you wish to delete', 'submit' => '送出', 'target' => 'Target', 'total_assets' => '總資產', diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index fcedca3070..d645cb0e65 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -128,7 +128,7 @@ $('.snipe-table').bootstrapTable({ actions += '' + ''; } From fde46251deffc85276ec08f1a20c8907da9efb4d Mon Sep 17 00:00:00 2001 From: Andrea Bergamasco Date: Tue, 21 Feb 2017 23:26:46 +0100 Subject: [PATCH 2/2] Components Assets view + stubbed API tests (#3325) * Toggles the disabled state of auto_increment_prefix To insert a prefix you had to toggle the checkbox, save the settings and reload. With this script it is immediate. Fixes #1390 * Delete asset image: made checkbox more visible Related to #3153 * Added personal-access-token component * Created basic API testing configuration * First version of /components endpoind cest * On-the-fly bearer token generation * Completed testing of PATCH and PUT methods * Added /components/{id}/assets route with tests * Updated route and dataTable in view * Completed test assertion * Added links to assets in ComponentsAssets view * Linked Company in AssetView page --- .../Controllers/Api/ComponentsController.php | 24 +++ .../ComponentsAssetsTransformer.php | 54 ++++++ resources/views/components/view.blade.php | 4 +- resources/views/hardware/view.blade.php | 2 +- resources/views/settings/api.blade.php | 3 + routes/api.php | 5 + tests/_support/ApiTester.php | 46 +++++ tests/_support/Helper/Api.php | 10 + tests/api.suite.yml | 13 ++ tests/api/ApiComponentsAssetsCest.php | 59 ++++++ tests/api/ApiComponentsCest.php | 182 ++++++++++++++++++ tests/api/_bootstrap.php | 2 + 12 files changed, 401 insertions(+), 3 deletions(-) create mode 100644 app/Http/Transformers/ComponentsAssetsTransformer.php create mode 100644 tests/_support/ApiTester.php create mode 100644 tests/_support/Helper/Api.php create mode 100644 tests/api.suite.yml create mode 100644 tests/api/ApiComponentsAssetsCest.php create mode 100644 tests/api/ApiComponentsCest.php create mode 100644 tests/api/_bootstrap.php diff --git a/app/Http/Controllers/Api/ComponentsController.php b/app/Http/Controllers/Api/ComponentsController.php index 3194d40c77..e10f1c7b7f 100644 --- a/app/Http/Controllers/Api/ComponentsController.php +++ b/app/Http/Controllers/Api/ComponentsController.php @@ -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); + } } diff --git a/app/Http/Transformers/ComponentsAssetsTransformer.php b/app/Http/Transformers/ComponentsAssetsTransformer.php new file mode 100644 index 0000000000..65054b4209 --- /dev/null +++ b/app/Http/Transformers/ComponentsAssetsTransformer.php @@ -0,0 +1,54 @@ +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); + } +} diff --git a/resources/views/components/view.blade.php b/resources/views/components/view.blade.php index 18c327db0d..5b1f96198d 100644 --- a/resources/views/components/view.blade.php +++ b/resources/views/components/view.blade.php @@ -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') }}" > - {{ trans('general.asset') }} + {{ trans('general.asset') }} {{ trans('general.qty') }} {{ trans('general.date') }} diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 2812cebcd3..ad7b2795fb 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -84,7 +84,7 @@ @if ($asset->company) {{ trans('general.company') }} - {{ $asset->company->name }} + {{ $asset->company->name }} @endif diff --git a/resources/views/settings/api.blade.php b/resources/views/settings/api.blade.php index f176921faf..ae66bcfe43 100644 --- a/resources/views/settings/api.blade.php +++ b/resources/views/settings/api.blade.php @@ -11,6 +11,9 @@ @if (!config('app.lock_passwords')) + @if(env('APP_ENV') != 'production') + + @endif @else

{{ trans('general.feature_disabled') }}

@endif diff --git a/routes/api.php b/routes/api.php index de210c1325..3e534d76ad 100644 --- a/routes/api.php +++ b/routes/api.php @@ -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' => diff --git a/tests/_support/ApiTester.php b/tests/_support/ApiTester.php new file mode 100644 index 0000000000..c53fda8f8a --- /dev/null +++ b/tests/_support/ApiTester.php @@ -0,0 +1,46 @@ +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; + } +} diff --git a/tests/_support/Helper/Api.php b/tests/_support/Helper/Api.php new file mode 100644 index 0000000000..7a4621e854 --- /dev/null +++ b/tests/_support/Helper/Api.php @@ -0,0 +1,10 @@ +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'), + ], + ] + ]); + } +} diff --git a/tests/api/ApiComponentsCest.php b/tests/api/ApiComponentsCest.php new file mode 100644 index 0000000000..a0b311142d --- /dev/null +++ b/tests/api/ApiComponentsCest.php @@ -0,0 +1,182 @@ +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 + } +} diff --git a/tests/api/_bootstrap.php b/tests/api/_bootstrap.php new file mode 100644 index 0000000000..8a88555806 --- /dev/null +++ b/tests/api/_bootstrap.php @@ -0,0 +1,2 @@ +