aboutsummaryrefslogtreecommitdiffstats
path: root/source/tests/Feature/AdminApiTest.php
blob: 8292202be8f938875921f57ffe30770d0eb43c77 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php

namespace Tests\Feature;

use App\Models\Admin;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Sanctum\Sanctum;
use Tests\TestCase;

class AdminApiTest extends TestCase
{
    use RefreshDatabase;

    public function test_index_returns_admins()
    {
        $admin = Admin::factory()->create();
        Sanctum::actingAs($admin, ['admin']);

        $response = $this->getJson('/api/admins');
        $response->assertStatus(200)
            ->assertJsonStructure(['data']);
    }

    public function test_store_creates_admin()
    {
        $admin = Admin::factory()->create();
        Sanctum::actingAs($admin, ['admin']);

        $data = [
            'email' => 'ikbenstinkie@gamail.com',
            'password' => 'blablablawachtwoord',
            'profile_photo' => 'pfp.jpg',
        ];

        $response = $this->postJson('/api/admins', $data);
        $response->assertStatus(201)
            ->assertJsonStructure(['data' => ['id', 'email']]);
        $this->assertDatabaseHas('admins', ['email' => $data['email']]);
    }

    public function test_show_returns_admin()
    {
        $admin = Admin::factory()->create();
        Sanctum::actingAs($admin, ['admin']);

        $response = $this->getJson("/api/admins/{$admin->id}");
        $response->assertStatus(200)
            ->assertJson(['data' => ['id' => $admin->id]]);
    }

    public function test_update_modifies_admin()
    {
        $admin = Admin::factory()->create();
        Sanctum::actingAs($admin, ['admin']);

        $data = [
            'email' => 'aangepast@gamail.com',
            'password' => 'nogeenwachtwoord',
            'profile_photo' => 'updated.jpg'
        ];

        $response = $this->putJson("/api/admins/{$admin->id}", $data);
        $response->assertStatus(200)
            ->assertJson(['data' => ['email' => $data['email']]]);
        $this->assertDatabaseHas('admins', ['email' => $data['email']]);
    }

    public function test_destroy_deletes_admin()
    {
        $admin = Admin::factory()->create();
        Sanctum::actingAs($admin, ['admin']);

        $response = $this->deleteJson("/api/admins/{$admin->id}");
        $response->assertStatus(200);
        $this->assertDatabaseMissing('admins', ['id' => $admin->id]);
    }
}