Browse Source

Asset group Unit test

moell 1 year ago
parent
commit
0050cba620

+ 26 - 0
database/factories/AssetGroupFactory.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Database\Factories;
+
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Facades\Auth;
+
+/**
+ * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\AssetGroup>
+ */
+class AssetGroupFactory extends Factory
+{
+    /**
+     * Define the model's default state.
+     *
+     * @return array<string, mixed>
+     */
+    public function definition(): array
+    {
+        return [
+            'name' => fake()->name(),
+            'sequence' => fake()->randomNumber(1, 9),
+            'company_id' => Auth::user()->company_id,
+        ];
+    }
+}

+ 60 - 0
tests/Feature/API/AssetGroupTest.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace Tests\Feature\API;
+
+
+use App\Models\AssetGroup;
+use Tests\Feature\TestCase;
+
+class AssetGroupTest extends TestCase
+{
+    public function test_asset_group_list()
+    {
+        AssetGroup::factory(30)->create();
+
+        $response = $this->get(route('asset-group.index'));
+
+        $response->assertStatus(200)
+            ->assertJsonStructure($this->simplePaginateResponseStructure([
+                'name',
+                'sequence',
+            ]));
+    }
+
+    public function test_asset_group_create(): void
+    {
+        $response = $this->post(route('asset-group.store'), [
+            'name' => 'test',
+            'sequence' => 1,
+        ]);
+
+        $response->assertStatus(201);
+    }
+
+    public function test_asset_group_update(): void
+    {
+        $assetGroup = AssetGroup::factory()->create();
+
+        $response = $this->put(route('asset-group.update', ['asset_group' => $assetGroup->id]), [
+            'name' => 'test',
+            'sequence' => 1,
+        ]);
+
+        $response->assertStatus(204);
+
+        $newAssetGroup = AssetGroup::find($assetGroup->id);
+        $this->assertEquals('test', $newAssetGroup->name);
+        $this->assertEquals(1, $newAssetGroup->sequence);
+    }
+
+    public function test_asset_group_delete(): void
+    {
+        $assetGroup = AssetGroup::factory()->create();
+
+        $response = $this->delete(route('asset-group.destroy', ['asset_group' => $assetGroup->id]));
+
+        $response->assertStatus(204);
+
+        $this->assertNull(AssetGroup::find($assetGroup->id));
+    }
+}

+ 49 - 0
tests/Feature/TestCase.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace Tests\Feature;
+
+
+use App\Models\User;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Laravel\Sanctum\Sanctum;
+
+class TestCase extends \Tests\TestCase
+{
+    use RefreshDatabase, WithFaker;
+
+    protected function setUp(): void
+    {
+        parent::setUp();
+
+        $user = User::factory()->create([
+            'username' => 'lpc',
+            'email' => 'test@lpc.com',
+            'company_id' => 1,
+        ]);
+
+        Sanctum::actingAs($user);
+    }
+
+    protected function simplePaginateResponseStructure(array $data): array
+    {
+        return [
+            'data' => [
+                '*' => $data
+            ],
+            'links' => [
+                'first',
+                'last',
+                'prev',
+                'next',
+            ],
+            'meta' => [
+                'current_page',
+                'from',
+                'path',
+                'per_page',
+                'to',
+            ]
+        ];
+    }
+}