Add UserController to register/login users and api, register tests.

main
KKlochko 2 years ago
parent ea120c8c9c
commit 17b76707b3

@ -0,0 +1,75 @@
<?php
namespace App\Http\Controllers\API\v2;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function register(Request $request)
{
$username = $request->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.'
]);
}
}

@ -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');
}
);

@ -0,0 +1,88 @@
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\Models\User;
class UserTest extends TestCase
{
public function test_register_new_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
]);
$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
]);
}
}
Loading…
Cancel
Save