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.'
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -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…
					
					
				
		Reference in new issue