Răsfoiți Sursa

User authentication unit testing

moell 1 an în urmă
părinte
comite
f9947a2f7d
3 a modificat fișierele cu 114 adăugiri și 0 ștergeri
  1. 57 0
      .env.testing
  2. 1 0
      app/Models/User.php
  3. 56 0
      tests/Feature/API/AuthenticationTest.php

+ 57 - 0
.env.testing

@@ -0,0 +1,57 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=base64:hIJv76Q0WaJOgjaaoBY22yHbn/ayrqQPOOzakcNQzEk=
+APP_DEBUG=true
+APP_URL=http://localhost
+
+LOG_CHANNEL=stack
+LOG_DEPRECATIONS_CHANNEL=null
+LOG_LEVEL=debug
+
+DB_CONNECTION=sqlite
+DB_DATABASE=:memory:
+
+LOCALE=zh_CN
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+FILESYSTEM_DISK=local
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+MEMCACHED_HOST=127.0.0.1
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=smtp
+MAIL_HOST=mailpit
+MAIL_PORT=1025
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+MAIL_FROM_ADDRESS="hello@example.com"
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+AWS_USE_PATH_STYLE_ENDPOINT=false
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_HOST=
+PUSHER_PORT=443
+PUSHER_SCHEME=https
+PUSHER_APP_CLUSTER=mt1
+
+VITE_APP_NAME="${APP_NAME}"
+VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+VITE_PUSHER_HOST="${PUSHER_HOST}"
+VITE_PUSHER_PORT="${PUSHER_PORT}"
+VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
+VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

+ 1 - 0
app/Models/User.php

@@ -19,6 +19,7 @@ class User extends Authenticatable
      */
     protected $fillable = [
         'name',
+        'username',
         'email',
         'password',
     ];

+ 56 - 0
tests/Feature/API/AuthenticationTest.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace Tests\Feature\API;
+
+use App\Models\User;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Support\Facades\Hash;
+use Laravel\Sanctum\Sanctum;
+use Tests\TestCase;
+
+class AuthenticationTest extends TestCase
+{
+    use RefreshDatabase, WithFaker;
+
+    public function test_user_can_login(): void
+    {
+        $password = 'lpc..pwd';
+        $user = User::factory()->create([
+            'password' => Hash::make($password),
+            'username' => 'lpc',
+        ]);
+
+        $fields = ['username', 'email'];
+
+        foreach($fields as $field) {
+            $response = $this->post('/api/login', [
+                'username' => $user->$field,
+                'password' => $password,
+            ]);
+
+            $response->assertStatus(200);
+
+            $response->assertJsonIsObject("data");
+
+            $response->assertJson([
+                'data' => [
+                    'token' => true,
+                ]
+            ]);
+        }
+    }
+
+    public function test_user_can_logout(): void
+    {
+        $user = User::factory()->create([
+            'username' => 'lpc'
+        ]);
+
+        Sanctum::actingAs($user);
+
+        $response = $this->post('/api/logout');
+
+        $response->assertStatus(204);
+    }
+}