Commit de9ab079 authored by Vipul Basapati's avatar Vipul Basapati

Added Backend Tests, User Form tests are failing

parent 21655760
......@@ -26,9 +26,22 @@ class StoreRoleRequest extends Request
*/
public function rules()
{
$permissions = '';
if($this->associated_permissions != 'all') {
$permissions = 'required';
}
return [
'name' => 'required|max:191',
'permissions' => 'required',
'permissions' => $permissions,
];
}
public function messages()
{
return [
'permissions.required' => 'You must select at least one permission for this role.'
];
}
}
......@@ -26,9 +26,22 @@ class UpdateRoleRequest extends Request
*/
public function rules()
{
$permissions = '';
if($this->associated_permissions != 'all') {
$permissions = 'required';
}
return [
'name' => 'required|max:191',
'permissions' => 'required',
'permissions' => $permissions,
];
}
public function messages()
{
return [
'permissions.required' => 'You must select at least one permission for this role.'
];
}
}
......@@ -69,7 +69,7 @@ class RoleRepository extends BaseRepository
}
//See if the role has all access
$all = $input['associated-permissions'] == 'all' ? true : false;
$all = $input['associated_permissions'] == 'all' ? true : false;
if (!isset($input['permissions'])) {
$input['permissions'] = [];
......@@ -133,7 +133,7 @@ class RoleRepository extends BaseRepository
if ($role->id == 1) {
$all = true;
} else {
$all = $input['associated-permissions'] == 'all' ? true : false;
$all = $input['associated_permissions'] == 'all' ? true : false;
}
if (!isset($input['permissions'])) {
......@@ -190,13 +190,13 @@ class RoleRepository extends BaseRepository
}
/**
* @param Model $role
* @param Role $role
*
* @throws GeneralException
*
* @return bool
*/
public function delete(Model $role)
public function delete(Role $role)
{
//Would be stupid to delete the administrator role
if ($role->id == 1) { //id is 1 because of the seeder
......
......@@ -1367,16 +1367,16 @@
},
{
"name": "laravel/framework",
"version": "v5.5.26",
"version": "v5.5.27",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "d7e6a7aab600c5cfae595ea22074ac3c536cbc28"
"reference": "b4fb6eeb227b7327b4ca7f92263b693ec9ac9875"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/d7e6a7aab600c5cfae595ea22074ac3c536cbc28",
"reference": "d7e6a7aab600c5cfae595ea22074ac3c536cbc28",
"url": "https://api.github.com/repos/laravel/framework/zipball/b4fb6eeb227b7327b4ca7f92263b693ec9ac9875",
"reference": "b4fb6eeb227b7327b4ca7f92263b693ec9ac9875",
"shasum": ""
},
"require": {
......@@ -1497,7 +1497,7 @@
"framework",
"laravel"
],
"time": "2017-12-18T14:15:59+00:00"
"time": "2017-12-20T15:43:48+00:00"
},
{
"name": "laravel/socialite",
......@@ -5100,16 +5100,16 @@
},
{
"name": "sebastian/comparator",
"version": "2.1.0",
"version": "2.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "1174d9018191e93cb9d719edec01257fc05f8158"
"reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1174d9018191e93cb9d719edec01257fc05f8158",
"reference": "1174d9018191e93cb9d719edec01257fc05f8158",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b11c729f95109b56a0fe9650c6a63a0fcd8c439f",
"reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f",
"shasum": ""
},
"require": {
......@@ -5160,7 +5160,7 @@
"compare",
"equality"
],
"time": "2017-11-03T07:16:52+00:00"
"time": "2017-12-22T14:50:35+00:00"
},
{
"name": "sebastian/diff",
......
......@@ -58,7 +58,7 @@ $factory->define(Role::class, function (Generator $faker) {
return [
'name' => $faker->name,
'all' => 0,
'sort' => $faker->numberBetween(1, 100),
'sort' => $faker->numberBetween(1, 100)
];
});
......
......@@ -30,5 +30,13 @@
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="SCOUT_DRIVER" value="null"/>
</php>
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">
./tests
</directory>
</testsuite>
</testsuites>
</phpunit>
var associated = $("select[name='associated-permissions']");
var associated = $("select[name='associated_permissions']");
var associated_container = $("#available-permissions");
if (associated.val() == "custom")
......
{
"/js/frontend.js": "/js/frontend.945469bbbc12df3ad9e1.js",
"/js/backend.js": "/js/backend.79d9e4698dadbc0d93c7.js",
"/js/frontend.js": "/js/frontend.73cf49d8b6d18a5a1c25.js",
"/js/backend.js": "/js/backend.0793752cf3fad02356e8.js",
"/mix.js": "/mix.247ab120fe7680658924.js",
"/css/frontend.css": "/css/frontend.3af0a6cbd7d1d8d042f2a37e97008b7c.css",
"/css/backend.css": "/css/backend.f8550f50504e5b8ef6055285205f223a.css",
"/css/backend-custom.css": "/css/backend-custom.18e74fbe4c755b817a022d6d3d4e76b1.css",
"/js/backend-custom.js": "/js/backend-custom.e6ea05e1824d0dd8e7c62027c135b7f2.js",
"/js/dataTable.js": "/js/dataTable.f968d300a6a0b871f138f114361259c8.js"
"/css/backend.css": "/css/backend.36a92480e1e31ce01581619e88309999.css",
"/css/backend-custom.css": "/css/backend-custom.a20fa78977f121da31678989a7c7c7f7.css",
"/js/backend-custom.js": "/js/backend-custom.4b0f464c2fe057f6bfb98b866af195d3.js",
"/js/dataTable.js": "/js/dataTable.e95e7044bc17a1973f8ca0b22b65c5dd.js"
}
\ No newline at end of file
......@@ -31,10 +31,10 @@
</div><!--form control-->
<div class="form-group">
{{ Form::label('associated-permissions', trans('validation.attributes.backend.access.roles.associated_permissions'), ['class' => 'col-lg-2 control-label']) }}
{{ Form::label('associated_permissions', trans('validation.attributes.backend.access.roles.associated_permissions'), ['class' => 'col-lg-2 control-label']) }}
<div class="col-lg-10">
{{ Form::select('associated-permissions', array('all' => trans('labels.general.all'), 'custom' => trans('labels.general.custom')), 'all', ['class' => 'form-control select2 box-size']) }}
{{ Form::select('associated_permissions', array('all' => trans('labels.general.all'), 'custom' => trans('labels.general.custom')), 'all', ['class' => 'form-control select2 box-size']) }}
<div id="available-permissions" class="hidden mt-20" style="width: 700px; height: 200px; overflow-x: hidden; overflow-y: scroll;">
<div class="row">
......
......@@ -31,15 +31,10 @@
</div><!--form control-->
<div class="form-group">
{{ Form::label('associated-permissions', trans('validation.attributes.backend.access.roles.associated_permissions'), ['class' => 'col-lg-2 control-label']) }}
{{ Form::label('associated_permissions', trans('validation.attributes.backend.access.roles.associated_permissions'), ['class' => 'col-lg-2 control-label']) }}
<div class="col-lg-10">
@if ($role->id != 1)
{{-- Administrator has to be set to all --}}
{{ Form::select('associated-permissions', ['all' => 'All', 'custom' => 'Custom'], $role->all ? 'all' : 'custom', ['class' => 'form-control select2 box-size']) }}
@else
<span class="label label-success">{{ trans('labels.general.all') }}</span>
@endif
{{ Form::select('associated_permissions', ['all' => 'All', 'custom' => 'Custom'], $role->all ? 'all' : 'custom', ['class' => 'form-control select2 box-size']) }}
<div id="available-permissions" class="hidden mt-20" style="width: 700px; height: 200px; overflow-x: hidden; overflow-y: scroll;">
<div class="row">
......
......@@ -120,7 +120,7 @@
@foreach($roles as $role)
<div>
<label for="role-{{$role->id}}" class="control control--radio">
<input type="radio" value="{{$role->id}}" name="assignees_roles[]" id="role-{{$role->id}}" class="get-role-for-permissions" /> &nbsp;&nbsp;{!! $role->name !!}
<input type="radio" value="{{$role->id}}" name="assignees_roles[]" id="role-{{$role->id}}" class="get-role-for-permissions" {{ $role->id == 3 ? 'checked' : '' }} /> &nbsp;&nbsp;{!! $role->name !!}
<div class="control__indicator"></div>
<a href="#" data-role="role_{{ $role->id }}" class="show-permissions small">
(
......@@ -220,6 +220,7 @@
});
});
$("#role-3").click();
});
</script>
@endsection
<?php
use Tests\BrowserKitTestCase;
/**
* Class AccessHelperTest.
*/
class AccessHelperTest extends BrowserKitTestCase
{
public function testAccessUser()
{
$this->actingAs($this->user);
$this->assertEquals(auth()->user(), access()->user());
}
public function testAccessGuest()
{
$this->assertEquals(auth()->guest(), access()->guest());
}
public function testAccessLogout()
{
$this->actingAs($this->user);
$this->assertFalse(access()->guest());
access()->logout();
$this->assertTrue(access()->guest());
}
public function testAccessGetsUserId()
{
$this->actingAs($this->user);
$this->assertEquals(auth()->id(), access()->id());
}
public function testAccessLogsUserInById()
{
access()->loginUsingId(3);
$this->assertEquals(auth()->user(), access()->user());
}
public function testAccessHasRole()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->hasRole('Executive'));
$this->assertFalse(access()->hasRole('Administrator'));
$this->assertTrue(access()->hasRole(2));
$this->assertFalse(access()->hasRole(1));
}
public function testAdminHasAllRoles()
{
$this->actingAs($this->admin);
$this->assertTrue(access()->hasRole('Administrator'));
$this->assertTrue(access()->hasRole('Non-Existing Role'));
$this->assertTrue(access()->hasRole(1));
$this->assertTrue(access()->hasRole(123));
}
public function testAccessHasRoles()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->hasRoles(['Executive', 'User']));
$this->assertTrue(access()->hasRoles([2, 3]));
}
public function testAccessHasRolesNeedsAll()
{
$this->actingAs($this->executive);
$this->assertFalse(access()->hasRoles(['Executive', 'User'], true));
$this->assertFalse(access()->hasRoles([2, 3], true));
}
public function testAccessAllow()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->allow('view-backend'));
$this->assertTrue(access()->allow(1));
}
public function testAdminHasAllAccess()
{
$this->actingAs($this->admin);
$this->assertTrue(access()->allow('view-backend'));
$this->assertTrue(access()->allow('view-something-that-doesnt-exist'));
$this->assertTrue(access()->allow(1));
$this->assertTrue(access()->allow(123));
}
public function testAccessAllowMultiple()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->allowMultiple(['view-backend']));
$this->assertTrue(access()->allowMultiple([1]));
}
public function testAccessAllowMultipleNeedsAll()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->allowMultiple(['view-backend'], true));
$this->assertTrue(access()->allowMultiple([1], true));
}
public function testAccessHasPermission()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->hasPermission('view-backend'));
$this->assertTrue(access()->hasPermission(1));
}
public function testAccessHasPermissions()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->hasPermissions(['view-backend']));
$this->assertTrue(access()->hasPermissions([1]));
}
public function testAccessHasPermissionsNeedsAll()
{
$this->actingAs($this->executive);
$this->assertTrue(access()->hasPermissions(['view-backend'], true));
$this->assertTrue(access()->hasPermissions([1], true));
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class AccessRepositoryTest.
*/
class AccessRepositoryTest extends BrowserKitTestCase
{
public function testGetUsersByPermissionUsingName()
{
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByPermission('view-backend')
->toArray();
$this->assertCount(1, $results);
$this->assertArraySubset(['first_name' => $this->executive->first_name], $results[0]);
$this->assertArraySubset(['last_name' => $this->executive->last_name], $results[0]);
}
public function testGetUsersByPermissionsUsingNames()
{
$this->userRole->permissions()->sync([1]);
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByPermission(['view-backend'])
->toArray();
$this->assertCount(2, $results);
$this->assertArraySubset(['first_name' => $this->executive->first_name], $results[0]);
$this->assertArraySubset(['first_name' => $this->user->first_name], $results[1]);
}
public function testGetUsersByPermissionUsingId()
{
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByPermission(1, 'id')
->toArray();
$this->assertCount(1, $results);
$this->assertArraySubset(['first_name' => $this->executive->first_name], $results[0]);
}
public function testGetUsersByPermissionsUsingIds()
{
$this->userRole->permissions()->sync([1]);
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByPermission([1], 'id')
->toArray();
$this->assertCount(2, $results);
$this->assertArraySubset(['first_name' => $this->executive->first_name], $results[0]);
$this->assertArraySubset(['first_name' => $this->user->first_name], $results[1]);
}
public function testGetUsersByRoleUsingName()
{
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByRole('User')
->toArray();
$this->assertCount(1, $results);
$this->assertArraySubset(['first_name' => $this->user->first_name], $results[0]);
}
public function testGetUsersByRolesUsingNames()
{
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByRole(['User', 'Executive'])
->toArray();
$this->assertCount(2, $results);
$this->assertArraySubset(['first_name' => $this->executive->first_name], $results[0]);
$this->assertArraySubset(['first_name' => $this->user->first_name], $results[1]);
}
public function testGetUsersByRoleUsingId()
{
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByRole(1, 'id')
->toArray();
$this->assertCount(1, $results);
$this->assertArraySubset(['first_name' => $this->admin->first_name], $results[0]);
}
public function testGetUsersByRolesUsingIds()
{
$results = app()->make(\App\Repositories\Backend\Access\User\UserRepository::class)
->getByRole([1, 3], 'id')
->toArray();
$this->assertCount(2, $results);
$this->assertArraySubset(['first_name' => $this->admin->first_name], $results[0]);
$this->assertArraySubset(['first_name' => $this->user->first_name], $results[1]);
}
}
<?php
use Tests\BrowserKitTestCase;
use App\Models\Access\Permission\Permission;
class RolePermissionTest extends BrowserKitTestCase
{
public function testSavePermissionsToRole()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->permissions()->sync([1]);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testEmptyPermissionsFromRole()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->permissions()->sync([1]);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->permissions()->sync([]);
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testAttachPermissionToRoleById()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermission(1);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testAttachPermissionToRoleByObject()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermission(Permission::findOrFail(1));
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testDetachPermissionFromRoleById()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermission(1);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->detachPermission(1);
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testDetachPermissionFromRoleByObject()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermission(Permission::findOrFail(1));
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->detachPermission(Permission::findOrFail(1));
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testAttachPermissionsToRoleById()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermissions([1]);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testAttachPermissionsToRoleByObject()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermissions([Permission::findOrFail(1)]);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testDetachPermissionsFromRoleById()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermissions([1]);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->detachPermissions([1]);
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
public function testDetachPermissionsFromRoleByObject()
{
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->attachPermissions([Permission::findOrFail(1)]);
$this->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
$this->userRole->detachPermissions([Permission::findOrFail(1)]);
$this->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => $this->userRole->id]);
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class UserAccessTest.
*/
class UserAccessTest extends BrowserKitTestCase
{
public function testUserCantAccessAdminDashboard()
{
$this->visit('/')
->actingAs($this->user)
->visit('/admin/dashboard')
->seePageIs('/')
->see('You do not have access to do that.');
}
public function testExecutiveCanAccessAdminDashboard()
{
$this->visit('/')
->actingAs($this->executive)
->visit('/admin/dashboard')
->seePageIs('/admin/dashboard')
->see($this->executive->name);
}
public function testExecutiveCantAccessManageRoles()
{
$this->visit('/')
->actingAs($this->executive)
->visit('/admin/dashboard')
->seePageIs('/admin/dashboard')
->visit('/admin/access/role')
->seePageIs('/')
->see('You do not have access to do that.');
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class UserRoleTest.
*/
class UserRoleTest extends BrowserKitTestCase
{
public function testAttachRoleToUserById()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->user->attachRole($this->adminRole->id);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
}
public function testAttachRoleToUserByObject()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->user->attachRole($this->adminRole);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
}
public function testDetachRoleByIdFromUser()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->user->attachRole($this->adminRole->id);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->user->detachRole($this->adminRole->id);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
}
public function testDetachRoleByObjectFromUser()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->user->attachRole($this->adminRole);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->user->detachRole($this->adminRole);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
}
public function testAttachRolesByIdToUser()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
$this->user->attachRoles([$this->adminRole->id, $this->executiveRole->id]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
}
public function testAttachRolesByObjectToUser()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
$this->user->attachRoles([$this->adminRole, $this->executiveRole]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
}
public function testDetachRolesByIdFromUser()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
$this->user->attachRoles([$this->adminRole->id, $this->executiveRole->id]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
$this->user->detachRoles([$this->adminRole->id, $this->executiveRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
}
public function testDetachRolesByObjectFromUser()
{
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
$this->user->attachRoles([$this->adminRole, $this->executiveRole]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
$this->user->detachRoles([$this->adminRole, $this->executiveRole]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->adminRole->id]);
$this->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => $this->executiveRole->id]);
}
}
<?php
use Tests\BrowserKitTestCase;
use App\Models\Access\Role\Role;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Event;
use App\Events\Backend\Access\Role\RoleCreated;
use App\Events\Backend\Access\Role\RoleDeleted;
use App\Events\Backend\Access\Role\RoleUpdated;
/**
* Class RoleFormTest.
*/
class RoleFormTest extends BrowserKitTestCase
{
public function testCreateRoleRequiredFieldsAll()
{
// All Permissions
$this->actingAs($this->admin)
->visit('/admin/access/role/create')
->type('', 'name')
->press('Create')
->seePageIs('/admin/access/role/create')
->see('The name field is required.');
}
public function testCreateRoleRequiredFieldsSpecificPermissions()
{
// Custom Permissions
$this->actingAs($this->admin)
->visit('/admin/access/role/create')
->type('Test Role', 'name')
->select('custom', 'associated_permissions')
->press('Create')
->seePageIs('/admin/access/role/create')
->see('You must select at least one permission for this role.');
}
public function testCreateRoleFormAll()
{
// Make sure our events are fired
Event::fake();
// Test create with all permissions
$this->actingAs($this->admin)
->visit('/admin/access/role/create')
->type('Test Role', 'name')
->type('999', 'sort')
->press('Create')
->seePageIs('/admin/access/role')
->see('The role was successfully created.')
->seeInDatabase(config('access.roles_table'), ['name' => 'Test Role', 'all' => 1, 'sort' => 999]);
Event::assertDispatched(RoleCreated::class);
}
public function testCreateRoleFormSpecificPermissions()
{
// Make sure our events are fired
Event::fake();
// Test create with some permissions
$this->actingAs($this->admin)
->visit('/admin/access/role/create')
->type('Test Role', 'name')
->select('custom', 'associated_permissions')
->check('permissions[1]')
->press('Create')
->seePageIs('/admin/access/role')
->see('The role was successfully created.')
->seeInDatabase(config('access.roles_table'), ['name' => 'Test Role', 'all' => 0])
->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => 4]);
Event::assertDispatched(RoleCreated::class);
}
public function testRoleAlreadyExists()
{
$this->actingAs($this->admin)
->visit('/admin/access/role/create')
->type('Administrator', 'name')
->press('Create')
->seePageIs('/admin/access/role/create')
->see('That role already exists. Please choose a different name.');
}
public function testRoleRequiresPermission()
{
if (config('access.roles.role_must_contain_permission')) {
$this->actingAs($this->admin)
->visit('/admin/access/role/create')
->type('Test Role', 'name')
->select('custom', 'associated_permissions')
->press('Create')
->seePageIs('/admin/access/role/create')
->see('You must select at least one permission for this role.');
}
}
public function testUpdateRoleRequiredFields()
{
$this->actingAs($this->admin)
->visit('/admin/access/role/1/edit')
->type('', 'name')
->press('Update')
->seePageIs('/admin/access/role/1/edit')
->see('The name field is required.');
}
public function testUpdateRoleFormAll()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin)
->visit('/admin/access/role/1/edit')
->type('Administrator Edited', 'name')
->type('123', 'sort')
->press('Update')
->seePageIs('/admin/access/role')
->see('The role was successfully updated.')
->seeInDatabase(config('access.roles_table'), ['id' => 1, 'name' => 'Administrator Edited', 'sort' => 123]);
Event::assertDispatched(RoleUpdated::class);
}
public function testUpdateRoleFormSpecificPermissions()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin)
->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => 3])
->visit('/admin/access/role/3/edit')
->check('permissions[1]')
->press('Update')
->seePageIs('/admin/access/role')
->see('The role was successfully updated.')
->seeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => 3]);
Event::assertDispatched(RoleUpdated::class);
}
public function testUpdateRoleRequiresPermission()
{
$this->actingAs($this->admin)
->visit('/admin/access/role/3/edit')
->uncheck('permissions[2]')
->press('Update')
->seePageIs('/admin/access/role/3/edit')
->see('You must select at least one permission for this role.');
}
public function testDeleteRoleForm()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin);
$role = factory(Role::class)->create([
'created_by' => $this->admin->id
]);
$this->seeInDatabase(config('access.roles_table'), ['id' => $role->id])
->delete(route('admin.access.role.destroy', $role))
->assertRedirectedTo(route('admin.access.role.index'))
->notSeeInDatabase(config('access.roles_table'), ['id' => $role->id, 'deleted_at' => null])
->seeInSession(['flash_success' => 'The role was successfully deleted.']);
$this->assertCount(3, Role::all());
Event::assertDispatched(RoleDeleted::class);
}
public function testDeleteRoleWithPermissions()
{
// Make sure our events are fired
Event::fake();
// Remove users from role first because it will error on that first
DB::table(config('access.role_user_table'))->where('role_id', 2)->delete();
$this->actingAs($this->admin)
->visit('/admin/access/role')
->delete('/admin/access/role/2')
->assertRedirectedTo('/admin/access/role')
->notSeeInDatabase(config('access.roles_table'), ['id' => 2, 'deleted_at' => null])
->notSeeInDatabase(config('access.permission_role_table'), ['permission_id' => 1, 'role_id' => 2])
->seeInSession(['flash_success' => 'The role was successfully deleted.']);
Event::assertDispatched(RoleDeleted::class);
}
public function testCanNotDeleteAdministratorRole()
{
$this->actingAs($this->admin)
->visit('/admin/access/role')
->delete('/admin/access/role/1')
->assertRedirectedTo('/admin/access/role')
->seeInDatabase(config('access.roles_table'), ['id' => 1, 'name' => 'Administrator'])
->seeInSession(['flash_danger' => 'You can not delete the Administrator role.']);
}
public function testCanNotDeleteRoleWithUsers()
{
$this->actingAs($this->admin)
->visit('/admin/access/role')
->delete('/admin/access/role/2')
->assertRedirectedTo('/admin/access/role')
->seeInDatabase(config('access.roles_table'), ['id' => 2])
->seeInSession(['flash_danger' => 'You can not delete a role with associated users.']);
}
}
<?php
use Tests\BrowserKitTestCase;
use App\Models\Access\User\User;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\Facades\Notification;
use App\Events\Backend\Access\User\UserCreated;
use App\Events\Backend\Access\User\UserDeleted;
use App\Events\Backend\Access\User\UserUpdated;
use App\Events\Backend\Access\User\UserPasswordChanged;
use App\Notifications\Frontend\Auth\UserNeedsConfirmation;
/**
* Class UserFormTest.
*/
class UserFormTest extends BrowserKitTestCase
{
public function testCreateUserRequiredFields()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/create')
->type('', 'first_name')
->type('', 'last_name')
->type('', 'email')
->type('', 'password')
->type('', 'password_confirmation')
->press('Create')
->see('The first name field is required.')
->see('The last name field is required.')
->see('The email field is required.')
->see('The password field is required.');
}
public function testCreateUserPasswordsDoNotMatch()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/create')
->type('Test', 'first_name')
->type('User', 'last_name')
->type('test@test.com', 'email')
->type('123456', 'password')
->type('1234567', 'password_confirmation')
->press('Create')
->see('The password confirmation does not match.');
}
public function testCreateUserConfirmedForm()
{
// Make sure our events are fired
Event::fake();
// Create any needed resources
$faker = Faker\Factory::create();
$name = $faker->name;
$email = $faker->safeEmail;
$password = "Admin@123";
$this->actingAs($this->admin)
->visit('/admin/access/user/create')
->type(explode(' ', $name)[0], 'first_name')
->type(explode(' ', $name)[1], 'last_name')
->type($email, 'email')
->type($password, 'password')
->type($password, 'password_confirmation')
->seeIsChecked('status')
->seeIsChecked('confirmed')
->seeIsChecked('permissions[2]')
->dontSeeIsChecked('confirmation_email')
->press('Create')
->seePageIs('/admin/access/user')
->see('The user was successfully created.')
->seeInDatabase(config('access.users_table'), ['name' => $name, 'email' => $email, 'status' => 1, 'confirmed' => 1])
->seeInDatabase(config('access.role_user_table'), ['user_id' => 4, 'role_id' => 2])
->seeInDatabase(config('access.role_user_table'), ['user_id' => 4, 'role_id' => 3]);
Event::assertDispatched(UserCreated::class);
}
public function testCreateUserUnconfirmedForm()
{
// Make sure our events are fired
Event::fake();
// Make sure our notifications are sent
Notification::fake();
// Create any needed resources
$faker = Faker\Factory::create();
$name = $faker->name;
$email = $faker->safeEmail;
$password = $faker->password(8);
$this->actingAs($this->admin)
->visit('/admin/access/user/create')
->type($name, 'name')
->type($email, 'email')
->type($password, 'password')
->type($password, 'password_confirmation')
->seeIsChecked('status')
->uncheck('confirmed')
->check('confirmation_email')
->check('assignees_roles[2]')
->check('assignees_roles[3]')
->press('Create')
->seePageIs('/admin/access/user')
->see('The user was successfully created.')
->seeInDatabase(config('access.users_table'), ['name' => $name, 'email' => $email, 'status' => 1, 'confirmed' => 0])
->seeInDatabase(config('access.role_user_table'), ['user_id' => 4, 'role_id' => 2])
->seeInDatabase(config('access.role_user_table'), ['user_id' => 4, 'role_id' => 3]);
// Get the user that was inserted into the database
$user = User::where('email', $email)->first();
// Check that the user was sent the confirmation email
Notification::assertSentTo([$user],
UserNeedsConfirmation::class);
Event::assertDispatched(UserCreated::class);
}
public function testCreateUserFailsIfEmailExists()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/create')
->type('User', 'name')
->type('user@user.com', 'email')
->type('123456', 'password')
->type('123456', 'password_confirmation')
->press('Create')
->seePageIs('/admin/access/user/create')
->see('The email has already been taken.');
}
public function testUpdateUserRequiredFields()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/3/edit')
->type('', 'name')
->type('', 'email')
->press('Update')
->see('The name field is required.')
->see('The email field is required.');
}
public function testUpdateUserForm()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/edit')
->see($this->user->name)
->see($this->user->email)
->type('User New', 'name')
->type('user2@user.com', 'email')
->uncheck('status')
->uncheck('confirmed')
->check('assignees_roles[2]')
->uncheck('assignees_roles[3]')
->press('Update')
->seePageIs('/admin/access/user')
->see('The user was successfully updated.')
->seeInDatabase(config('access.users_table'),
[
'id' => $this->user->id,
'name' => 'User New',
'email' => 'user2@user.com',
'status' => 0,
'confirmed' => 0,
])
->seeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => 2])
->notSeeInDatabase(config('access.role_user_table'), ['user_id' => $this->user->id, 'role_id' => 3]);
Event::assertDispatched(UserUpdated::class);
}
public function testDeleteUserForm()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin)
->delete('/admin/access/user/'.$this->user->id)
->assertRedirectedTo('/admin/access/user/deleted')
->notSeeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null]);
Event::assertDispatched(UserDeleted::class);
}
public function testUserCanNotDeleteSelf()
{
$this->actingAs($this->admin)
->visit('/admin/access/user')
->delete('/admin/access/user/'.$this->admin->id)
->assertRedirectedTo('/admin/access/user')
->seeInDatabase(config('access.users_table'), ['id' => $this->admin->id, 'deleted_at' => null])
->seeInSession(['flash_danger' => 'You can not delete yourself.']);
}
public function testChangeUserPasswordRequiredFields()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/password/change')
->see('Change Password for '.$this->user->name)
->type('', 'password')
->type('', 'password_confirmation')
->press('Update')
->seePageIs('/admin/access/user/'.$this->user->id.'/password/change')
->see('The password field is required.');
}
public function testChangeUserPasswordForm()
{
// Make sure our events are fired
Event::fake();
$password = '87654321';
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/password/change')
->see('Change Password for '.$this->user->name)
->type($password, 'password')
->type($password, 'password_confirmation')
->press('Update')
->seePageIs('/admin/access/user')
->see('The user\'s password was successfully updated.');
Event::assertDispatched(UserPasswordChanged::class);
}
public function testChangeUserPasswordDoNotMatch()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/password/change')
->see('Change Password for '.$this->user->name)
->type('123456', 'password')
->type('1234567', 'password_confirmation')
->press('Update')
->seePageIs('/admin/access/user/'.$this->user->id.'/password/change')
->see('The password confirmation does not match.');
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class SearchFormTest.
*/
class SearchFormTest extends BrowserKitTestCase
{
public function testSearchPageWithNoQuery()
{
$this->actingAs($this->admin)
->visit('/admin/search')
->seePageIs('/admin/dashboard')
->see('Please enter a search term.');
}
// public function testSearchFormRedirectsToResults()
// {
// $this->actingAs($this->admin)
// ->visit('/admin/dashboard')
// ->type('Test Query', 'q')
// ->press('search-btn')
// ->seePageIs('/admin/search?q=Test%20Query')
// ->see('Search Results for Test Query');
// }
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class HistoryLogTest.
*/
class HistoryLogTest extends BrowserKitTestCase
{
public function testHistoryLogByTypeNameFunction()
{
$this->actingAs($this->admin);
history()
->withType('User')
->withText(trans('history.backend.users.created').$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
$this->seeInDatabase('history',
[
'type_id' => 1,
'user_id' => $this->admin->id,
'entity_id' => $this->user->id,
'icon' => 'plus',
'class' => 'bg-green',
'text' => trans('history.backend.users.created').$this->user->name,
])
->visit('/admin/dashboard')
->see('<strong>'.$this->admin->name.'</strong> '.trans('history.backend.users.created').$this->user->name);
}
public function testHistoryLogByTypeIdFunction()
{
$this->actingAs($this->admin);
history()
->withType(1)
->withText(trans('history.backend.users.created').$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
$this->seeInDatabase('history',
[
'type_id' => 1,
'user_id' => $this->admin->id,
'entity_id' => $this->user->id,
'icon' => 'plus',
'class' => 'bg-green',
'text' => trans('history.backend.users.created').$this->user->name,
])
->visit('/admin/dashboard')
->see('<strong>'.$this->admin->name.'</strong> '.trans('history.backend.users.created').$this->user->name);
}
}
<?php
use Tests\BrowserKitTestCase;
use App\Models\Access\User\User;
/**
* Class HistoryRenderEntityTest.
*/
class HistoryRenderEntityTest extends BrowserKitTestCase
{
public function testViewOnlyHasHistoryOfEntity()
{
$this->actingAs($this->admin);
$test_user = factory(User::class)->create();
history()
->withType('User')
->withText('trans("history.backend.users.created") '.$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
history()
->withType('User')
->withText('trans("history.backend.users.updated") '.$this->user->name)
->withEntity($this->user->id)
->withIcon('pencil')
->withClass('bg-blue')
->log();
history()
->withType('User')
->withText('trans("history.backend.users.deleted") '.$this->user->name)
->withEntity($this->user->id)
->withIcon('trash')
->withClass('bg-red')
->log();
history()
->withType('User')
->withText('trans("history.backend.roles.created") '.$test_user->name)
->withEntity($test_user->id)
->withIcon('plus')
->withClass('bg-red')
->log();
history()
->withType('User')
->withText('trans("history.backend.roles.updated") '.$test_user->name)
->withEntity($test_user->id)
->withIcon('pencil')
->withClass('bg-red')
->log();
history()
->withType('User')
->withText('trans("history.backend.roles.deleted") '.$test_user->name)
->withEntity($test_user->id)
->withIcon('trash')
->withClass('bg-red')
->log();
$this->visit('/admin/access/user/'.$this->user->id)
->see('<strong>'.$this->admin->name.'</strong> created user '.$this->user->name)
->see('<strong>'.$this->admin->name.'</strong> updated user '.$this->user->name)
->see('<strong>'.$this->admin->name.'</strong> deleted user '.$this->user->name)
->dontSee('<strong>'.$this->admin->name.'</strong> created user '.$test_user->name)
->dontSee('<strong>'.$this->admin->name.'</strong> updated user '.$test_user->name)
->dontSee('<strong>'.$this->admin->name.'</strong> deleted user '.$test_user->name);
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class HistoryRenderTest.
*/
class HistoryRenderTest extends BrowserKitTestCase
{
public function testDashboardDisplaysHistory()
{
$this->actingAs($this->admin);
history()
->withType('User')
->withText(trans('history.backend.users.created').$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
$this->visit('/admin/dashboard')
->see('<strong>'.$this->admin->name.'</strong> '.trans('history.backend.users.created').$this->user->name);
}
public function testTypeDisplaysHistory()
{
$this->actingAs($this->admin);
history()
->withType('User')
->withText(trans('history.backend.users.created').$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
$this->visit('/admin/access/user')
->see('<strong>'.$this->admin->name.'</strong> '.trans('history.backend.users.created').$this->user->name);
}
public function testEntityDisplaysHistory()
{
$this->actingAs($this->admin);
history()
->withType('User')
->withText(trans('history.backend.users.created').$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
$this->visit('/admin/access/user/3')
->see('<strong>'.$this->admin->name.'</strong> '.trans('history.backend.users.created').$this->user->name);
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class HistoryRenderTypeTest.
*/
class HistoryRenderTypeTest extends BrowserKitTestCase
{
public function testViewOnlyHasHistoryOfType()
{
$this->actingAs($this->admin);
history()
->withType('User')
->withText('trans("history.backend.users.created") '.$this->user->name)
->withEntity($this->user->id)
->withIcon('plus')
->withClass('bg-green')
->log();
history()
->withType('User')
->withText('trans("history.backend.users.updated") '.$this->user->name)
->withEntity($this->user->id)
->withIcon('pencil')
->withClass('bg-blue')
->log();
history()
->withType('User')
->withText('trans("history.backend.users.deleted") '.$this->user->name)
->withEntity($this->user->id)
->withIcon('trash')
->withClass('bg-red')
->log();
history()
->withType('Role')
->withText('trans("history.backend.roles.created") '.$this->adminRole->name)
->withEntity($this->adminRole->id)
->withIcon('plus')
->withClass('bg-red')
->log();
history()
->withType('Role')
->withText('trans("history.backend.roles.updated") '.$this->adminRole->name)
->withEntity($this->adminRole->id)
->withIcon('pencil')
->withClass('bg-red')
->log();
history()
->withType('Role')
->withText('trans("history.backend.roles.deleted") ')
->withEntity($this->adminRole->id)
->withIcon('trash')
->withClass('bg-red')
->log();
$this->visit('/admin/access/user')
->see('<strong>'.$this->admin->name.'</strong> created user '.$this->user->name)
->see('<strong>'.$this->admin->name.'</strong> updated user '.$this->user->name)
->see('<strong>'.$this->admin->name.'</strong> deleted user '.$this->user->name)
->dontSee('<strong>'.$this->admin->name.'</strong> created role '.$this->adminRole->name)
->dontSee('<strong>'.$this->admin->name.'</strong> updated role '.$this->adminRole->name)
->dontSee('<strong>'.$this->admin->name.'</strong> deleted role '.$this->adminRole->name);
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class RoleRouteTest.
*/
class RoleRouteTest extends BrowserKitTestCase
{
public function testRolesIndex()
{
$this->actingAs($this->admin)->visit('/admin/access/role')->see('Role Management');
}
public function testCreateRole()
{
$this->actingAs($this->admin)->visit('/admin/access/role/create')->see('Create Role');
}
public function testEditRole()
{
$this->actingAs($this->admin)
->visit('/admin/access/role/'.$this->adminRole->id.'/edit')
->see('Edit Role')
->see($this->adminRole->name);
}
}
<?php
use Carbon\Carbon;
use Tests\BrowserKitTestCase;
use Illuminate\Support\Facades\Event;
use App\Events\Backend\Access\User\UserRestored;
use App\Events\Backend\Access\User\UserDeactivated;
use App\Events\Backend\Access\User\UserReactivated;
use App\Events\Backend\Access\User\UserPermanentlyDeleted;
use App\Notifications\Frontend\Auth\UserNeedsConfirmation;
/**
* Class UserRouteTest.
*/
class UserRouteTest extends BrowserKitTestCase
{
public function testActiveUsers()
{
$this->actingAs($this->admin)->visit('/admin/access/user')->see('Active Users');
}
public function testDeactivatedUsers()
{
$this->actingAs($this->admin)->visit('/admin/access/user/deactivated')->see('Deactivated Users');
}
public function testDeletedUsers()
{
$this->actingAs($this->admin)->visit('/admin/access/user/deleted')->see('Deleted Users');
}
public function testCreateUser()
{
$this->actingAs($this->admin)->visit('/admin/access/user/create')->see('Create User');
}
public function testViewUser()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id)
->see('View User')
->see('Overview')
->see('History')
->see($this->user->name)
->see($this->user->email);
}
public function testEditUser()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/edit')
->see('Edit User')
->see($this->user->name)
->see($this->user->email);
}
public function testChangeUserPassword()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/password/change')
->see('Change Password for '.$this->user->name);
}
public function testResendUserConfirmationEmail()
{
Notification::fake();
$this->actingAs($this->admin)
->visit('/admin/access/user')
->visit('/admin/access/user/'.$this->user->id.'/account/confirm/resend')
->seePageIs('/admin/access/user')
->see('A new confirmation e-mail has been sent to the address on file.');
Notification::assertSentTo($this->user, UserNeedsConfirmation::class);
}
public function testLoginAsUser()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/login-as')
->seePageIs('/')
->see('You are currently logged in as '.$this->user->name.'.')
->see($this->admin->name)
->assertTrue(access()->id() == $this->user->id);
}
public function testCantLoginAsSelf()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->admin->id.'/login-as')
->see('Do not try to login as yourself.');
}
public function testLogoutAsUser()
{
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/login-as')
->seePageIs('/')
->see('You are currently logged in as '.$this->user->name.'.')
->click('Re-Login as '.$this->admin->name)
->seePageIs('/admin/access/user')
->assertTrue(access()->id() == $this->admin->id);
}
public function testDeactivateReactivateUser()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin)
->visit('/admin/access/user/'.$this->user->id.'/mark/0')
->seePageIs('/admin/access/user/deactivated')
->see('The user was successfully updated.')
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'status' => 0])
->visit('/admin/access/user/'.$this->user->id.'/mark/1')
->seePageIs('/admin/access/user')
->see('The user was successfully updated.')
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'status' => 1]);
Event::assertDispatched(UserDeactivated::class);
Event::assertDispatched(UserReactivated::class);
}
public function testRestoreUser()
{
// Make sure our events are fired
Event::fake();
$this->user->deleted_at = Carbon::now();
$this->user->save();
$this->actingAs($this->admin)
->notSeeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null])
->visit('/admin/access/user/'.$this->user->id.'/restore')
->seePageIs('/admin/access/user')
->see('The user was successfully restored.')
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null]);
Event::assertDispatched(UserRestored::class);
}
public function testUserIsDeletedBeforeBeingRestored()
{
$this->actingAs($this->admin)
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null])
->visit('/admin/access/user')
->visit('/admin/access/user/'.$this->user->id.'/restore')
->seePageIs('/admin/access/user')
->see('This user is not deleted so it can not be restored.')
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null]);
}
public function testPermanentlyDeleteUser()
{
// Make sure our events are fired
Event::fake();
$this->actingAs($this->admin)
->delete('/admin/access/user/'.$this->user->id)
->notSeeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null])
->visit('/admin/access/user/'.$this->user->id.'/delete')
->seePageIs('/admin/access/user/deleted')
->see('The user was deleted permanently.')
->notSeeInDatabase(config('access.users_table'), ['id' => $this->user->id]);
Event::assertDispatched(UserPermanentlyDeleted::class);
}
public function testUserIsDeletedBeforeBeingPermanentlyDeleted()
{
$this->actingAs($this->admin)
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null])
->visit('/admin/access/user')
->visit('/admin/access/user/'.$this->user->id.'/delete')
->seePageIs('/admin/access/user')
->see('This user must be deleted first before it can be destroyed permanently.')
->seeInDatabase(config('access.users_table'), ['id' => $this->user->id, 'deleted_at' => null]);
}
public function testCantNotDeactivateSelf()
{
$this->actingAs($this->admin)
->visit('/admin/access/user')
->visit('/admin/access/user/'.$this->admin->id.'/mark/0')
->seePageIs('/admin/access/user')
->see('You can not do that to yourself.');
}
}
<?php
use Tests\BrowserKitTestCase;
/**
* Class DashboardRouteTest.
*/
class DashboardRouteTest extends BrowserKitTestCase
{
public function testAdminDashboard()
{
$this->actingAs($this->admin)->visit('/admin/dashboard')->see('Access Management')->see($this->admin->name);
}
}
\ No newline at end of file
<?php
use Tests\BrowserKitTestCase;
/**
* Class LogViewerRouteTest.
*/
class LogViewerRouteTest extends BrowserKitTestCase
{
public function testLogViewerDashboard()
{
$this->actingAs($this->admin)
->visit('/admin/log-viewer')
->see('Log Viewer');
}
public function testLogViewerList()
{
$this->actingAs($this->admin)
->visit('/admin/log-viewer/logs')
->see('Logs');
}
public function testLogViewerSingle()
{
$this->actingAs($this->admin)
->visit('/admin/log-viewer/logs/'.date('Y-m-d'))
->see('Log ['.date('Y-m-d').']');
}
public function testLogViewerSingleType()
{
$this->actingAs($this->admin)
->visit('/admin/log-viewer/logs/'.date('Y-m-d').'/error')
->see('Log ['.date('Y-m-d').']');
}
}
......@@ -2,11 +2,80 @@
namespace Tests;
use App\Models\Access\User\User;
use App\Models\Access\Role\Role;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\BrowserKitTesting\TestCase as BaseTestCase;
abstract class BrowserKitTestCase extends BaseTestCase
{
use CreatesApplication;
use CreatesApplication,
RefreshDatabase;
public $baseUrl = 'http://localhost:8000';
/**
* @var
*/
public $baseUrl;
/**
* @var
*/
protected $admin;
/**
* @var
*/
protected $executive;
/**
* @var
*/
protected $user;
/**
* @var
*/
protected $adminRole;
/**
* @var
*/
protected $executiveRole;
/**
* @var
*/
protected $userRole;
public function setUp()
{
parent::setUp();
$this->baseUrl = config('app.url', 'http://localhost:8000');
// Set up the database
Artisan::call('migrate:refresh');
Artisan::call('db:seed');
/*
* Create class properties to be used in tests
*/
$this->admin = User::find(1);
$this->executive = User::find(2);
$this->user = User::find(3);
$this->adminRole = Role::find(1);
$this->executiveRole = Role::find(2);
$this->userRole = Role::find(3);
}
public function tearDown()
{
$this->beforeApplicationDestroyed(function () {
DB::disconnect();
});
parent::tearDown();
}
}
......@@ -27,7 +27,7 @@ class AuthTest extends BrowserKitTestCase
}
/** @test */
/*public function test_login_failure_with_wrong_inputs()
public function test_login_failure_with_wrong_inputs()
{
$this->visit("/login")
->type('wrongusername@wrongpassword.com', 'email')
......@@ -35,16 +35,15 @@ class AuthTest extends BrowserKitTestCase
->press('Login')
->seePageIs('/login')
->see('These credentials do not match our records.');
}*/
}
/** @test */
public function users_can_login()
{
//$this->createUser();
$this->visit('/login')
->type('user@user.com', 'email')
->type('1234', 'password')
//->press('Login')
->seePageIs('/login');
->press('Login')
->seePageIs(route('frontend.user.dashboard'));
}
}
......@@ -7,4 +7,20 @@ use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
public function signIn($user = null)
{
$user = $user ?: create('App\User');
$this->be($user);
return $this;
}
public function setUp()
{
parent::setUp();
$this->withoutExceptionHandling();
}
}
<?php
function create($class, $attributes = [], $times = null)
{
return factory($class, $times)->create($attributes);
}
function make($class, $attributes = [], $times = null)
{
return factory($class, $times)->make($attributes);
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment