view src/Generator/Test/stubs/test.stub @ 39:b5c6ebd33547 ls_dev_2025_09

Improving the factories, tests, and requests
author Luka Sitas <sitas.luka.97@gmail.com>
date Thu, 25 Sep 2025 23:16:13 -0400
parents 116b36f5e73b
children 2cf26b593f4a
line wrap: on
line source

<?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('{{ tableName }}', array_intersect_key($item->toArray(), array_flip($item->getFillable())));
   }

   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,
       ]);
   }

}