Added user and organization deletion system; Added coverage annotations

This commit is contained in:
Constantin Graf
2024-06-07 19:17:40 +02:00
committed by Constantin Graf
parent 8857befc6c
commit 86f5ea47bb
65 changed files with 2651 additions and 135 deletions

View File

@@ -5,13 +5,10 @@ declare(strict_types=1);
namespace Tests\Unit\Filament;
use Filament\Facades\Filament;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use Tests\TestCaseWithDatabase;
abstract class FilamentTestCase extends TestCase
abstract class FilamentTestCase extends TestCaseWithDatabase
{
use RefreshDatabase;
protected function setUp(): void
{
parent::setUp();

View File

@@ -7,8 +7,10 @@ namespace Tests\Unit\Filament;
use App\Filament\Resources\OrganizationResource;
use App\Models\Organization;
use App\Models\User;
use App\Service\DeletionService;
use Illuminate\Support\Facades\Config;
use Livewire\Livewire;
use Mockery\MockInterface;
class OrganizationResourceTest extends FilamentTestCase
{
@@ -50,4 +52,23 @@ class OrganizationResourceTest extends FilamentTestCase
// Assert
$response->assertSuccessful();
}
public function test_can_delete_a_organization(): void
{
// Arrange
$user = $this->createUserWithPermission();
$this->mock(DeletionService::class, function (MockInterface $mock) use ($user): void {
$mock->shouldReceive('deleteOrganization')
->withArgs(fn (Organization $organizationArg) => $organizationArg->is($user->organization))
->once();
});
// Act
$response = Livewire::test(OrganizationResource\Pages\EditOrganization::class, ['record' => $user->organization->getKey()])
->callAction('delete')
->assertHasNoActionErrors();
// Assert
$response->assertSuccessful();
}
}

View File

@@ -4,10 +4,13 @@ declare(strict_types=1);
namespace Tests\Unit\Filament;
use App\Exceptions\Api\CanNotDeleteUserWhoIsOwnerOfOrganizationWithMultipleMembers;
use App\Filament\Resources\UserResource;
use App\Models\User;
use App\Service\DeletionService;
use Illuminate\Support\Facades\Config;
use Livewire\Livewire;
use Mockery\MockInterface;
class UserResourceTest extends FilamentTestCase
{
@@ -46,4 +49,42 @@ class UserResourceTest extends FilamentTestCase
// Assert
$response->assertSuccessful();
}
public function test_can_delete_a_user(): void
{
// Arrange
$user = $this->createUserWithPermission();
$this->mock(DeletionService::class, function (MockInterface $mock) use ($user): void {
$mock->shouldReceive('deleteUser')
->withArgs(fn (User $userArg) => $userArg->is($user->user))
->once();
});
// Act
$response = Livewire::test(UserResource\Pages\EditUser::class, ['record' => $user->user->getKey()])
->callAction('delete');
// Assert
$response->assertHasNoActionErrors();
$response->assertSuccessful();
}
public function test_delete_user_shows_error_notification_on_failure(): void
{
// Arrange
$user = $this->createUserWithPermission();
$this->mock(DeletionService::class, function (MockInterface $mock) use ($user): void {
$mock->shouldReceive('deleteUser')
->withArgs(fn (User $userArg) => $userArg->is($user->user))
->andThrow(new CanNotDeleteUserWhoIsOwnerOfOrganizationWithMultipleMembers());
});
// Act
$response = Livewire::test(UserResource\Pages\EditUser::class, ['record' => $user->user->getKey()])
->callAction('delete');
// Assert
$response->assertNotified(__('exceptions.api.can_not_delete_user_who_is_owner_of_organization_with_multiple_members'));
$response->assertSuccessful();
}
}