mirror of
https://github.com/brufdev/many-notes.git
synced 2026-01-10 04:49:40 -06:00
Add architecture tests and code fixes
This commit is contained in:
@@ -6,7 +6,7 @@ namespace App\Actions;
|
||||
|
||||
use App\Enums\OAuthProviders;
|
||||
|
||||
final class GetAvailableOAuthProviders
|
||||
final readonly class GetAvailableOAuthProviders
|
||||
{
|
||||
/** @return array<int, OAuthProviders> */
|
||||
public function handle(): array
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace App\Actions;
|
||||
|
||||
use App\Models\User;
|
||||
|
||||
final class GetPathFromUser
|
||||
final readonly class GetPathFromUser
|
||||
{
|
||||
public function handle(): string
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace App\Actions;
|
||||
use App\Models\User;
|
||||
use App\Models\Vault;
|
||||
|
||||
final class GetPathFromVault
|
||||
final readonly class GetPathFromVault
|
||||
{
|
||||
public function handle(Vault $vault): string
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ use App\Models\User;
|
||||
use App\Models\Vault;
|
||||
use App\Models\VaultNode;
|
||||
|
||||
final class GetPathFromVaultNode
|
||||
final readonly class GetPathFromVaultNode
|
||||
{
|
||||
public function handle(VaultNode $node, bool $includeSelf = true): string
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ namespace App\Actions;
|
||||
|
||||
use App\Models\VaultNode;
|
||||
|
||||
final class GetUrlFromVaultNode
|
||||
final readonly class GetUrlFromVaultNode
|
||||
{
|
||||
public function handle(VaultNode $node): string
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace App\Actions;
|
||||
use App\Models\VaultNode;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
final class GetVaultNodeFromPath
|
||||
final readonly class GetVaultNodeFromPath
|
||||
{
|
||||
public function handle(int $vaultId, string $path, ?int $parentId = null): ?VaultNode
|
||||
{
|
||||
|
||||
@@ -11,7 +11,7 @@ use App\Services\VaultFiles\Note;
|
||||
use Illuminate\Http\File;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
final class ProcessImportedFile
|
||||
final readonly class ProcessImportedFile
|
||||
{
|
||||
public function handle(Vault $vault, VaultNode $parent, string $fileName, string $filePath): void
|
||||
{
|
||||
|
||||
@@ -10,7 +10,7 @@ use App\Services\VaultFiles\Note;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use ZipArchive;
|
||||
|
||||
final class ProcessImportedVault
|
||||
final readonly class ProcessImportedVault
|
||||
{
|
||||
public function handle(string $fileName, string $filePath): void
|
||||
{
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace App\Actions;
|
||||
use GuzzleHttp\Psr7\UriResolver;
|
||||
use GuzzleHttp\Psr7\Utils;
|
||||
|
||||
final class ResolveTwoPaths
|
||||
final readonly class ResolveTwoPaths
|
||||
{
|
||||
public function handle(string $currentPath, string $path): string
|
||||
{
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -14,7 +14,7 @@ use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
|
||||
final class FileController extends Controller
|
||||
final readonly class FileController
|
||||
{
|
||||
/**
|
||||
* Show the file for a given user.
|
||||
|
||||
@@ -8,7 +8,7 @@ use App\Actions\GetPathFromVaultNode;
|
||||
use App\Models\VaultNode;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
final class VaultNodeObserver
|
||||
final readonly class VaultNodeObserver
|
||||
{
|
||||
/**
|
||||
* Handle the VaultNode "creating" event.
|
||||
|
||||
@@ -8,7 +8,7 @@ use App\Actions\GetPathFromUser;
|
||||
use App\Models\Vault;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
final class VaultObserver
|
||||
final readonly class VaultObserver
|
||||
{
|
||||
/**
|
||||
* Handle the Vault "creating" event.
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace App\Policies;
|
||||
use App\Models\User;
|
||||
use App\Models\Vault;
|
||||
|
||||
final class VaultPolicy
|
||||
final readonly class VaultPolicy
|
||||
{
|
||||
/**
|
||||
* Determine whether the user can view the model.
|
||||
|
||||
@@ -2,6 +2,79 @@
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
arch()->preset()->php();
|
||||
arch()->preset()->laravel();
|
||||
arch()->preset()->security();
|
||||
|
||||
arch('controllers')
|
||||
->expect('App\Http\Controllers')
|
||||
->not->toBeUsed();
|
||||
|
||||
arch('avoid mutation')
|
||||
->expect('App')
|
||||
->classes()
|
||||
->toBeReadonly()
|
||||
->ignoring([
|
||||
'App\Exceptions',
|
||||
'App\Jobs',
|
||||
'App\Livewire',
|
||||
'App\Models',
|
||||
'App\Providers',
|
||||
'App\Services',
|
||||
]);
|
||||
|
||||
arch('avoid inheritance')
|
||||
->expect('App')
|
||||
->classes()
|
||||
->toExtendNothing()
|
||||
->ignoring([
|
||||
'App\Exceptions',
|
||||
'App\Jobs',
|
||||
'App\Livewire',
|
||||
'App\Models',
|
||||
'App\Providers',
|
||||
'App\Services',
|
||||
]);
|
||||
|
||||
arch('avoid open for extension')
|
||||
->expect('App')
|
||||
->classes()
|
||||
->toBeFinal()
|
||||
->ignoring([
|
||||
'App\Livewire',
|
||||
]);
|
||||
|
||||
arch('avoid abstraction')
|
||||
->expect('App')
|
||||
->not->toBeAbstract();
|
||||
|
||||
arch('factories')
|
||||
->expect('Database\Factories')
|
||||
->toExtend(Factory::class)
|
||||
->toHaveMethod('definition')
|
||||
->toOnlyBeUsedIn([
|
||||
'App\Models',
|
||||
]);
|
||||
|
||||
arch('models')
|
||||
->expect('App\Models')
|
||||
->toHaveMethod('casts')
|
||||
->toOnlyBeUsedIn([
|
||||
'App\Actions',
|
||||
'App\Http',
|
||||
'App\Jobs',
|
||||
'App\Livewire',
|
||||
'App\Models',
|
||||
'App\Observers',
|
||||
'App\Policies',
|
||||
'App\Providers',
|
||||
'App\Services',
|
||||
'Database\Factories',
|
||||
'Database\Seeders',
|
||||
]);
|
||||
|
||||
arch('actions')
|
||||
->expect('App\Actions')
|
||||
->toHaveMethod('handle');
|
||||
|
||||
Reference in New Issue
Block a user