From 17b76707b3fc4c94aa2a290997e7f651a77d87ad Mon Sep 17 00:00:00 2001 From: KKlochko Date: Fri, 16 Jun 2023 17:59:52 +0300 Subject: [PATCH] Add UserController to register/login users and api, register tests. --- .../Controllers/API/v2/UserController.php | 75 ++++++++++++++++ routes/api.php | 4 + tests/Feature/UserTest.php | 88 +++++++++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 app/Http/Controllers/API/v2/UserController.php create mode 100644 tests/Feature/UserTest.php diff --git a/app/Http/Controllers/API/v2/UserController.php b/app/Http/Controllers/API/v2/UserController.php new file mode 100644 index 0000000..c066269 --- /dev/null +++ b/app/Http/Controllers/API/v2/UserController.php @@ -0,0 +1,75 @@ +input('username') ?? ''; + $matrix_username = $request->input('matrix_username') ?? ''; + $phone = $request->input('phone') ?? ''; + + if($username == '') { + return response()->json([ + 'error' => 'The username is empty, please, write username!!!' + ]); + } + + $user = User::firstOrCreate( + ['username' => $username], + // if username is free then the new user will be created + // with addition arguments: + [ + 'matrix_username' => $matrix_username, + 'phone' => $phone + ] + ); + + if(!$user->wasRecentlyCreated) { + return response()->json([ + 'error' => 'A user with the username already exists!!!' + ]); + } + + return response()->json([ + 'ok' => 'A user with the username registered successfully.' + ]); + } + + public function login(Request $request) + { + $username = $request->input('username') ?? ''; + $matrix_username = $request->input('matrix_username') ?? ''; + + if($username == '') { + return response()->json([ + 'error' => 'The username is empty, please, write username!!!' + ]); + } + + $user = User::where('username', $username)->first(); + + if($user) { + return response()->json([ + 'error' => 'A user with the username does not exist!!!' + ]); + } + + // Update matrix user if needed + // TODO add verification check + if($user->matrix_username != $matrix_username) { + $user->matrix_username = $matrix_username; + $user->save(); + } + + return response()->json([ + 'ok' => 'Login was successful.' + ]); + } +} diff --git a/routes/api.php b/routes/api.php index 1ee3f3f..6c9a0ce 100644 --- a/routes/api.php +++ b/routes/api.php @@ -28,6 +28,10 @@ Route::group([ Route::apiResource('companies', CompanyController::class); Route::apiResource('categories', CategoryController::class); Route::apiResource('items', ItemController::class); + + // User + Route::post('register', 'UserController@register'); + Route::post('login', 'UserController@login'); } ); diff --git a/tests/Feature/UserTest.php b/tests/Feature/UserTest.php new file mode 100644 index 0000000..5a18f99 --- /dev/null +++ b/tests/Feature/UserTest.php @@ -0,0 +1,88 @@ +post('/api/v2/register', [ + 'username' => $username, + 'matrix_username' => $matrix_username, + 'phone' => $phone, + ]); + + $response->assertStatus(200); + + $response->assertJson([ + 'ok' => 'A user with the username registered successfully.' + ]); + + $this->assertDatabaseHas('users', [ + 'username' => $username + ]); + + $user = User::where('username', $username)->first(); + $user->delete(); + + $this->assertDatabaseMissing('users', [ + 'username' => $username + ]); + } + + public function test_register_existing_user(): void + { + $username = 'Oleg'; + $matrix_username = 'Oleg@oleg.com'; + $phone = '380671231212'; + + $response = $this->post('/api/v2/register', [ + 'username' => $username, + 'matrix_username' => $matrix_username, + 'phone' => $phone, + ]); + + $response->assertStatus(200); + + $response->assertJson([ + 'ok' => 'A user with the username registered successfully.' + ]); + + $this->assertDatabaseHas('users', [ + 'username' => $username + ]); + + // trying create again + + $response = $this->post('/api/v2/register', [ + 'username' => $username, + 'matrix_username' => $matrix_username, + 'phone' => $phone, + ]); + + $response->assertStatus(200); + + $response->assertJson([ + 'error' => 'A user with the username already exists!!!' + ]); + + // removing new user + + $user = User::where('username', $username)->first(); + $user->delete(); + + $this->assertDatabaseMissing('users', [ + 'username' => $username + ]); + } +}