diff src/Generator/Test/stubs/test.stub @ 37:116b36f5e73b ls_dev_2025_09

Adding support for tests. It's pretty basic but we can improve later.
author Luka Sitas <sitas.luka.97@gmail.com>
date Thu, 25 Sep 2025 19:58:01 -0400
parents
children b5c6ebd33547
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Generator/Test/stubs/test.stub	Thu Sep 25 19:58:01 2025 -0400
@@ -0,0 +1,127 @@
+<?php
+
+namespace Tests\CRUD\{{ model }};
+
+use {{ namespacedModel }};
+use App\Models\User;
+use Wizard\Framework\Tests\TestCase;
+
+class {{ class }} extends TestCase
+{
+    /* use RefreshDatabase; */
+
+    public function test_{{ modelVariable }}_crud_index_access(): void
+    {
+        $response = $this
+					->get(route('{{ tableName }}.index'));
+
+        $response->assertStatus(200);
+    }
+
+    public function test_{{ modelVariable }}_crud_get_data_access(): void
+    {
+        $response = $this
+					->post(route('{{ tableName }}.get_data'));
+
+        $response->assertStatus(200);
+    }
+
+    public function test_{{ modelVariable }}_crud_create_access(): void
+    {
+				$response = $this
+					->get(route('{{ tableName }}.create'));
+
+        $response->assertStatus(200);
+    }
+
+    public function test_{{ modelVariable }}_crud_edit_access(): void
+    {
+		$item = {{ model }}::factory()->create();
+
+        $response = $this
+					->get(route('{{ tableName }}.edit', $item));
+
+        $response->assertStatus(200);
+    }
+
+    public function test_{{ modelVariable }}_crud_create_usage(): void
+    {
+        $item = {{ model }}::factory()->make();
+
+        $response = $this
+            ->from(route('{{ tableName }}.create'))
+            ->post(route('{{ tableName }}.store'),
+                $item->toArray()
+            );
+
+        $response
+            ->assertSessionHasNoErrors()
+            ->assertRedirect(route('{{ tableName }}.index'));
+
+        $this->assertDatabaseHas('{{ tableName }}', $item->toArray());
+    }
+
+   public function test_{{ modelVariable }}_crud_create_invalid_data(): void
+   {
+       $response = $this
+           ->from(route('{{ tableName }}.create'))
+           ->post(route('{{ tableName }}.store'), []);
+
+       $response
+           ->assertSessionHasErrors()
+           ->assertRedirect(route('{{ tableName }}.create'));
+
+       // Make sure no entry was added
+       $this->assertDatabaseCount('{{ tableName }}', 0);
+   }
+
+   public function test_{{ modelVariable }}_crud_update_usage(): void
+   {
+       $item = {{ model }}::factory()->create();
+
+       $updateData = {{ model }}::factory()->make()->toArray();
+
+       $response = $this
+           ->from(route('{{ tableName }}.edit', $item))
+           ->put(route('{{ tableName }}.update', $item), $updateData);
+
+       $response
+           ->assertSessionHasNoErrors()
+           ->assertRedirect(route('{{ tableName }}.index'));
+
+       $this->assertDatabaseHas('{{ tableName }}', $updateData);
+   }
+
+   public function test_{{ modelVariable }}_crud_edit_invalid_data(): void
+   {
+       $item = {{ model }}::factory()->create();
+
+       $response = $this
+           ->from(route('{{ tableName }}.edit', $item))
+           ->put(route('{{ tableName }}.update', $item), []);
+
+       $response
+           ->assertSessionHasErrors()
+           ->assertRedirect(route('{{ tableName }}.edit', $item));
+
+       // Make sure no entry was added
+       $this->assertDatabaseHas('games', array_intersect(array_flip($item->getFillable()), $item->toArray()));
+   }
+
+   public function test_{{ modelVariable }}_crud_delete_usage(): void
+   {
+       $item = {{ model }}::factory()->create();
+
+       $response = $this
+           ->delete(route('{{ tableName }}.destroy', $item));
+
+       $response
+           ->assertSessionHasNoErrors()
+           ->assertRedirect(route('{{ tableName }}.index'));
+
+       $this->assertSoftDeleted('{{ tableName }}', [
+           'id' => $item->id,
+       ]);
+   }
+
+}