snipe-it/tests/Unit/PermissionsTest.php

511 lines
17 KiB
PHP
Raw Normal View History

Discussion: Moving to policies for controller based authorization (#3080) * Make delete routes work. We put a little form in the modal that spoofs the delete field. * Fix route on creating a user. * Fix redundant id parameter. * Port acceptance tests to new urls. * Initial work on migrating to model based policies instead of global gates. Will allow for much more detailed permissions bits in the future. * This needs to stay for the dashboard checks. * Add user states for permissions to build tests. * Build up unit tests for gates/permissions. Move accessories/consumables/assets to policies instead of in authserviceprovider * Migrate various locations to new syntax. Update test to be more specific * Fix functional tests. Add an artisan command for installing a settings setup on travis-ci * Try a different id... Need to come up with a better way of passing the id for tests that need an existing one. * Try to fix travis * Update urls to use routes and not hardcode old paths. Also fix some migration errors found along the way.: * Add a environment for travis functional tests. * Adjust config file to make travis use it. * Use redirect()->route instead of redirect()-to * Dump all failures in the output directory if travis fails. * Cleanups and minor fixes. * Adjust the supplier modelfactory to comply with new validation restrictions. * Some test fixes. * Locales can be longer than 5 characters according to faker... fex gez_ET. Increase lenght in mysql and add a validation * Update test database dump to latest migrations.
2016-12-19 11:04:28 -08:00
<?php
namespace Tests\Unit;
Discussion: Moving to policies for controller based authorization (#3080) * Make delete routes work. We put a little form in the modal that spoofs the delete field. * Fix route on creating a user. * Fix redundant id parameter. * Port acceptance tests to new urls. * Initial work on migrating to model based policies instead of global gates. Will allow for much more detailed permissions bits in the future. * This needs to stay for the dashboard checks. * Add user states for permissions to build tests. * Build up unit tests for gates/permissions. Move accessories/consumables/assets to policies instead of in authserviceprovider * Migrate various locations to new syntax. Update test to be more specific * Fix functional tests. Add an artisan command for installing a settings setup on travis-ci * Try a different id... Need to come up with a better way of passing the id for tests that need an existing one. * Try to fix travis * Update urls to use routes and not hardcode old paths. Also fix some migration errors found along the way.: * Add a environment for travis functional tests. * Adjust config file to make travis use it. * Use redirect()->route instead of redirect()-to * Dump all failures in the output directory if travis fails. * Cleanups and minor fixes. * Adjust the supplier modelfactory to comply with new validation restrictions. * Some test fixes. * Locales can be longer than 5 characters according to faker... fex gez_ET. Increase lenght in mysql and add a validation * Update test database dump to latest migrations.
2016-12-19 11:04:28 -08:00
use App\Models\Accessory;
use App\Models\Asset;
use App\Models\Component;
use App\Models\Consumable;
use App\Models\License;
use App\Models\User;
2023-03-07 16:57:55 -08:00
use Tests\TestCase;
Discussion: Moving to policies for controller based authorization (#3080) * Make delete routes work. We put a little form in the modal that spoofs the delete field. * Fix route on creating a user. * Fix redundant id parameter. * Port acceptance tests to new urls. * Initial work on migrating to model based policies instead of global gates. Will allow for much more detailed permissions bits in the future. * This needs to stay for the dashboard checks. * Add user states for permissions to build tests. * Build up unit tests for gates/permissions. Move accessories/consumables/assets to policies instead of in authserviceprovider * Migrate various locations to new syntax. Update test to be more specific * Fix functional tests. Add an artisan command for installing a settings setup on travis-ci * Try a different id... Need to come up with a better way of passing the id for tests that need an existing one. * Try to fix travis * Update urls to use routes and not hardcode old paths. Also fix some migration errors found along the way.: * Add a environment for travis functional tests. * Adjust config file to make travis use it. * Use redirect()->route instead of redirect()-to * Dump all failures in the output directory if travis fails. * Cleanups and minor fixes. * Adjust the supplier modelfactory to comply with new validation restrictions. * Some test fixes. * Locales can be longer than 5 characters according to faker... fex gez_ET. Increase lenght in mysql and add a validation * Update test database dump to latest migrations.
2016-12-19 11:04:28 -08:00
2023-03-07 16:57:55 -08:00
class PermissionsTest extends TestCase
Discussion: Moving to policies for controller based authorization (#3080) * Make delete routes work. We put a little form in the modal that spoofs the delete field. * Fix route on creating a user. * Fix redundant id parameter. * Port acceptance tests to new urls. * Initial work on migrating to model based policies instead of global gates. Will allow for much more detailed permissions bits in the future. * This needs to stay for the dashboard checks. * Add user states for permissions to build tests. * Build up unit tests for gates/permissions. Move accessories/consumables/assets to policies instead of in authserviceprovider * Migrate various locations to new syntax. Update test to be more specific * Fix functional tests. Add an artisan command for installing a settings setup on travis-ci * Try a different id... Need to come up with a better way of passing the id for tests that need an existing one. * Try to fix travis * Update urls to use routes and not hardcode old paths. Also fix some migration errors found along the way.: * Add a environment for travis functional tests. * Adjust config file to make travis use it. * Use redirect()->route instead of redirect()-to * Dump all failures in the output directory if travis fails. * Cleanups and minor fixes. * Adjust the supplier modelfactory to comply with new validation restrictions. * Some test fixes. * Locales can be longer than 5 characters according to faker... fex gez_ET. Increase lenght in mysql and add a validation * Update test database dump to latest migrations.
2016-12-19 11:04:28 -08:00
{
// public function _before()
// {
// parent::_before();
// $this->noHardware = [
// 'assets.view' => false,
// 'assets.create' => false,
// 'assets.edit' => false,
// 'assets.delete' => false,
// ];
// $this->noLicenses = [
// 'licenses.view' => false,
// 'licenses.create' => false,
// 'licenses.edit' => false,
// 'licenses.delete' => false,
// ];
// $this->noAccessories = [
// 'accessories.view' => false,
// 'accessories.create' => false,
// 'accessories.edit' => false,
// 'accessories.delete' => false,
// ];
// $this->noConsumables = [
// 'consumables.view' => false,
// 'consumables.create' => false,
// 'consumables.edit' => false,
// 'consumables.delete' => false,
// ];
// $this->noComponents = [
// 'components.view' => false,
// 'components.create' => false,
// 'components.edit' => false,
// 'components.delete' => false,
// ];
// $this->noUsers = [
// 'users.view' => false,
// 'users.create' => false,
// 'users.edit' => false,
// 'users.delete' => false,
// ];
// }
// private $noHardware;
// private $noLicenses;
// private $noAccessories;
// private $noConsumables;
// private $noComponents;
// private $noUsers;
// // tests
// /**
// * @test
// */
// public function a_user_with_no_permissions_sees_nothing()
// {
// $u = \App\Models\User::factory()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// // $permissions = $this->noHardware;
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_view_asset_permissions_can_view_assets()
// {
// $u = \App\Models\User::factory()->viewAssets()->create();
// $permissions = $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'assets.view' => true,
// 'assets.create' => false,
// 'assets.edit' => false,
// 'assets.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_create_asset_permissions_can_create_assets()
// {
// $u = \App\Models\User::factory()->createAssets()->create();
// $permissions = $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'assets.view' => false,
// 'assets.create' => true,
// 'assets.edit' => false,
// 'assets.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_edit_assets_permissions_can_edit_assets()
// {
// $u = \App\Models\User::factory()->editAssets()->create();
// $permissions = $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'assets.view' => false,
// 'assets.create' => false,
// 'assets.edit' => true,
// 'assets.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_delete_assets_permissions_can_delete_assets()
// {
// $u = \App\Models\User::factory()->deleteAssets()->create();
// $permissions = $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'assets.view' => false,
// 'assets.create' => false,
// 'assets.edit' => false,
// 'assets.delete' => true,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_view_licenses_permissions_can_view_licenses()
// {
// $u = \App\Models\User::factory()->viewLicenses()->create();
// $permissions = $this->noHardware + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'licenses.view' => true,
// 'licenses.create' => false,
// 'licenses.edit' => false,
// 'licenses.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_create_licenses_permissions_can_create_licenses()
// {
// $u = \App\Models\User::factory()->createLicenses()->create();
// $permissions = $this->noHardware + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'licenses.view' => false,
// 'licenses.create' => true,
// 'licenses.edit' => false,
// 'licenses.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_edit_licenses_permissions_can_edit_licenses()
// {
// $u = \App\Models\User::factory()->editLicenses()->create();
// $permissions = $this->noHardware + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'licenses.view' => false,
// 'licenses.create' => false,
// 'licenses.edit' => true,
// 'licenses.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_delete_licenses_permissions_can_delete_licenses()
// {
// $u = \App\Models\User::factory()->deleteLicenses()->create();
// $permissions = $this->noHardware + $this->noAccessories + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'licenses.view' => false,
// 'licenses.create' => false,
// 'licenses.edit' => false,
// 'licenses.delete' => true,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_view_accessories_permissions_can_view_accessories()
// {
// $u = \App\Models\User::factory()->viewAccessories()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'accessories.view' => true,
// 'accessories.create' => false,
// 'accessories.edit' => false,
// 'accessories.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_create_accessories_permissions_can_create_accessories()
// {
// $u = \App\Models\User::factory()->createAccessories()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'accessories.view' => false,
// 'accessories.create' => true,
// 'accessories.edit' => false,
// 'accessories.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_edit_accessories_permissions_can_edit_accessories()
// {
// $u = \App\Models\User::factory()->editAccessories()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'accessories.view' => false,
// 'accessories.create' => false,
// 'accessories.edit' => true,
// 'accessories.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_delete_accessories_permissions_can_delete_accessories()
// {
// $u = \App\Models\User::factory()->deleteAccessories()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'accessories.view' => false,
// 'accessories.create' => false,
// 'accessories.edit' => false,
// 'accessories.delete' => true,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_view_consumables_permissions_can_view_consumables()
// {
// $u = \App\Models\User::factory()->viewConsumables()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'consumables.view' => true,
// 'consumables.create' => false,
// 'consumables.edit' => false,
// 'consumables.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_create_consumables_permissions_can_create_consumables()
// {
// $u = \App\Models\User::factory()->createConsumables()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noConsumables + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'consumables.view' => false,
// 'consumables.create' => true,
// 'consumables.edit' => false,
// 'consumables.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_edit_consumables_permissions_can_edit_consumables()
// {
// $u = \App\Models\User::factory()->editConsumables()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'consumables.view' => false,
// 'consumables.create' => false,
// 'consumables.edit' => true,
// 'consumables.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_delete_consumables_permissions_can_delete_consumables()
// {
// $u = \App\Models\User::factory()->deleteConsumables()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noComponents + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'consumables.view' => false,
// 'consumables.create' => false,
// 'consumables.edit' => false,
// 'consumables.delete' => true,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_view_users_permissions_can_view_users()
// {
// $u = \App\Models\User::factory()->viewUsers()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents;
// $permissions = array_merge($permissions, [
// 'users.view' => true,
// 'users.create' => false,
// 'users.edit' => false,
// 'users.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_create_users_permissions_can_create_users()
// {
// $u = \App\Models\User::factory()->createUsers()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents;
// $permissions = array_merge($permissions, [
// 'users.view' => false,
// 'users.create' => true,
// 'users.edit' => false,
// 'users.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_edit_users_permissions_can_edit_users()
// {
// $u = \App\Models\User::factory()->editUsers()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents;
// $permissions = array_merge($permissions, [
// 'users.view' => false,
// 'users.create' => false,
// 'users.edit' => true,
// 'users.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_delete_users_permissions_can_delete_users()
// {
// $u = \App\Models\User::factory()->deleteUsers()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noComponents;
// $permissions = array_merge($permissions, [
// 'users.view' => false,
// 'users.create' => false,
// 'users.edit' => false,
// 'users.delete' => true,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_view_components_permissions_can_view_components()
// {
// $u = \App\Models\User::factory()->viewComponents()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'components.view' => true,
// 'components.create' => false,
// 'components.edit' => false,
// 'components.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_create_components_permissions_can_create_components()
// {
// $u = \App\Models\User::factory()->createComponents()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'components.view' => false,
// 'components.create' => true,
// 'components.edit' => false,
// 'components.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_edit_components_permissions_can_edit_components()
// {
// $u = \App\Models\User::factory()->editComponents()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'components.view' => false,
// 'components.create' => false,
// 'components.edit' => true,
// 'components.delete' => false,
// ]);
// $this->hitRoutes($permissions, $u);
// }
// /**
// * @test
// */
// public function a_user_with_delete_components_permissions_can_delete_components()
// {
// $u = \App\Models\User::factory()->deleteComponents()->create();
// $permissions = $this->noHardware + $this->noLicenses + $this->noAccessories + $this->noConsumables + $this->noUsers;
// $permissions = array_merge($permissions, [
// 'components.view' => false,
// 'components.create' => false,
// 'components.edit' => false,
// 'components.delete' => true,
// ]);
// // dd($u);
// $this->hitRoutes($permissions, $u);
// }
// private function hitRoutes(array $routes, User $user)
// {
// foreach ($routes as $route => $expectation) {
// $this->assertEquals($user->hasAccess($route), $expectation);
// }
// }
Discussion: Moving to policies for controller based authorization (#3080) * Make delete routes work. We put a little form in the modal that spoofs the delete field. * Fix route on creating a user. * Fix redundant id parameter. * Port acceptance tests to new urls. * Initial work on migrating to model based policies instead of global gates. Will allow for much more detailed permissions bits in the future. * This needs to stay for the dashboard checks. * Add user states for permissions to build tests. * Build up unit tests for gates/permissions. Move accessories/consumables/assets to policies instead of in authserviceprovider * Migrate various locations to new syntax. Update test to be more specific * Fix functional tests. Add an artisan command for installing a settings setup on travis-ci * Try a different id... Need to come up with a better way of passing the id for tests that need an existing one. * Try to fix travis * Update urls to use routes and not hardcode old paths. Also fix some migration errors found along the way.: * Add a environment for travis functional tests. * Adjust config file to make travis use it. * Use redirect()->route instead of redirect()-to * Dump all failures in the output directory if travis fails. * Cleanups and minor fixes. * Adjust the supplier modelfactory to comply with new validation restrictions. * Some test fixes. * Locales can be longer than 5 characters according to faker... fex gez_ET. Increase lenght in mysql and add a validation * Update test database dump to latest migrations.
2016-12-19 11:04:28 -08:00
}