Fix styling

pull/3/head
thearyanahmed 4 years ago committed by github-actions[bot]
parent b56a01c99d
commit 3573f8f001

@ -0,0 +1 @@
{"php":"8.1.6","version":"3.8.0","indent":" ","lineEnding":"\n","rules":{"blank_line_after_opening_tag":true,"braces":{"allow_single_line_anonymous_class_with_empty_body":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_typehint":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_braces":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"sort_algorithm":"alpha"},"return_type_declaration":true,"short_scalar_cast":true,"single_blank_line_before_namespace":true,"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"on_multiline":"ensure_fully_multiline","keep_multiple_spaces_after_comma":true},"no_break_comment":true,"no_closing_tag":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_spaces_inside_parenthesis":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_import_per_statement":true,"single_line_after_imports":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true,"array_syntax":{"syntax":"short"},"no_unused_imports":true,"not_operator_with_successor_space":true,"trailing_comma_in_multiline":true,"phpdoc_scalar":true,"unary_operator_spaces":true,"binary_operator_spaces":true,"blank_line_before_statement":{"statements":["break","continue","declare","return","throw","try"]},"phpdoc_single_line_var_spacing":true,"phpdoc_var_without_name":true,"class_attributes_separation":{"elements":{"method":"one"}}},"hashes":{"app\/Models\/User.php":10996186,"app\/Models\/Role.php":3348606576,"app\/Models\/UserRole.php":658247917,"app\/Providers\/EventServiceProvider.php":2619877882,"app\/Providers\/RouteServiceProvider.php":2666392252,"app\/Providers\/BroadcastServiceProvider.php":3839728412,"app\/Providers\/AppServiceProvider.php":1624137708,"app\/Providers\/AuthServiceProvider.php":3880649967,"app\/Console\/Kernel.php":1530351997,"app\/Http\/Middleware\/RedirectIfAuthenticated.php":4011276237,"app\/Http\/Middleware\/TrustHosts.php":3859577676,"app\/Http\/Middleware\/PreventRequestsDuringMaintenance.php":2074704835,"app\/Http\/Middleware\/EncryptCookies.php":250310946,"app\/Http\/Middleware\/VerifyCsrfToken.php":2545444967,"app\/Http\/Middleware\/TrimStrings.php":3685711597,"app\/Http\/Middleware\/Authenticate.php":2203061520,"app\/Http\/Middleware\/TrustProxies.php":2778032668,"app\/Http\/Kernel.php":3618942900,"app\/Http\/Controllers\/UserController.php":826536539,"app\/Http\/Controllers\/RoleController.php":183948380,"app\/Http\/Controllers\/HydraController.php":3299029281,"app\/Http\/Controllers\/Controller.php":879151980,"app\/Http\/Controllers\/UserRoleController.php":320104334,"app\/Exceptions\/Handler.php":3710876911,"tests\/Feature\/RoleTest.php":3433350750,"tests\/Feature\/UserRoleTest.php":672489086,"tests\/Feature\/HelloHydraTest.php":931287435,"tests\/Feature\/UserTest.php":2720751309,"tests\/Feature\/AdminLoginTest.php":2153584888,"tests\/TestCase.php":1353191102,"tests\/CreatesApplication.php":1811814938,"tests\/Unit\/ExampleTest.php":2449409166}}

@ -7,7 +7,8 @@ use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Laravel\Sanctum\Exceptions\MissingAbilityException; use Laravel\Sanctum\Exceptions\MissingAbilityException;
use Throwable; use Throwable;
class Handler extends ExceptionHandler { class Handler extends ExceptionHandler
{
/** /**
* A list of exception types with their corresponding custom log levels. * A list of exception types with their corresponding custom log levels.
* *
@ -42,26 +43,29 @@ class Handler extends ExceptionHandler {
* *
* @return void * @return void
*/ */
public function register() { public function register()
{
$this->reportable(function (Throwable $e) { $this->reportable(function (Throwable $e) {
// //
}); });
} }
public function render($request, Throwable $exception) { public function render($request, Throwable $exception)
{
if ($exception instanceof ModelNotFoundException) { if ($exception instanceof ModelNotFoundException) {
return response([ return response([
'error'=>1, 'error' => 1,
'message'=>$exception->getMessage() 'message' => $exception->getMessage(),
],404); ], 404);
} }
if ($exception instanceof MissingAbilityException) { if ($exception instanceof MissingAbilityException) {
return response([ return response([
'error'=>1, 'error' => 1,
'message'=>"Not authorized" 'message' => "Not authorized",
],409); ], 409);
} }
return parent::render($request, $exception); return parent::render($request, $exception);
} }
} }

@ -9,5 +9,7 @@ use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController class Controller extends BaseController
{ {
use AuthorizesRequests, DispatchesJobs, ValidatesRequests; use AuthorizesRequests;
use DispatchesJobs;
use ValidatesRequests;
} }

@ -2,19 +2,19 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HydraController extends Controller class HydraController extends Controller
{ {
public function hydra(){ public function hydra()
{
return response([ return response([
"message"=>"Welcome to Hydra, the zero config API boilerplate with roles and abilities for Laravel Sanctum. Please visit https://hasinhayder.github.io/hydra to know more." "message" => "Welcome to Hydra, the zero config API boilerplate with roles and abilities for Laravel Sanctum. Please visit https://hasinhayder.github.io/hydra to know more.",
]); ]);
} }
public function version(){ public function version()
{
return response([ return response([
"version"=>"1.0.0" "version" => "1.0.0",
]); ]);
} }
} }

@ -5,13 +5,15 @@ namespace App\Http\Controllers;
use App\Models\Role; use App\Models\Role;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class RoleController extends Controller { class RoleController extends Controller
{
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function index() { public function index()
{
return Role::all(); return Role::all();
} }
@ -21,19 +23,21 @@ class RoleController extends Controller {
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function store(Request $request) { public function store(Request $request)
{
$data = $request->validate([ $data = $request->validate([
'name' => 'required', 'name' => 'required',
'slug' => 'required' 'slug' => 'required',
]); ]);
$existing = Role::where('slug', $data['slug'])->first(); $existing = Role::where('slug', $data['slug'])->first();
if (!$existing) { if (! $existing) {
$role = Role::create([ $role = Role::create([
'name' => $data['name'], 'name' => $data['name'],
'slug' => $data['slug'] 'slug' => $data['slug'],
]); ]);
return $role; return $role;
} }
@ -46,7 +50,8 @@ class RoleController extends Controller {
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show(Role $role) { public function show(Role $role)
{
return $role; return $role;
} }
@ -57,9 +62,9 @@ class RoleController extends Controller {
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function update(Request $request, Role $role = null) { public function update(Request $request, Role $role = null)
{
if (!$role) { if (! $role) {
return response(['error' => 1, 'message' => 'role doesn\'t exist'], 404); return response(['error' => 1, 'message' => 'role doesn\'t exist'], 404);
} }
@ -83,10 +88,12 @@ class RoleController extends Controller {
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function destroy(Role $role) { public function destroy(Role $role)
{
if ($role->slug != 'admin' && $role->slug != 'super-admin') { if ($role->slug != 'admin' && $role->slug != 'super-admin') {
//don't allow changing the admin slug, because it will make the routes inaccessbile due to faile ability check //don't allow changing the admin slug, because it will make the routes inaccessbile due to faile ability check
$role->delete(); $role->delete();
return response(['error' => 0, 'message' => 'role has been deleted']); return response(['error' => 0, 'message' => 'role has been deleted']);
} else { } else {
return response(['error' => 1, 'message' => 'you cannot delete this role'], 422); return response(['error' => 1, 'message' => 'you cannot delete this role'], 422);

@ -4,19 +4,20 @@ namespace App\Http\Controllers;
use App\Models\Role; use App\Models\Role;
use App\Models\User; use App\Models\User;
use Illuminate\Validation\ValidationException; use App\Models\UserRole;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use App\Models\UserRole;
use Laravel\Sanctum\Exceptions\MissingAbilityException; use Laravel\Sanctum\Exceptions\MissingAbilityException;
class UserController extends Controller { class UserController extends Controller
{
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function index() { public function index()
{
// //
return User::all(); return User::all();
} }
@ -27,11 +28,12 @@ class UserController extends Controller {
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function store(Request $request) { public function store(Request $request)
{
$creds = $request->validate([ $creds = $request->validate([
'email' => 'required|email', 'email' => 'required|email',
'password' => 'required', 'password' => 'required',
'name' => 'nullable|string' 'name' => 'nullable|string',
]); ]);
$user = User::where('email', $creds['email'])->first(); $user = User::where('email', $creds['email'])->first();
@ -42,13 +44,13 @@ class UserController extends Controller {
$user = User::create([ $user = User::create([
'email' => $creds['email'], 'email' => $creds['email'],
'password' => Hash::make($creds['password']), 'password' => Hash::make($creds['password']),
'name' => $creds['name'] 'name' => $creds['name'],
]); ]);
$default_user_role_id = env('DEFAULT_ROLE_ID', 2); $default_user_role_id = env('DEFAULT_ROLE_ID', 2);
UserRole::create([ UserRole::create([
'user_id' => $user->id, 'user_id' => $user->id,
'role_id' => $default_user_role_id 'role_id' => $default_user_role_id,
]); ]);
@ -61,14 +63,15 @@ class UserController extends Controller {
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function login(Request $request) { public function login(Request $request)
{
$creds = $request->validate([ $creds = $request->validate([
'email' => 'required|email', 'email' => 'required|email',
'password' => 'required', 'password' => 'required',
]); ]);
$user = User::where('email', $creds['email'])->first(); $user = User::where('email', $creds['email'])->first();
if (!$user || !Hash::check($request->password, $user->password)) { if (! $user || ! Hash::check($request->password, $user->password)) {
return response(['error' => 1, 'message' => 'invalid credentials'], 401); return response(['error' => 1, 'message' => 'invalid credentials'], 401);
} }
@ -77,13 +80,14 @@ class UserController extends Controller {
} }
$roles = $user->roles()->get(); $roles = $user->roles()->get();
$_roles = []; $_roles = [];
foreach ($roles as $role) { foreach ($roles as $role) {
$_roles[] = $role->slug; $_roles[] = $role->slug;
} }
$plainTextToken = $user->createToken('hydra-api-token', $_roles)->plainTextToken; $plainTextToken = $user->createToken('hydra-api-token', $_roles)->plainTextToken;
return response(['error' => 0, 'id' => $user->id, 'token' => $plainTextToken], 200); return response(['error' => 0, 'id' => $user->id, 'token' => $plainTextToken], 200);
} }
@ -93,7 +97,8 @@ class UserController extends Controller {
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show(User $user) { public function show(User $user)
{
return $user; return $user;
} }
@ -104,10 +109,11 @@ class UserController extends Controller {
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function update(Request $request, User $user) { public function update(Request $request, User $user)
{
$user->name = $request->name ?? $user->name; $user->name = $request->name ?? $user->name;
$user->email = $request->email ?? $user->email; $user->email = $request->email ?? $user->email;
$user->password = $request->password ? Hash::make($request->password) : $user->password; $user->password = $request->password ? Hash::make($request->password) : $user->password;
$user->email_verified_at = $request->email_verified_at ?? $user->email_verified_at; $user->email_verified_at = $request->email_verified_at ?? $user->email_verified_at;
//check if the logged in user is updating it's own record //check if the logged in user is updating it's own record
@ -116,7 +122,7 @@ class UserController extends Controller {
$loggedInUser = $request->user(); $loggedInUser = $request->user();
if ($loggedInUser->id == $user->id) { if ($loggedInUser->id == $user->id) {
$user->update(); $user->update();
} else if ($loggedInUser->tokenCan('admin') || $loggedInUser->tokenCan('super-admin')) { } elseif ($loggedInUser->tokenCan('admin') || $loggedInUser->tokenCan('super-admin')) {
$user->update(); $user->update();
} else { } else {
throw new MissingAbilityException("Not Authorized"); throw new MissingAbilityException("Not Authorized");
@ -131,14 +137,14 @@ class UserController extends Controller {
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function destroy(User $user) { public function destroy(User $user)
{
$adminRole = Role::where('slug', 'admin')->first(); $adminRole = Role::where('slug', 'admin')->first();
$userRoles = $user->roles; $userRoles = $user->roles;
if ($userRoles->contains($adminRole)) { if ($userRoles->contains($adminRole)) {
//the current user is admin, then if there is only one admin - don't delete //the current user is admin, then if there is only one admin - don't delete
$numberOfAdmins = Role::where('slug', 'admin')->first()->users()->count(); $numberOfAdmins = Role::where('slug', 'admin')->first()->users()->count();
if (1 == $numberOfAdmins) { if (1 == $numberOfAdmins) {
return response(['error' => 1, 'message' => 'Create another admin before deleting this only admin user'], 409); return response(['error' => 1, 'message' => 'Create another admin before deleting this only admin user'], 409);
} }
@ -149,7 +155,8 @@ class UserController extends Controller {
return response(['error' => 0, 'message' => 'user deleted']); return response(['error' => 0, 'message' => 'user deleted']);
} }
public function me(Request $request) { public function me(Request $request)
{
return $request->user(); return $request->user();
} }
} }

@ -6,14 +6,16 @@ use App\Models\Role;
use App\Models\User; use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class UserRoleController extends Controller { class UserRoleController extends Controller
{
/** /**
* Display a listing of the resource. * Display a listing of the resource.
* *
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function index(User $user) { public function index(User $user)
{
return $user->load('roles'); return $user->load('roles');
} }
@ -24,13 +26,15 @@ class UserRoleController extends Controller {
* @param \App\Models\User $user * @param \App\Models\User $user
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function store(Request $request, User $user) { public function store(Request $request, User $user)
{
$data = $request->validate([ $data = $request->validate([
'role_id' => 'required|integer' 'role_id' => 'required|integer',
]); ]);
$role = Role::find($data['role_id']); $role = Role::find($data['role_id']);
if (!$user->roles()->find($data['role_id'])) { if (! $user->roles()->find($data['role_id'])) {
$user->roles()->attach($role); $user->roles()->attach($role);
return $user->load('roles'); return $user->load('roles');
} else { } else {
return $user->load('roles'); return $user->load('roles');
@ -44,8 +48,10 @@ class UserRoleController extends Controller {
* @param \App\Models\Role $role * @param \App\Models\Role $role
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function destroy(User $user, Role $role) { public function destroy(User $user, Role $role)
{
$user->roles()->detach($role); $user->roles()->detach($role);
return $user->load('roles'); return $user->load('roles');
} }
} }

@ -4,7 +4,8 @@ namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel; use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel { class Kernel extends HttpKernel
{
/** /**
* The application's global HTTP middleware stack. * The application's global HTTP middleware stack.
* *

@ -4,13 +4,12 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use App\Models\User;
class Role extends Model class Role extends Model
{ {
use HasFactory; use HasFactory;
protected $fillable = [ protected $fillable = [
'name','slug' 'name','slug',
]; ];
protected $hidden = [ protected $hidden = [
'pivot', 'pivot',
@ -18,7 +17,8 @@ class Role extends Model
'updated_at', 'updated_at',
]; ];
public function users(){ public function users()
return $this->belongsToMany(User::class,'user_roles'); {
return $this->belongsToMany(User::class, 'user_roles');
} }
} }

@ -2,16 +2,16 @@
namespace App\Models; namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens; use Laravel\Sanctum\HasApiTokens;
use App\Models\Role;
class User extends Authenticatable class User extends Authenticatable
{ {
use HasApiTokens, HasFactory, Notifiable; use HasApiTokens;
use HasFactory;
use Notifiable;
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
@ -34,7 +34,7 @@ class User extends Authenticatable
'remember_token', 'remember_token',
'created_at', 'created_at',
'updated_at', 'updated_at',
'email_verified_at' 'email_verified_at',
]; ];
/** /**
@ -46,7 +46,8 @@ class User extends Authenticatable
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
]; ];
public function roles(){ public function roles()
return $this->belongsToMany(Role::class,'user_roles'); {
return $this->belongsToMany(Role::class, 'user_roles');
} }
} }

@ -9,6 +9,6 @@ class UserRole extends Model
{ {
use HasFactory; use HasFactory;
protected $fillable = [ protected $fillable = [
'user_id','role_id' 'user_id','role_id',
]; ];
} }

@ -3,7 +3,6 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider class AuthServiceProvider extends ServiceProvider
{ {

@ -2,11 +2,8 @@
namespace Tests\Feature; namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use Illuminate\Testing\Fluent\AssertableJson; use Illuminate\Testing\Fluent\AssertableJson;
use Tests\TestCase;
class AdminLoginTest extends TestCase class AdminLoginTest extends TestCase
{ {
@ -17,13 +14,14 @@ class AdminLoginTest extends TestCase
*/ */
public function test_admin_login() public function test_admin_login()
{ {
$response = $this->postJson('/api/login',[ $response = $this->postJson('/api/login', [
'email'=>'admin@hydra.project', 'email' => 'admin@hydra.project',
'password'=>'hydra' 'password' => 'hydra',
]); ]);
$response $response
->assertJson(fn (AssertableJson $json) => ->assertJson(
fn (AssertableJson $json) =>
$json->where('error', 0) $json->where('error', 0)
->has('token') ->has('token')
->etc() ->etc()
@ -32,13 +30,14 @@ class AdminLoginTest extends TestCase
public function test_admin_login_fail() public function test_admin_login_fail()
{ {
$response = $this->postJson('/api/login',[ $response = $this->postJson('/api/login', [
'email'=>'admin@hydra.project', 'email' => 'admin@hydra.project',
'password'=>'hydrax' 'password' => 'hydrax',
]); ]);
$response $response
->assertJson(fn (AssertableJson $json) => ->assertJson(
fn (AssertableJson $json) =>
$json->where('error', 1) $json->where('error', 1)
->missing('token') ->missing('token')
->has('message') ->has('message')

@ -2,8 +2,6 @@
namespace Tests\Feature; namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase; use Tests\TestCase;
class HelloHydraTest extends TestCase class HelloHydraTest extends TestCase

@ -2,22 +2,22 @@
namespace Tests\Feature; namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use Illuminate\Testing\Fluent\AssertableJson;
use App\Models\Role; use App\Models\Role;
use Illuminate\Testing\Fluent\AssertableJson;
use Tests\TestCase;
class RoleTest extends TestCase { class RoleTest extends TestCase
{
/** /**
* A basic feature test example. * A basic feature test example.
* *
* @return void * @return void
*/ */
public function test_list_roles() { public function test_list_roles()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -36,16 +36,17 @@ class RoleTest extends TestCase {
fn ($json) => fn ($json) =>
$json->where('id', 1) $json->where('id', 1)
->where('name', 'Administrator') ->where('name', 'Administrator')
->where('slug','admin') ->where('slug', 'admin')
->etc() ->etc()
) )
); );
} }
public function test_update_role_name_as_admin() { public function test_update_role_name_as_admin()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -54,23 +55,24 @@ class RoleTest extends TestCase {
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
->put("/api/roles/4",[ ->put("/api/roles/4", [
"name"=>"Chief Editor" "name" => "Chief Editor",
]); ]);
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('name','Chief Editor') $json->where('name', 'Chief Editor')
->missing('error') ->missing('error')
->etc() ->etc()
); );
} }
public function test_update_role_slug_as_admin() { public function test_update_role_slug_as_admin()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -79,23 +81,24 @@ class RoleTest extends TestCase {
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
->put("/api/roles/4",[ ->put("/api/roles/4", [
"slug"=>"chief-editor" "slug" => "chief-editor",
]); ]);
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('slug','chief-editor') $json->where('slug', 'chief-editor')
->missing('error') ->missing('error')
->etc() ->etc()
); );
} }
public function test_update_role_namd_and_slug_as_admin() { public function test_update_role_namd_and_slug_as_admin()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -104,25 +107,26 @@ class RoleTest extends TestCase {
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
->put("/api/roles/4",[ ->put("/api/roles/4", [
"name"=>"Editor X", "name" => "Editor X",
"slug"=>"editor-x" "slug" => "editor-x",
]); ]);
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('name','Editor X') $json->where('name', 'Editor X')
->where('slug','editor-x') ->where('slug', 'editor-x')
->missing('error') ->missing('error')
->etc() ->etc()
); );
} }
public function test_update_admin_slug_as_admin_should_fail() { public function test_update_admin_slug_as_admin_should_fail()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -131,23 +135,24 @@ class RoleTest extends TestCase {
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
->put("/api/roles/1",[ ->put("/api/roles/1", [
"slug"=>"admin-x" "slug" => "admin-x",
]); ]);
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json $json
->where('slug','admin') ->where('slug', 'admin')
->etc() ->etc()
); );
} }
public function test_create_new_role_as_admin() { public function test_create_new_role_as_admin()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -156,25 +161,26 @@ class RoleTest extends TestCase {
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
->post("/api/roles",[ ->post("/api/roles", [
"name"=>"New Role", "name" => "New Role",
"slug"=>"new-role" "slug" => "new-role",
]); ]);
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('name','New Role') $json->where('name', 'New Role')
->where('slug','new-role') ->where('slug', 'new-role')
->missing('error') ->missing('error')
->etc() ->etc()
); );
} }
public function test_duplicate_role_will_not_be_created() { public function test_duplicate_role_will_not_be_created()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -183,30 +189,31 @@ class RoleTest extends TestCase {
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
->post("/api/roles",[ ->post("/api/roles", [
"name"=>"New Role", "name" => "New Role",
"slug"=>"new-role" "slug" => "new-role",
]); ]);
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('error',1) $json->where('error', 1)
->etc() ->etc()
); );
} }
public function test_delete_role_as_admin() { public function test_delete_role_as_admin()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
$this->token = $data->token; $this->token = $data->token;
$this->user_id = $data->id; $this->user_id = $data->id;
$newRole = Role::where('slug','new-role')->first(); $newRole = Role::where('slug', 'new-role')->first();
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
@ -215,22 +222,23 @@ class RoleTest extends TestCase {
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('error',0) $json->where('error', 0)
->has('message') ->has('message')
); );
} }
public function test_delete_admin_role_should_fail() { public function test_delete_admin_role_should_fail()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
$this->token = $data->token; $this->token = $data->token;
$this->user_id = $data->id; $this->user_id = $data->id;
$newRole = Role::where('slug','admin')->first(); $newRole = Role::where('slug', 'admin')->first();
$response = $this->withHeader('Authorization', 'Bearer ' . $this->token) $response = $this->withHeader('Authorization', 'Bearer ' . $this->token)
@ -239,7 +247,7 @@ class RoleTest extends TestCase {
$response $response
->assertJson( ->assertJson(
fn (AssertableJson $json) => fn (AssertableJson $json) =>
$json->where('error',1) $json->where('error', 1)
->has('message') ->has('message')
); );
} }

@ -3,18 +3,17 @@
namespace Tests\Feature; namespace Tests\Feature;
use App\Models\User; use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Testing\Fluent\AssertableJson; use Illuminate\Testing\Fluent\AssertableJson;
use Tests\TestCase; use Tests\TestCase;
class UserRoleTest extends TestCase { class UserRoleTest extends TestCase
{
public function test_user_role_is_present() { public function test_user_role_is_present()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -39,18 +38,18 @@ class UserRoleTest extends TestCase {
); );
} }
public function test_assign_role_to_a_user() { public function test_assign_role_to_a_user()
{
$newUser = User::create([ $newUser = User::create([
'name' => 'Test User', 'name' => 'Test User',
'password' => Hash::make('abcd'), 'password' => Hash::make('abcd'),
'email' => 'testuser@hydra.project' 'email' => 'testuser@hydra.project',
]); ]);
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -77,18 +76,18 @@ class UserRoleTest extends TestCase {
$newUser->delete(); $newUser->delete();
} }
public function test_assign_role_multiple_times_to_a_user_should_fail() { public function test_assign_role_multiple_times_to_a_user_should_fail()
{
$newUser = User::create([ $newUser = User::create([
'name' => 'Test User', 'name' => 'Test User',
'password' => Hash::make('abcd'), 'password' => Hash::make('abcd'),
'email' => 'testuser@hydra.project' 'email' => 'testuser@hydra.project',
]); ]);
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -115,18 +114,18 @@ class UserRoleTest extends TestCase {
$newUser->delete(); $newUser->delete();
} }
public function test_assign_multiple_roles_to_a_user() { public function test_assign_multiple_roles_to_a_user()
{
$newUser = User::create([ $newUser = User::create([
'name' => 'Test User', 'name' => 'Test User',
'password' => Hash::make('abcd'), 'password' => Hash::make('abcd'),
'email' => 'testuser@hydra.project' 'email' => 'testuser@hydra.project',
]); ]);
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -153,18 +152,18 @@ class UserRoleTest extends TestCase {
$newUser->delete(); $newUser->delete();
} }
public function test_delete_role_from_a_user() { public function test_delete_role_from_a_user()
{
$newUser = User::create([ $newUser = User::create([
'name' => 'Test User', 'name' => 'Test User',
'password' => Hash::make('abcd'), 'password' => Hash::make('abcd'),
'email' => 'testuser@hydra.project' 'email' => 'testuser@hydra.project',
]); ]);
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -194,18 +193,18 @@ class UserRoleTest extends TestCase {
$newUser->delete(); $newUser->delete();
} }
public function test_delete_all_roles_from_a_user() { public function test_delete_all_roles_from_a_user()
{
$newUser = User::create([ $newUser = User::create([
'name' => 'Test User', 'name' => 'Test User',
'password' => Hash::make('abcd'), 'password' => Hash::make('abcd'),
'email' => 'testuser@hydra.project' 'email' => 'testuser@hydra.project',
]); ]);
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());

@ -3,14 +3,13 @@
namespace Tests\Feature; namespace Tests\Feature;
use App\Models\Role; use App\Models\Role;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use Illuminate\Testing\Fluent\AssertableJson;
use App\Models\User; use App\Models\User;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Testing\Fluent\AssertableJson;
use Tests\TestCase;
class UserTest extends TestCase { class UserTest extends TestCase
{
/** /**
* A basic feature test example. * A basic feature test example.
* *
@ -20,11 +19,12 @@ class UserTest extends TestCase {
private $token; private $token;
private $user_id; private $user_id;
public function test_new_user_registration() { public function test_new_user_registration()
{
$response = $this->postJson('/api/users', [ $response = $this->postJson('/api/users', [
'name' => 'Test User', 'name' => 'Test User',
'email' => 'test@test.com', 'email' => 'test@test.com',
'password' => 'test' 'password' => 'test',
]); ]);
$response $response
@ -36,11 +36,12 @@ class UserTest extends TestCase {
); );
} }
public function test_existing_email_registration_fail() { public function test_existing_email_registration_fail()
{
$response = $this->postJson('/api/users', [ $response = $this->postJson('/api/users', [
'name' => 'Test User', 'name' => 'Test User',
'email' => 'test@test.com', 'email' => 'test@test.com',
'password' => 'test' 'password' => 'test',
]); ]);
$response $response
@ -51,10 +52,11 @@ class UserTest extends TestCase {
); );
} }
public function test_new_user_login() { public function test_new_user_login()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'test@test.com', 'email' => 'test@test.com',
'password' => 'test' 'password' => 'test',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -70,10 +72,11 @@ class UserTest extends TestCase {
); );
} }
public function test_new_user_failed_login() { public function test_new_user_failed_login()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'test@test.com', 'email' => 'test@test.com',
'password' => 'testX' 'password' => 'testX',
]); ]);
$response $response
@ -84,11 +87,11 @@ class UserTest extends TestCase {
); );
} }
public function test_new_user_name_update_with_user_token() { public function test_new_user_name_update_with_user_token()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'test@test.com', 'email' => 'test@test.com',
'password' => 'test' 'password' => 'test',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -108,11 +111,11 @@ class UserTest extends TestCase {
); );
} }
public function test_new_user_name_update_with_admin_token() { public function test_new_user_name_update_with_admin_token()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -132,11 +135,11 @@ class UserTest extends TestCase {
); );
} }
public function test_new_user_destroy_as_user_should_fail() { public function test_new_user_destroy_as_user_should_fail()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'test@test.com', 'email' => 'test@test.com',
'password' => 'test' 'password' => 'test',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -156,11 +159,11 @@ class UserTest extends TestCase {
); );
} }
public function test_new_user_destroy_as_admin() { public function test_new_user_destroy_as_admin()
{
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());
@ -180,12 +183,12 @@ class UserTest extends TestCase {
); );
} }
public function test_delete_admin_user_if_multiple_admins_are_present() { public function test_delete_admin_user_if_multiple_admins_are_present()
{
$newAdminUser = User::create([ $newAdminUser = User::create([
'name'=>'Test Admin', 'name' => 'Test Admin',
'password'=>Hash::make('abcd'), 'password' => Hash::make('abcd'),
'email'=>'testadmin@test.com' 'email' => 'testadmin@test.com',
]); ]);
$adminRole = Role::find(1); $adminRole = Role::find(1);
@ -194,7 +197,7 @@ class UserTest extends TestCase {
$response = $this->postJson('/api/login', [ $response = $this->postJson('/api/login', [
'email' => 'admin@hydra.project', 'email' => 'admin@hydra.project',
'password' => 'hydra' 'password' => 'hydra',
]); ]);
$data = json_decode($response->getContent()); $data = json_decode($response->getContent());

Loading…
Cancel
Save