Upgraded to Laravel 11

This commit is contained in:
Will Browning
2024-05-15 12:19:56 +01:00
parent e7a723df1c
commit 5cf59c4f7d
64 changed files with 1462 additions and 2029 deletions

5
.gitignore vendored
View File

@@ -1,3 +1,4 @@
/.phpunit.cache
/node_modules /node_modules
/public/hot /public/hot
/public/storage /public/storage
@@ -9,14 +10,18 @@
/storage/debugbar /storage/debugbar
/vendor /vendor
/postfix/vendor /postfix/vendor
/.fleet
/.idea /.idea
/.vscode /.vscode
/.vagrant /.vagrant
Homestead.json Homestead.json
Homestead.yaml Homestead.yaml
auth.json
npm-debug.log npm-debug.log
yarn-error.log yarn-error.log
.env .env
.env.backup
.env.production
.php-cs-fixer.cache .php-cs-fixer.cache
.phpunit.result.cache .phpunit.result.cache
ray.php ray.php

View File

@@ -351,12 +351,24 @@ class ReceiveEmail extends Command
// Try to determine the bounce type, HARD, SPAM, SOFT // Try to determine the bounce type, HARD, SPAM, SOFT
$bounceType = $this->getBounceType($dsn['Diagnostic-code'], $dsn['Status']); $bounceType = $this->getBounceType($dsn['Diagnostic-code'], $dsn['Status']);
$diagnosticCode = Str::limit($dsn['Diagnostic-code'], 497); $diagnosticCode = trim(Str::limit($dsn['Diagnostic-code'], 497));
} else { } else {
$bounceType = null; $bounceType = null;
$diagnosticCode = null; $diagnosticCode = null;
} }
// To sort '5.7.1 (delivery not authorized, message refused)' as status
if ($status = $dsn['Status'] ?? null) {
if (Str::length($status) > 5) {
if (is_null($diagnosticCode)) {
$diagnosticCode = trim(Str::substr($status, 5, 497));
}
$status = trim(Str::substr($status, 0, 5));
}
}
// Get the undelivered message // Get the undelivered message
$undeliveredMessage = $attachments->filter(function ($attachment) { $undeliveredMessage = $attachments->filter(function ($attachment) {
return in_array($attachment->getContentType(), ['text/rfc822-headers', 'message/rfc822']); return in_array($attachment->getContentType(), ['text/rfc822-headers', 'message/rfc822']);
@@ -394,7 +406,7 @@ class ReceiveEmail extends Command
'sender' => $undeliveredMessageHeaders['X-anonaddy-original-sender'] ?? null, 'sender' => $undeliveredMessageHeaders['X-anonaddy-original-sender'] ?? null,
'destination' => $bouncedEmailAddress, 'destination' => $bouncedEmailAddress,
'email_type' => $emailType, 'email_type' => $emailType,
'status' => $dsn['Status'] ?? null, 'status' => $status ?? null,
'code' => $diagnosticCode, 'code' => $diagnosticCode,
'attempted_at' => $outboundMessage->created_at, 'attempted_at' => $outboundMessage->created_at,
]); ]);

View File

@@ -1,48 +0,0 @@
<?php
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
'App\Console\Commands\ResetBandwidth',
];
/**
* Define the application's command schedule.
*
* @return void
*/
protected function schedule(Schedule $schedule)
{
$schedule->command('anonaddy:reset-bandwidth')->monthlyOn(1, '00:00');
$schedule->command('anonaddy:check-domains-sending-verification')->daily();
$schedule->command('anonaddy:check-domains-mx-validation')->daily();
$schedule->command('anonaddy:clear-failed-deliveries')->daily();
$schedule->command('anonaddy:clear-outbound-messages')->everySixHours();
$schedule->command('anonaddy:email-users-with-token-expiring-soon')->daily();
$schedule->command('auth:clear-resets')->daily();
$schedule->command('sanctum:prune-expired --hours=168')->daily();
$schedule->command('cache:prune-stale-tags')->hourly();
}
/**
* Register the commands for the application.
*
* @return void
*/
protected function commands()
{
$this->load(__DIR__.'/Commands');
require base_path('routes/console.php');
}
}

View File

@@ -1,27 +0,0 @@
<?php
namespace App\Exceptions;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* The list of the inputs that are never flashed to the session on validation exceptions.
*
* @var array<int, string>
*/
protected $dontFlash = [
'current_password',
'password',
'password_confirmation',
];
/**
* Register the exception handling callbacks for the application.
*/
public function register(): void
{
//
}
}

View File

@@ -7,7 +7,6 @@ use App\Http\Controllers\Controller;
use App\Models\Username; use App\Models\Username;
use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException; use Illuminate\Validation\ValidationException;
use Inertia\Inertia; use Inertia\Inertia;
@@ -137,20 +136,6 @@ class LoginController extends Controller
]); ]);
} }
/**
* The user has been authenticated.
*
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
// Check if the user's password needs rehashing
if (Hash::needsRehash($user->password)) {
$user->update(['password' => Hash::make($request->password)]);
}
}
/** /**
* The user has logged out of the application. * The user has logged out of the application.
* *

View File

@@ -44,7 +44,7 @@ class VerificationController extends Controller
*/ */
public function __construct() public function __construct()
{ {
$this->middleware('auth')->except('verify'); $this->middleware('auth');
$this->middleware('signed')->only('verify'); $this->middleware('signed')->only('verify');
$this->middleware('throttle:1,1')->only('resend'); $this->middleware('throttle:1,1')->only('resend');
$this->middleware('throttle:6,1')->only('verify'); $this->middleware('throttle:6,1')->only('verify');

View File

@@ -1,71 +0,0 @@
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
// \App\Http\Middleware\TrustHosts::class,
\App\Http\Middleware\TrustProxies::class,
\Illuminate\Http\Middleware\HandleCors::class,
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\HandleInertiaRequests::class, // Must be the last item!
],
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
/**
* The application's middleware aliases.
*
* Aliases may be used instead of class names to conveniently assign middleware to routes and groups.
*
* @var array
*/
protected $middlewareAliases = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'2fa' => \App\Http\Middleware\VerifyTwoFactorAuth::class,
'webauthn' => \App\Http\Middleware\VerifyWebauthn::class,
];
}

View File

@@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Auth\Middleware\Authenticate as Middleware;
use Illuminate\Http\Request;
class Authenticate extends Middleware
{
/**
* Get the path the user should be redirected to when they are not authenticated.
*/
protected function redirectTo(Request $request): ?string
{
return $request->expectsJson() ? null : route('login');
}
}

View File

@@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
//
];
}

View File

@@ -1,17 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
class PreventRequestsDuringMaintenance extends Middleware
{
/**
* The URIs that should be reachable while maintenance mode is enabled.
*
* @var array
*/
protected $except = [
//
];
}

View File

@@ -1,30 +0,0 @@
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, string ...$guards): Response
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
return $next($request);
}
}

View File

@@ -1,18 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
class TrimStrings extends Middleware
{
/**
* The names of the attributes that should not be trimmed.
*
* @var array
*/
protected $except = [
'password',
'password_confirmation',
];
}

View File

@@ -1,28 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
class TrustProxies extends Middleware
{
/**
* The trusted proxies for this application.
*
* @var array
*/
protected $proxies;
/**
* The headers that should be used to detect proxies.
*
* @var int
*/
protected $headers =
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB;
}

View File

@@ -1,24 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* Indicates whether the XSRF-TOKEN cookie should be set on the response.
*
* @var bool
*/
protected $addHttpCookie = true;
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/auth/login',
];
}

View File

@@ -23,7 +23,6 @@ class AppServiceProvider extends ServiceProvider
*/ */
public function register(): void public function register(): void
{ {
Sanctum::ignoreMigrations();
Webauthn::registerViewResponseUsing(RegisterViewResponse::class); Webauthn::registerViewResponseUsing(RegisterViewResponse::class);
Webauthn::registerSuccessResponseUsing(RegisterSuccessResponse::class); Webauthn::registerSuccessResponseUsing(RegisterSuccessResponse::class);
Webauthn::loginViewResponseUsing(LoginViewResponse::class); Webauthn::loginViewResponseUsing(LoginViewResponse::class);

52
artisan
View File

@@ -1,53 +1,15 @@
#!/usr/bin/env php #!/usr/bin/env php
<?php <?php
use Symfony\Component\Console\Input\ArgvInput;
define('LARAVEL_START', microtime(true)); define('LARAVEL_START', microtime(true));
/* // Register the Composer autoloader...
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader
| for our application. We just need to utilize it! We'll require it
| into the script here so that we do not have to worry about the
| loading of any our classes "manually". Feels great to relax.
|
*/
require __DIR__.'/vendor/autoload.php'; require __DIR__.'/vendor/autoload.php';
$app = require_once __DIR__.'/bootstrap/app.php'; // Bootstrap Laravel and handle the command...
$status = (require_once __DIR__.'/bootstrap/app.php')
->handleCommand(new ArgvInput);
/* exit($status);
|--------------------------------------------------------------------------
| Run The Artisan Application
|--------------------------------------------------------------------------
|
| When we run the console application, the current CLI command will be
| executed in this console and the response sent back to a terminal
| or another output device for the developers. Here goes nothing!
|
*/
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$status = $kernel->handle(
$input = new Symfony\Component\Console\Input\ArgvInput,
new Symfony\Component\Console\Output\ConsoleOutput
);
/*
|--------------------------------------------------------------------------
| Shutdown The Application
|--------------------------------------------------------------------------
|
| Once Artisan has finished running, we will fire off the shutdown events
| so that any final work may be done by the application before we shut
| down the process. This is the last thing to happen to the request.
|
*/
$kernel->terminate($input, $status);
exit($status);

View File

@@ -1,55 +1,52 @@
<?php <?php
/* use Illuminate\Foundation\Application;
|-------------------------------------------------------------------------- use Illuminate\Foundation\Configuration\Exceptions;
| Create The Application use Illuminate\Foundation\Configuration\Middleware;
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/
$app = new Illuminate\Foundation\Application( return Application::configure(basePath: dirname(__DIR__))
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) ->withRouting(
); web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
api: __DIR__.'/../routes/api.php',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->throttleWithRedis();
$middleware->throttleApi('api', true);
$middleware->authenticateSessions();
$middleware->statefulApi();
/* $middleware->trimStrings(
|-------------------------------------------------------------------------- except: [
| Bind Important Interfaces 'current',
|-------------------------------------------------------------------------- 'current_password',
| 'password',
| Next, we need to bind some important interfaces into the container so 'password_confirmation',
| we will be able to resolve them when needed. The kernels serve the 'current_password_2fa',
| incoming requests to this application from both the web and CLI. ]
| );
*/
$app->singleton( $middleware->validateCsrfTokens(
Illuminate\Contracts\Http\Kernel::class, except: [
App\Http\Kernel::class 'api/auth/login',
); ]
);
$app->singleton( $middleware->web(append: [
Illuminate\Contracts\Console\Kernel::class, \App\Http\Middleware\HandleInertiaRequests::class, // Must be the last item!
App\Console\Kernel::class ]);
);
$app->singleton( $middleware->alias([
Illuminate\Contracts\Debug\ExceptionHandler::class, '2fa' => \App\Http\Middleware\VerifyTwoFactorAuth::class,
App\Exceptions\Handler::class 'webauthn' => \App\Http\Middleware\VerifyWebauthn::class,
); ]);
})
/* ->withExceptions(function (Exceptions $exceptions) {
|-------------------------------------------------------------------------- $exceptions->dontFlash([
| Return The Application 'current',
|-------------------------------------------------------------------------- 'current_password',
| 'password',
| This script returns the application instance. The instance is given to 'password_confirmation',
| the calling script so we can separate the building of the instances 'current_password_2fa',
| from the actual running of the application and sending responses. ]);
| })->create();
*/
return $app;

11
bootstrap/providers.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
return [
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\HelperServiceProvider::class,
App\Providers\CustomMailServiceProvider::class,
];

View File

@@ -9,13 +9,12 @@
"require": { "require": {
"php": "^8.2", "php": "^8.2",
"asbiin/laravel-webauthn": "^4.0.0", "asbiin/laravel-webauthn": "^4.0.0",
"bacon/bacon-qr-code": "^2.0", "bacon/bacon-qr-code": "^3.0",
"chillerlan/php-qrcode": "^5.0", "chillerlan/php-qrcode": "^5.0",
"doctrine/dbal": "^3.0",
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"inertiajs/inertia-laravel": "^0.6.9", "inertiajs/inertia-laravel": "^1.0",
"laravel/framework": "^10.0", "laravel/framework": "^11.0",
"laravel/sanctum": "^3.2", "laravel/sanctum": "^4.0",
"laravel/tinker": "^2.7", "laravel/tinker": "^2.7",
"laravel/ui": "^4.0", "laravel/ui": "^4.0",
"maatwebsite/excel": "^3.1", "maatwebsite/excel": "^3.1",
@@ -29,8 +28,8 @@
"fakerphp/faker": "^1.9.1", "fakerphp/faker": "^1.9.1",
"laravel/pint": "^1.2", "laravel/pint": "^1.2",
"mockery/mockery": "^1.4.4", "mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0", "nunomaduro/collision": "^8.1",
"phpunit/phpunit": "^10.0", "phpunit/phpunit": "^11.0",
"spatie/laravel-ignition": "^2.0", "spatie/laravel-ignition": "^2.0",
"spatie/laravel-ray": "^1.29" "spatie/laravel-ray": "^1.29"
}, },

1578
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,5 @@
<?php <?php
use Illuminate\Support\Facades\Facade;
use Illuminate\Support\ServiceProvider;
return [ return [
/* /*
@@ -57,8 +54,6 @@ return [
'url' => env('APP_URL', 'http://localhost'), 'url' => env('APP_URL', 'http://localhost'),
'asset_url' => env('ASSET_URL'),
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Application Timezone | Application Timezone
@@ -124,6 +119,12 @@ return [
'key' => env('APP_KEY'), 'key' => env('APP_KEY'),
'previous_keys' => [
...array_filter(
explode(',', env('APP_PREVIOUS_KEYS', ''))
),
],
'cipher' => 'AES-256-CBC', 'cipher' => 'AES-256-CBC',
/* /*
@@ -140,57 +141,8 @@ return [
*/ */
'maintenance' => [ 'maintenance' => [
'driver' => 'file', 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
// 'store' => 'redis', 'store' => env('APP_MAINTENANCE_STORE', 'database'),
], ],
/*
|--------------------------------------------------------------------------
| Autoloaded Service Providers
|--------------------------------------------------------------------------
|
| The service providers listed here will be automatically loaded on the
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
'providers' => ServiceProvider::defaultProviders()->merge([
/*
* Laravel Framework Service Providers...
*/
/*
* Package Service Providers...
*/
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\HelperServiceProvider::class,
App\Providers\CustomMailServiceProvider::class,
])->toArray(),
/*
|--------------------------------------------------------------------------
| Class Aliases
|--------------------------------------------------------------------------
|
| This array of class aliases will be registered when this application
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
'aliases' => Facade::defaultAliases()->merge([
// 'Example' => App\Facades\Example::class,
])->toArray(),
]; ];

View File

@@ -61,6 +61,26 @@ return [
]) : [], ]) : [],
], ],
'mariadb' => [
'driver' => 'mariadb',
'url' => env('DB_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => env('DB_CHARSET', 'utf8mb4'),
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [ 'pgsql' => [
'driver' => 'pgsql', 'driver' => 'pgsql',
'host' => env('DB_HOST', '127.0.0.1'), 'host' => env('DB_HOST', '127.0.0.1'),
@@ -102,7 +122,10 @@ return [
| |
*/ */
'migrations' => 'migrations', 'migrations' => [
'table' => 'migrations',
'update_date_on_publish' => true,
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@@ -30,6 +30,7 @@ return [
'bcrypt' => [ 'bcrypt' => [
'rounds' => env('BCRYPT_ROUNDS', 12), 'rounds' => env('BCRYPT_ROUNDS', 12),
'verify' => env('HASH_VERIFY', true),
], ],
/* /*
@@ -44,9 +45,23 @@ return [
*/ */
'argon' => [ 'argon' => [
'memory' => 1024, 'memory' => env('ARGON_MEMORY', 65536),
'threads' => 2, 'threads' => env('ARGON_THREADS', 1),
'time' => 2, 'time' => env('ARGON_TIME', 4),
'verify' => env('HASH_VERIFY', true),
], ],
/*
|--------------------------------------------------------------------------
| Rehash On Login
|--------------------------------------------------------------------------
|
| Setting this option to true will tell Laravel to automatically rehash
| the user's password during login if the configured work factor for
| the algorithm has changed, allowing graceful upgrades of hashes.
|
*/
'rehash_on_login' => true,
]; ];

View File

@@ -76,8 +76,9 @@ return [
*/ */
'middleware' => [ 'middleware' => [
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, 'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, 'encrypt_cookies' => Illuminate\Cookie\Middleware\EncryptCookies::class,
'validate_csrf_token' => Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
], ],
]; ];

View File

@@ -70,6 +70,7 @@ class MoveAccountUsernameToUsernamesTable extends Migration
// Drop the username and catch_all column from the users table // Drop the username and catch_all column from the users table
Schema::table('users', function (Blueprint $table) { Schema::table('users', function (Blueprint $table) {
$table->dropIndex('users_username_unique');
$table->dropColumn('username'); $table->dropColumn('username');
}); });
// Separate call to dropColumn since SQLite doesn't support multiple calls // Separate call to dropColumn since SQLite doesn't support multiple calls

219
package-lock.json generated
View File

@@ -32,7 +32,7 @@
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^5.0.0", "@vitejs/plugin-vue": "^5.0.0",
"css-loader": "^6.0.0", "css-loader": "^7.0.0",
"husky": "^9.0.0", "husky": "^9.0.0",
"laravel-vite-plugin": "^1.0.0", "laravel-vite-plugin": "^1.0.0",
"lint-staged": "^15.0.0", "lint-staged": "^15.0.0",
@@ -442,9 +442,9 @@
} }
}, },
"node_modules/@headlessui/vue": { "node_modules/@headlessui/vue": {
"version": "1.7.21", "version": "1.7.22",
"resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.21.tgz", "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.22.tgz",
"integrity": "sha512-95cPFP5X9luB8/+smPENFv0ruaotT6epFnqK9EKldX2YpNkYM/qkN44oFoqQo+higlCAxDK5Pkg2E3FuD1Anyg==", "integrity": "sha512-Hoffjoolq1rY+LOfJ+B/OvkhuBXXBFgd8oBlN+l1TApma2dB0En0ucFZrwQtb33SmcCqd32EQd0y07oziXWNYg==",
"dependencies": { "dependencies": {
"@tanstack/vue-virtual": "^3.0.0-beta.60" "@tanstack/vue-virtual": "^3.0.0-beta.60"
}, },
@@ -723,9 +723,9 @@
"peer": true "peer": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "20.12.8", "version": "20.12.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.8.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
"integrity": "sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==", "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"undici-types": "~5.26.4" "undici-types": "~5.26.4"
@@ -745,36 +745,36 @@
} }
}, },
"node_modules/@vue/compiler-core": { "node_modules/@vue/compiler-core": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz",
"integrity": "sha512-N9Vil6Hvw7NaiyFUFBPXrAyETIGlQ8KcFMkyk6hW1Cl6NvoqvP+Y8p1Eqvx+UdqsnrnI9+HMUEJegzia3mhXmQ==", "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.24.4", "@babel/parser": "^7.24.4",
"@vue/shared": "3.4.26", "@vue/shared": "3.4.27",
"entities": "^4.5.0", "entities": "^4.5.0",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"source-map-js": "^1.2.0" "source-map-js": "^1.2.0"
} }
}, },
"node_modules/@vue/compiler-dom": { "node_modules/@vue/compiler-dom": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz",
"integrity": "sha512-4CWbR5vR9fMg23YqFOhr6t6WB1Fjt62d6xdFPyj8pxrYub7d+OgZaObMsoxaF9yBUHPMiPFK303v61PwAuGvZA==", "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==",
"dependencies": { "dependencies": {
"@vue/compiler-core": "3.4.26", "@vue/compiler-core": "3.4.27",
"@vue/shared": "3.4.26" "@vue/shared": "3.4.27"
} }
}, },
"node_modules/@vue/compiler-sfc": { "node_modules/@vue/compiler-sfc": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz",
"integrity": "sha512-It1dp+FAOCgluYSVYlDn5DtZBxk1NCiJJfu2mlQqa/b+k8GL6NG/3/zRbJnHdhV2VhxFghaDq5L4K+1dakW6cw==", "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==",
"dependencies": { "dependencies": {
"@babel/parser": "^7.24.4", "@babel/parser": "^7.24.4",
"@vue/compiler-core": "3.4.26", "@vue/compiler-core": "3.4.27",
"@vue/compiler-dom": "3.4.26", "@vue/compiler-dom": "3.4.27",
"@vue/compiler-ssr": "3.4.26", "@vue/compiler-ssr": "3.4.27",
"@vue/shared": "3.4.26", "@vue/shared": "3.4.27",
"estree-walker": "^2.0.2", "estree-walker": "^2.0.2",
"magic-string": "^0.30.10", "magic-string": "^0.30.10",
"postcss": "^8.4.38", "postcss": "^8.4.38",
@@ -782,57 +782,57 @@
} }
}, },
"node_modules/@vue/compiler-ssr": { "node_modules/@vue/compiler-ssr": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz",
"integrity": "sha512-FNwLfk7LlEPRY/g+nw2VqiDKcnDTVdCfBREekF8X74cPLiWHUX6oldktf/Vx28yh4STNy7t+/yuLoMBBF7YDiQ==", "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.4.26", "@vue/compiler-dom": "3.4.27",
"@vue/shared": "3.4.26" "@vue/shared": "3.4.27"
} }
}, },
"node_modules/@vue/reactivity": { "node_modules/@vue/reactivity": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz",
"integrity": "sha512-E/ynEAu/pw0yotJeLdvZEsp5Olmxt+9/WqzvKff0gE67tw73gmbx6tRkiagE/eH0UCubzSlGRebCbidB1CpqZQ==", "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==",
"dependencies": { "dependencies": {
"@vue/shared": "3.4.26" "@vue/shared": "3.4.27"
} }
}, },
"node_modules/@vue/runtime-core": { "node_modules/@vue/runtime-core": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz",
"integrity": "sha512-AFJDLpZvhT4ujUgZSIL9pdNcO23qVFh7zWCsNdGQBw8ecLNxOOnPcK9wTTIYCmBJnuPHpukOwo62a2PPivihqw==", "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==",
"dependencies": { "dependencies": {
"@vue/reactivity": "3.4.26", "@vue/reactivity": "3.4.27",
"@vue/shared": "3.4.26" "@vue/shared": "3.4.27"
} }
}, },
"node_modules/@vue/runtime-dom": { "node_modules/@vue/runtime-dom": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz",
"integrity": "sha512-UftYA2hUXR2UOZD/Fc3IndZuCOOJgFxJsWOxDkhfVcwLbsfh2CdXE2tG4jWxBZuDAs9J9PzRTUFt1PgydEtItw==", "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==",
"dependencies": { "dependencies": {
"@vue/runtime-core": "3.4.26", "@vue/runtime-core": "3.4.27",
"@vue/shared": "3.4.26", "@vue/shared": "3.4.27",
"csstype": "^3.1.3" "csstype": "^3.1.3"
} }
}, },
"node_modules/@vue/server-renderer": { "node_modules/@vue/server-renderer": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz",
"integrity": "sha512-xoGAqSjYDPGAeRWxeoYwqJFD/gw7mpgzOvSxEmjWaFO2rE6qpbD1PC172YRpvKhrihkyHJkNDADFXTfCyVGhKw==", "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==",
"dependencies": { "dependencies": {
"@vue/compiler-ssr": "3.4.26", "@vue/compiler-ssr": "3.4.27",
"@vue/shared": "3.4.26" "@vue/shared": "3.4.27"
}, },
"peerDependencies": { "peerDependencies": {
"vue": "3.4.26" "vue": "3.4.27"
} }
}, },
"node_modules/@vue/shared": { "node_modules/@vue/shared": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.26.tgz", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz",
"integrity": "sha512-Fg4zwR0GNnjzodMt3KRy2AWGMKQXByl56+4HjN87soxLNU9P5xcJkstAlIeEF3cU6UYOzmJl1tV0dVPGIljCnQ==" "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA=="
}, },
"node_modules/@vueform/multiselect": { "node_modules/@vueform/multiselect": {
"version": "2.6.7", "version": "2.6.7",
@@ -1269,9 +1269,9 @@
} }
}, },
"node_modules/caniuse-lite": { "node_modules/caniuse-lite": {
"version": "1.0.30001615", "version": "1.0.30001618",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001615.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz",
"integrity": "sha512-1IpazM5G3r38meiae0bHRnPhz+CBQ3ZLqbQMtrg+AsTPKAXgW38JNsXkyZ+v8waCsDmPq87lmfun5Q2AGysNEQ==", "integrity": "sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -1462,9 +1462,9 @@
} }
}, },
"node_modules/css-loader": { "node_modules/css-loader": {
"version": "6.11.0", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.1.tgz",
"integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "integrity": "sha512-OxIR5P2mjO1PSXk44bWuQ8XtMK4dpEqpIyERCx3ewOo3I8EmbcxMPUc5ScLtQfgXtOojoMv57So4V/C02HQLsw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"icss-utils": "^5.1.0", "icss-utils": "^5.1.0",
@@ -1477,7 +1477,7 @@
"semver": "^7.5.4" "semver": "^7.5.4"
}, },
"engines": { "engines": {
"node": ">= 12.13.0" "node": ">= 18.12.0"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
@@ -1485,7 +1485,7 @@
}, },
"peerDependencies": { "peerDependencies": {
"@rspack/core": "0.x || 1.x", "@rspack/core": "0.x || 1.x",
"webpack": "^5.0.0" "webpack": "^5.27.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"@rspack/core": { "@rspack/core": {
@@ -1602,9 +1602,9 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.4.756", "version": "1.4.769",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.756.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.769.tgz",
"integrity": "sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==" "integrity": "sha512-bZu7p623NEA2rHTc9K1vykl57ektSPQYFFqQir8BOYf6EKOB+yIsbFB9Kpm7Cgt6tsLr9sRkqfqSZUw7LP1XxQ=="
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "10.3.0", "version": "10.3.0",
@@ -1621,9 +1621,9 @@
} }
}, },
"node_modules/enhanced-resolve": { "node_modules/enhanced-resolve": {
"version": "5.16.0", "version": "5.16.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
"integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
"peer": true, "peer": true,
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.4", "graceful-fs": "^4.2.4",
@@ -1981,21 +1981,21 @@
} }
}, },
"node_modules/glob": { "node_modules/glob": {
"version": "10.3.12", "version": "10.3.15",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
"integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
"dependencies": { "dependencies": {
"foreground-child": "^3.1.0", "foreground-child": "^3.1.0",
"jackspeak": "^2.3.6", "jackspeak": "^2.3.6",
"minimatch": "^9.0.1", "minimatch": "^9.0.1",
"minipass": "^7.0.4", "minipass": "^7.0.4",
"path-scurry": "^1.10.2" "path-scurry": "^1.11.0"
}, },
"bin": { "bin": {
"glob": "dist/esm/bin.mjs" "glob": "dist/esm/bin.mjs"
}, },
"engines": { "engines": {
"node": ">=16 || 14 >=14.17" "node": ">=16 || 14 >=14.18"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
@@ -2438,15 +2438,11 @@
} }
}, },
"node_modules/lru-cache": { "node_modules/lru-cache": {
"version": "6.0.0", "version": "10.2.2",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
},
"engines": { "engines": {
"node": ">=10" "node": "14 || >=16.14"
} }
}, },
"node_modules/magic-string": { "node_modules/magic-string": {
@@ -2536,9 +2532,9 @@
} }
}, },
"node_modules/minipass": { "node_modules/minipass": {
"version": "7.1.0", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.0.tgz", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz",
"integrity": "sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==", "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==",
"engines": { "engines": {
"node": ">=16 || 14 >=14.17" "node": ">=16 || 14 >=14.17"
} }
@@ -2688,32 +2684,24 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
}, },
"node_modules/path-scurry": { "node_modules/path-scurry": {
"version": "1.10.2", "version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dependencies": { "dependencies": {
"lru-cache": "^10.2.0", "lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
}, },
"engines": { "engines": {
"node": ">=16 || 14 >=14.17" "node": ">=16 || 14 >=14.18"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.2.2",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
"integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
"engines": {
"node": "14 || >=16.14"
}
},
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew=="
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
@@ -3216,13 +3204,10 @@
} }
}, },
"node_modules/semver": { "node_modules/semver": {
"version": "7.6.0", "version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true, "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": { "bin": {
"semver": "bin/semver.js" "semver": "bin/semver.js"
}, },
@@ -3699,9 +3684,9 @@
"peer": true "peer": true
}, },
"node_modules/update-browserslist-db": { "node_modules/update-browserslist-db": {
"version": "1.0.15", "version": "1.0.16",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
"integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@@ -3718,7 +3703,7 @@
], ],
"dependencies": { "dependencies": {
"escalade": "^3.1.2", "escalade": "^3.1.2",
"picocolors": "^1.0.0" "picocolors": "^1.0.1"
}, },
"bin": { "bin": {
"update-browserslist-db": "cli.js" "update-browserslist-db": "cli.js"
@@ -3807,15 +3792,15 @@
} }
}, },
"node_modules/vue": { "node_modules/vue": {
"version": "3.4.26", "version": "3.4.27",
"resolved": "https://registry.npmjs.org/vue/-/vue-3.4.26.tgz", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz",
"integrity": "sha512-bUIq/p+VB+0xrJubaemrfhk1/FiW9iX+pDV+62I/XJ6EkspAO9/DXEjbDFoe8pIfOZBqfk45i9BMc41ptP/uRg==", "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==",
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.4.26", "@vue/compiler-dom": "3.4.27",
"@vue/compiler-sfc": "3.4.26", "@vue/compiler-sfc": "3.4.27",
"@vue/runtime-dom": "3.4.26", "@vue/runtime-dom": "3.4.27",
"@vue/server-renderer": "3.4.26", "@vue/server-renderer": "3.4.27",
"@vue/shared": "3.4.26" "@vue/shared": "3.4.27"
}, },
"peerDependencies": { "peerDependencies": {
"typescript": "*" "typescript": "*"
@@ -4100,12 +4085,6 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/yaml": { "node_modules/yaml": {
"version": "2.3.4", "version": "2.3.4",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",

View File

@@ -35,7 +35,7 @@
}, },
"devDependencies": { "devDependencies": {
"@vitejs/plugin-vue": "^5.0.0", "@vitejs/plugin-vue": "^5.0.0",
"css-loader": "^6.0.0", "css-loader": "^7.0.0",
"husky": "^9.0.0", "husky": "^9.0.0",
"laravel-vite-plugin": "^1.0.0", "laravel-vite-plugin": "^1.0.0",
"lint-staged": "^15.0.0", "lint-staged": "^15.0.0",

View File

@@ -234,7 +234,7 @@ try {
sendAction(getAction($domainActionQuery)); sendAction(getAction($domainActionQuery));
} }
} }
} catch (\Exception $e) { } catch (\Throwable $e) {
logData($e->getMessage()); logData($e->getMessage());
exit(0); exit(0);

View File

@@ -1,7 +1,7 @@
{ {
"require": { "require": {
"illuminate/database": "^10.0", "illuminate/database": "^11.0",
"vlucas/phpdotenv": "^5.5", "vlucas/phpdotenv": "^5.5",
"paragonie/constant_time_encoding": "^2.6" "paragonie/constant_time_encoding": "^3.0"
} }
} }

400
postfix/composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "46d9d11a3c6417de4c53dbd5441cef7a", "content-hash": "512b6f9ace84603f8d22b04432fc6cfc",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@@ -68,26 +68,26 @@
}, },
{ {
"name": "carbonphp/carbon-doctrine-types", "name": "carbonphp/carbon-doctrine-types",
"version": "2.1.0", "version": "3.2.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git",
"reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
"reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7.4 || ^8.0" "php": "^8.1"
}, },
"conflict": { "conflict": {
"doctrine/dbal": "<3.7.0 || >=4.0.0" "doctrine/dbal": "<4.0.0 || >=5.0.0"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": "^3.7.0", "doctrine/dbal": "^4.0.0",
"nesbot/carbon": "^2.71.0 || ^3.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0",
"phpunit/phpunit": "^10.3" "phpunit/phpunit": "^10.3"
}, },
@@ -117,7 +117,7 @@
], ],
"support": { "support": {
"issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues",
"source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0"
}, },
"funding": [ "funding": [
{ {
@@ -133,7 +133,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-12-11T17:09:12+00:00" "time": "2024-02-09T16:56:22+00:00"
}, },
{ {
"name": "doctrine/inflector", "name": "doctrine/inflector",
@@ -290,31 +290,31 @@
}, },
{ {
"name": "illuminate/collections", "name": "illuminate/collections",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/collections.git", "url": "https://github.com/illuminate/collections.git",
"reference": "f9589f1063a449111dcaa1d68285b507d9483a95" "reference": "3859367b55d977bcf5da86680c787dffaaacdb86"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/collections/zipball/f9589f1063a449111dcaa1d68285b507d9483a95", "url": "https://api.github.com/repos/illuminate/collections/zipball/3859367b55d977bcf5da86680c787dffaaacdb86",
"reference": "f9589f1063a449111dcaa1d68285b507d9483a95", "reference": "3859367b55d977bcf5da86680c787dffaaacdb86",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/conditionable": "^10.0", "illuminate/conditionable": "^11.0",
"illuminate/contracts": "^10.0", "illuminate/contracts": "^11.0",
"illuminate/macroable": "^10.0", "illuminate/macroable": "^11.0",
"php": "^8.1" "php": "^8.2"
}, },
"suggest": { "suggest": {
"symfony/var-dumper": "Required to use the dump method (^6.2)." "symfony/var-dumper": "Required to use the dump method (^7.0)."
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -341,20 +341,20 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-03-20T20:09:13+00:00" "time": "2024-05-05T15:36:09+00:00"
}, },
{ {
"name": "illuminate/conditionable", "name": "illuminate/conditionable",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/conditionable.git", "url": "https://github.com/illuminate/conditionable.git",
"reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" "reference": "8a558fec063b6a63da1c3af1d219c0f998edffeb"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", "url": "https://api.github.com/repos/illuminate/conditionable/zipball/8a558fec063b6a63da1c3af1d219c0f998edffeb",
"reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", "reference": "8a558fec063b6a63da1c3af1d219c0f998edffeb",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -363,7 +363,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -387,25 +387,25 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2023-02-03T08:06:17+00:00" "time": "2024-04-04T17:36:49+00:00"
}, },
{ {
"name": "illuminate/container", "name": "illuminate/container",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/container.git", "url": "https://github.com/illuminate/container.git",
"reference": "ddc26273085fad3c471b2602ad820e0097ff7939" "reference": "af979ecfd6dfa6583eae5dfe2e9a8840358f4ca7"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/container/zipball/ddc26273085fad3c471b2602ad820e0097ff7939", "url": "https://api.github.com/repos/illuminate/container/zipball/af979ecfd6dfa6583eae5dfe2e9a8840358f4ca7",
"reference": "ddc26273085fad3c471b2602ad820e0097ff7939", "reference": "af979ecfd6dfa6583eae5dfe2e9a8840358f4ca7",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"illuminate/contracts": "^10.0", "illuminate/contracts": "^11.0",
"php": "^8.1", "php": "^8.2",
"psr/container": "^1.1.1|^2.0.1" "psr/container": "^1.1.1|^2.0.1"
}, },
"provide": { "provide": {
@@ -414,7 +414,7 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -438,31 +438,31 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2023-06-18T09:12:03+00:00" "time": "2024-04-04T17:36:49+00:00"
}, },
{ {
"name": "illuminate/contracts", "name": "illuminate/contracts",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/contracts.git", "url": "https://github.com/illuminate/contracts.git",
"reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac" "reference": "8782f75e80ab3e6036842d24dbeead34a16f3a79"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/contracts/zipball/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", "url": "https://api.github.com/repos/illuminate/contracts/zipball/8782f75e80ab3e6036842d24dbeead34a16f3a79",
"reference": "8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac", "reference": "8782f75e80ab3e6036842d24dbeead34a16f3a79",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^8.1", "php": "^8.2",
"psr/container": "^1.1.1|^2.0.1", "psr/container": "^1.1.1|^2.0.1",
"psr/simple-cache": "^1.0|^2.0|^3.0" "psr/simple-cache": "^1.0|^2.0|^3.0"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -486,50 +486,45 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-01-15T18:52:32+00:00" "time": "2024-04-17T14:09:55+00:00"
}, },
{ {
"name": "illuminate/database", "name": "illuminate/database",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/database.git", "url": "https://github.com/illuminate/database.git",
"reference": "eb8edf206d3a6eea8894bc6e21f53469e27dd5c9" "reference": "49a2dd6fba0cfa0d3a11fd15433059f7f5fba45a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/database/zipball/eb8edf206d3a6eea8894bc6e21f53469e27dd5c9", "url": "https://api.github.com/repos/illuminate/database/zipball/49a2dd6fba0cfa0d3a11fd15433059f7f5fba45a",
"reference": "eb8edf206d3a6eea8894bc6e21f53469e27dd5c9", "reference": "49a2dd6fba0cfa0d3a11fd15433059f7f5fba45a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12",
"ext-pdo": "*", "ext-pdo": "*",
"illuminate/collections": "^10.0", "illuminate/collections": "^11.0",
"illuminate/container": "^10.0", "illuminate/container": "^11.0",
"illuminate/contracts": "^10.0", "illuminate/contracts": "^11.0",
"illuminate/macroable": "^10.0", "illuminate/macroable": "^11.0",
"illuminate/support": "^10.0", "illuminate/support": "^11.0",
"php": "^8.1" "php": "^8.2"
},
"conflict": {
"carbonphp/carbon-doctrine-types": ">=3.0",
"doctrine/dbal": ">=4.0"
}, },
"suggest": { "suggest": {
"doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).",
"ext-filter": "Required to use the Postgres database driver.", "ext-filter": "Required to use the Postgres database driver.",
"fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).",
"illuminate/console": "Required to use the database commands (^10.0).", "illuminate/console": "Required to use the database commands (^11.0).",
"illuminate/events": "Required to use the observers with Eloquent (^10.0).", "illuminate/events": "Required to use the observers with Eloquent (^11.0).",
"illuminate/filesystem": "Required to use the migrations (^10.0).", "illuminate/filesystem": "Required to use the migrations (^11.0).",
"illuminate/pagination": "Required to paginate the result set (^10.0).", "illuminate/pagination": "Required to paginate the result set (^11.0).",
"symfony/finder": "Required to use Eloquent model factories (^6.2)." "symfony/finder": "Required to use Eloquent model factories (^7.0)."
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -559,29 +554,29 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-04-29T13:23:17+00:00" "time": "2024-05-06T18:08:11+00:00"
}, },
{ {
"name": "illuminate/macroable", "name": "illuminate/macroable",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/macroable.git", "url": "https://github.com/illuminate/macroable.git",
"reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27" "reference": "e1be58f9b2af73f242dc6a9add1f376b3ec89eef"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27", "url": "https://api.github.com/repos/illuminate/macroable/zipball/e1be58f9b2af73f242dc6a9add1f376b3ec89eef",
"reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27", "reference": "e1be58f9b2af73f242dc6a9add1f376b3ec89eef",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^8.1" "php": "^8.2"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -605,20 +600,20 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2023-06-05T12:46:42+00:00" "time": "2023-06-08T14:08:27+00:00"
}, },
{ {
"name": "illuminate/support", "name": "illuminate/support",
"version": "v10.48.10", "version": "v11.7.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/illuminate/support.git", "url": "https://github.com/illuminate/support.git",
"reference": "ee3a1aaed36d916654ce0ae09dfbd38644a4f582" "reference": "7d733a1dbeb96557ba287e778bbf7bc61e23c31d"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/illuminate/support/zipball/ee3a1aaed36d916654ce0ae09dfbd38644a4f582", "url": "https://api.github.com/repos/illuminate/support/zipball/7d733a1dbeb96557ba287e778bbf7bc61e23c31d",
"reference": "ee3a1aaed36d916654ce0ae09dfbd38644a4f582", "reference": "7d733a1dbeb96557ba287e778bbf7bc61e23c31d",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -626,30 +621,33 @@
"ext-ctype": "*", "ext-ctype": "*",
"ext-filter": "*", "ext-filter": "*",
"ext-mbstring": "*", "ext-mbstring": "*",
"illuminate/collections": "^10.0", "illuminate/collections": "^11.0",
"illuminate/conditionable": "^10.0", "illuminate/conditionable": "^11.0",
"illuminate/contracts": "^10.0", "illuminate/contracts": "^11.0",
"illuminate/macroable": "^10.0", "illuminate/macroable": "^11.0",
"nesbot/carbon": "^2.67", "nesbot/carbon": "^2.72.2|^3.0",
"php": "^8.1", "php": "^8.2",
"voku/portable-ascii": "^2.0" "voku/portable-ascii": "^2.0"
}, },
"conflict": { "conflict": {
"tightenco/collect": "<5.5.33" "tightenco/collect": "<5.5.33"
}, },
"replace": {
"spatie/once": "*"
},
"suggest": { "suggest": {
"illuminate/filesystem": "Required to use the composer class (^10.0).", "illuminate/filesystem": "Required to use the composer class (^11.0).",
"league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).",
"ramsey/uuid": "Required to use Str::uuid() (^4.7).", "ramsey/uuid": "Required to use Str::uuid() (^4.7).",
"symfony/process": "Required to use the composer class (^6.2).", "symfony/process": "Required to use the composer class (^7.0).",
"symfony/uid": "Required to use Str::ulid() (^6.2).", "symfony/uid": "Required to use Str::ulid() (^7.0).",
"symfony/var-dumper": "Required to use the dd function (^6.2).", "symfony/var-dumper": "Required to use the dd function (^7.0).",
"vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)."
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "10.x-dev" "dev-master": "11.x-dev"
} }
}, },
"autoload": { "autoload": {
@@ -676,46 +674,45 @@
"issues": "https://github.com/laravel/framework/issues", "issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework" "source": "https://github.com/laravel/framework"
}, },
"time": "2024-04-07T17:47:33+00:00" "time": "2024-05-06T18:30:15+00:00"
}, },
{ {
"name": "nesbot/carbon", "name": "nesbot/carbon",
"version": "2.72.3", "version": "3.3.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/briannesbitt/Carbon.git", "url": "https://github.com/briannesbitt/Carbon.git",
"reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a",
"reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", "reference": "8ff64b92c1b1ec84fcde9f8bb9ff2ca34cb8a77a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"carbonphp/carbon-doctrine-types": "*", "carbonphp/carbon-doctrine-types": "*",
"ext-json": "*", "ext-json": "*",
"php": "^7.1.8 || ^8.0", "php": "^8.1",
"psr/clock": "^1.0", "psr/clock": "^1.0",
"symfony/clock": "^6.3 || ^7.0",
"symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php80": "^1.16", "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0"
"symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
}, },
"provide": { "provide": {
"psr/clock-implementation": "1.0" "psr/clock-implementation": "1.0"
}, },
"require-dev": { "require-dev": {
"doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", "doctrine/dbal": "^3.6.3 || ^4.0",
"doctrine/orm": "^2.7 || ^3.0", "doctrine/orm": "^2.15.2 || ^3.0",
"friendsofphp/php-cs-fixer": "^3.0", "friendsofphp/php-cs-fixer": "^3.52.1",
"kylekatarnls/multi-tester": "^2.0", "kylekatarnls/multi-tester": "^2.5.3",
"ondrejmirtes/better-reflection": "*", "ondrejmirtes/better-reflection": "^6.25.0.4",
"phpmd/phpmd": "^2.9", "phpmd/phpmd": "^2.15.0",
"phpstan/extension-installer": "^1.0", "phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^0.12.99 || ^1.7.14", "phpstan/phpstan": "^1.10.65",
"phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", "phpunit/phpunit": "^10.5.15",
"phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.9.0"
"squizlabs/php_codesniffer": "^3.4"
}, },
"bin": [ "bin": [
"bin/carbon" "bin/carbon"
@@ -723,8 +720,8 @@
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-3.x": "3.x-dev", "dev-master": "3.x-dev",
"dev-master": "2.x-dev" "dev-2.x": "2.x-dev"
}, },
"laravel": { "laravel": {
"providers": [ "providers": [
@@ -783,28 +780,28 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-01-25T10:35:09+00:00" "time": "2024-05-01T06:54:22+00:00"
}, },
{ {
"name": "paragonie/constant_time_encoding", "name": "paragonie/constant_time_encoding",
"version": "v2.6.3", "version": "v3.0.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/paragonie/constant_time_encoding.git", "url": "https://github.com/paragonie/constant_time_encoding.git",
"reference": "58c3f47f650c94ec05a151692652a868995d2938" "reference": "df1e7fde177501eee2037dd159cf04f5f301a512"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512",
"reference": "58c3f47f650c94ec05a151692652a868995d2938", "reference": "df1e7fde177501eee2037dd159cf04f5f301a512",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": "^7|^8" "php": "^8"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^6|^7|^8|^9", "phpunit/phpunit": "^9",
"vimeo/psalm": "^1|^2|^3|^4" "vimeo/psalm": "^4|^5"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -850,7 +847,7 @@
"issues": "https://github.com/paragonie/constant_time_encoding/issues", "issues": "https://github.com/paragonie/constant_time_encoding/issues",
"source": "https://github.com/paragonie/constant_time_encoding" "source": "https://github.com/paragonie/constant_time_encoding"
}, },
"time": "2022-06-14T06:56:20+00:00" "time": "2024-05-08T12:36:18+00:00"
}, },
{ {
"name": "phpoption/phpoption", "name": "phpoption/phpoption",
@@ -1080,35 +1077,37 @@
"time": "2021-10-29T13:26:27+00:00" "time": "2021-10-29T13:26:27+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/clock",
"version": "v3.5.0", "version": "v7.0.7",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/clock.git",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" "reference": "2008671acb4a30b01c453de193cf9c80549ebda6"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "url": "https://api.github.com/repos/symfony/clock/zipball/2008671acb4a30b01c453de193cf9c80549ebda6",
"reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", "reference": "2008671acb4a30b01c453de193cf9c80549ebda6",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1" "php": ">=8.2",
"psr/clock": "^1.0",
"symfony/polyfill-php83": "^1.28"
},
"provide": {
"psr/clock-implementation": "1.0"
}, },
"type": "library", "type": "library",
"extra": {
"branch-alias": {
"dev-main": "3.5-dev"
},
"thanks": {
"name": "symfony/contracts",
"url": "https://github.com/symfony/contracts"
}
},
"autoload": { "autoload": {
"files": [ "files": [
"function.php" "Resources/now.php"
],
"psr-4": {
"Symfony\\Component\\Clock\\": ""
},
"exclude-from-classmap": [
"/Tests/"
] ]
}, },
"notification-url": "https://packagist.org/downloads/", "notification-url": "https://packagist.org/downloads/",
@@ -1125,10 +1124,15 @@
"homepage": "https://symfony.com/contributors" "homepage": "https://symfony.com/contributors"
} }
], ],
"description": "A generic function and convention to trigger deprecation notices", "description": "Decouples applications from the system clock",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"keywords": [
"clock",
"psr20",
"time"
],
"support": { "support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" "source": "https://github.com/symfony/clock/tree/v7.0.7"
}, },
"funding": [ "funding": [
{ {
@@ -1144,7 +1148,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-18T09:32:20+00:00" "time": "2024-04-18T09:29:19+00:00"
}, },
{ {
"name": "symfony/polyfill-ctype", "name": "symfony/polyfill-ctype",
@@ -1386,34 +1390,110 @@
"time": "2024-01-29T20:11:03+00:00" "time": "2024-01-29T20:11:03+00:00"
}, },
{ {
"name": "symfony/translation", "name": "symfony/polyfill-php83",
"version": "v6.4.7", "version": "v1.29.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation.git", "url": "https://github.com/symfony/polyfill-php83.git",
"reference": "7495687c58bfd88b7883823747b0656d90679123" "reference": "86fcae159633351e5fd145d1c47de6c528f8caff"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/7495687c58bfd88b7883823747b0656d90679123", "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff",
"reference": "7495687c58bfd88b7883823747b0656d90679123", "reference": "86fcae159633351e5fd145d1c47de6c528f8caff",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=8.1", "php": ">=7.1",
"symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-php80": "^1.14"
},
"type": "library",
"extra": {
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Php83\\": ""
},
"classmap": [
"Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2024-01-29T20:11:03+00:00"
},
{
"name": "symfony/translation",
"version": "v7.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "1515e03afaa93e6419aba5d5c9d209159317100b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/1515e03afaa93e6419aba5d5c9d209159317100b",
"reference": "1515e03afaa93e6419aba5d5c9d209159317100b",
"shasum": ""
},
"require": {
"php": ">=8.2",
"symfony/polyfill-mbstring": "~1.0", "symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0" "symfony/translation-contracts": "^2.5|^3.0"
}, },
"conflict": { "conflict": {
"symfony/config": "<5.4", "symfony/config": "<6.4",
"symfony/console": "<5.4", "symfony/console": "<6.4",
"symfony/dependency-injection": "<5.4", "symfony/dependency-injection": "<6.4",
"symfony/http-client-contracts": "<2.5", "symfony/http-client-contracts": "<2.5",
"symfony/http-kernel": "<5.4", "symfony/http-kernel": "<6.4",
"symfony/service-contracts": "<2.5", "symfony/service-contracts": "<2.5",
"symfony/twig-bundle": "<5.4", "symfony/twig-bundle": "<6.4",
"symfony/yaml": "<5.4" "symfony/yaml": "<6.4"
}, },
"provide": { "provide": {
"symfony/translation-implementation": "2.3|3.0" "symfony/translation-implementation": "2.3|3.0"
@@ -1421,17 +1501,17 @@
"require-dev": { "require-dev": {
"nikic/php-parser": "^4.18|^5.0", "nikic/php-parser": "^4.18|^5.0",
"psr/log": "^1|^2|^3", "psr/log": "^1|^2|^3",
"symfony/config": "^5.4|^6.0|^7.0", "symfony/config": "^6.4|^7.0",
"symfony/console": "^5.4|^6.0|^7.0", "symfony/console": "^6.4|^7.0",
"symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/dependency-injection": "^6.4|^7.0",
"symfony/finder": "^5.4|^6.0|^7.0", "symfony/finder": "^6.4|^7.0",
"symfony/http-client-contracts": "^2.5|^3.0", "symfony/http-client-contracts": "^2.5|^3.0",
"symfony/http-kernel": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^6.4|^7.0",
"symfony/intl": "^5.4|^6.0|^7.0", "symfony/intl": "^6.4|^7.0",
"symfony/polyfill-intl-icu": "^1.21", "symfony/polyfill-intl-icu": "^1.21",
"symfony/routing": "^5.4|^6.0|^7.0", "symfony/routing": "^6.4|^7.0",
"symfony/service-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3",
"symfony/yaml": "^5.4|^6.0|^7.0" "symfony/yaml": "^6.4|^7.0"
}, },
"type": "library", "type": "library",
"autoload": { "autoload": {
@@ -1462,7 +1542,7 @@
"description": "Provides tools to internationalize your application", "description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/translation/tree/v6.4.7" "source": "https://github.com/symfony/translation/tree/v7.0.7"
}, },
"funding": [ "funding": [
{ {
@@ -1478,7 +1558,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-04-18T09:22:46+00:00" "time": "2024-04-18T09:29:19+00:00"
}, },
{ {
"name": "symfony/translation-contracts", "name": "symfony/translation-contracts",

View File

@@ -1,55 +1,17 @@
<?php <?php
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request; use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true)); define('LARAVEL_START', microtime(true));
/* // Determine if the application is in maintenance mode...
|-------------------------------------------------------------------------- if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
| Check If Application Is Under Maintenance require $maintenance;
|--------------------------------------------------------------------------
|
| If the application is maintenance / demo mode via the "down" command we
| will require this file so that any prerendered template can be shown
| instead of starting the framework, which could cause an exception.
|
*/
if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
require __DIR__.'/../storage/framework/maintenance.php';
} }
/* // Register the Composer autoloader...
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| this application. We just need to utilize it! We'll simply require it
| into the script here so we don't need to manually load our classes.
|
*/
require __DIR__.'/../vendor/autoload.php'; require __DIR__.'/../vendor/autoload.php';
/* // Bootstrap Laravel and handle the request...
|-------------------------------------------------------------------------- (require_once __DIR__.'/../bootstrap/app.php')
| Run The Application ->handleRequest(Request::capture());
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request using
| the application's HTTP kernel. Then, we will send the response back
| to this client's browser, allowing them to enjoy our application.
|
*/
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Kernel::class);
$response = tap($kernel->handle(
$request = Request::capture()
))->send();
$kernel->terminate($request, $response);

View File

@@ -773,14 +773,8 @@
v-for="formatOption in aliasFormatOptions" v-for="formatOption in aliasFormatOptions"
:key="formatOption.value" :key="formatOption.value"
:value="formatOption.value" :value="formatOption.value"
:disabled="createAliasDomainIsShared && formatOption.value === 'custom'"
> >
{{ formatOption.label }} {{ formatOption.label }}
{{
createAliasDomainIsShared && formatOption.value === 'custom'
? '(Not available for shared domains)'
: ''
}}
</option> </option>
</select> </select>
</div> </div>
@@ -1391,10 +1385,6 @@ const selectedAliasesToRestore = computed(() =>
_.filter(selectedRows.value, row => row.deleted_at !== null), _.filter(selectedRows.value, row => row.deleted_at !== null),
) )
const createAliasDomainIsShared = computed(() =>
props.sharedDomains.includes(createAliasDomain.value),
)
const links = ref(props.initialRows.links.slice(1, -1)) const links = ref(props.initialRows.links.slice(1, -1))
const aliasIdToEdit = ref('') const aliasIdToEdit = ref('')
@@ -1632,12 +1622,6 @@ watch(
{ deep: true }, { deep: true },
) )
watch(createAliasDomainIsShared, isShared => {
if (isShared) {
createAliasFormat.value = 'random_characters'
}
})
onMounted(() => { onMounted(() => {
debounceToolips() debounceToolips()
}) })

View File

@@ -957,7 +957,7 @@
</template> </template>
<script setup> <script setup>
import { useForm } from '@inertiajs/vue3' import { useForm, Link } from '@inertiajs/vue3'
import SettingsLayout from './../../Layouts/SettingsLayout.vue' import SettingsLayout from './../../Layouts/SettingsLayout.vue'
import { ExclamationCircleIcon } from '@heroicons/vue/20/solid' import { ExclamationCircleIcon } from '@heroicons/vue/20/solid'

View File

@@ -1,18 +0,0 @@
<?php
use Illuminate\Support\Facades\Broadcast;
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});

View File

@@ -1,7 +1,6 @@
<?php <?php
use Illuminate\Foundation\Inspiring; use Illuminate\Support\Facades\Schedule;
use Illuminate\Support\Facades\Artisan;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@@ -14,6 +13,12 @@ use Illuminate\Support\Facades\Artisan;
| |
*/ */
Artisan::command('inspire', function () { Schedule::command('anonaddy:reset-bandwidth')->monthlyOn(1, '00:00');
$this->comment(Inspiring::quote()); Schedule::command('anonaddy:check-domains-sending-verification')->daily();
})->purpose('Display an inspiring quote'); Schedule::command('anonaddy:check-domains-mx-validation')->daily();
Schedule::command('anonaddy:clear-failed-deliveries')->daily();
Schedule::command('anonaddy:clear-outbound-messages')->everySixHours();
Schedule::command('anonaddy:email-users-with-token-expiring-soon')->daily();
Schedule::command('auth:clear-resets')->daily();
Schedule::command('sanctum:prune-expired --hours=168')->daily();
Schedule::command('cache:prune-stale-tags')->hourly();

View File

@@ -1,22 +0,0 @@
<?php
namespace Tests;
use Illuminate\Contracts\Console\Kernel;
trait CreatesApplication
{
/**
* Creates the application.
*
* @return \Illuminate\Foundation\Application
*/
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Kernel::class)->bootstrap();
return $app;
}
}

View File

@@ -3,6 +3,7 @@
namespace Tests\Feature\Api; namespace Tests\Feature\Api;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class AccountDetailsTest extends TestCase class AccountDetailsTest extends TestCase
@@ -15,7 +16,7 @@ class AccountDetailsTest extends TestCase
parent::setUpSanctum(); parent::setUpSanctum();
} }
/** @test */ #[Test]
public function user_can_get_account_details() public function user_can_get_account_details()
{ {
$response = $this->json('GET', '/api/v1/account-details'); $response = $this->json('GET', '/api/v1/account-details');

View File

@@ -6,6 +6,7 @@ use App\Models\Alias;
use App\Models\AliasRecipient; use App\Models\AliasRecipient;
use App\Models\Recipient; use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class AliasRecipientsTest extends TestCase class AliasRecipientsTest extends TestCase
@@ -18,7 +19,7 @@ class AliasRecipientsTest extends TestCase
parent::setUpSanctum(); parent::setUpSanctum();
} }
/** @test */ #[Test]
public function user_can_attach_recipient_to_alias() public function user_can_attach_recipient_to_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -39,7 +40,7 @@ class AliasRecipientsTest extends TestCase
$this->assertEquals($recipient->email, $alias->recipients[0]->email); $this->assertEquals($recipient->email, $alias->recipients[0]->email);
} }
/** @test */ #[Test]
public function user_can_attach_multiple_recipients_to_alias() public function user_can_attach_multiple_recipients_to_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -67,7 +68,7 @@ class AliasRecipientsTest extends TestCase
$this->assertCount(3, $alias->recipients); $this->assertCount(3, $alias->recipients);
} }
/** @test */ #[Test]
public function user_can_update_existing_recipients_for_alias() public function user_can_update_existing_recipients_for_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -100,7 +101,7 @@ class AliasRecipientsTest extends TestCase
$this->assertCount(2, $alias->recipients); $this->assertCount(2, $alias->recipients);
} }
/** @test */ #[Test]
public function user_cannot_attach_unverified_recipient_to_alias() public function user_cannot_attach_unverified_recipient_to_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -121,7 +122,7 @@ class AliasRecipientsTest extends TestCase
$this->assertCount(0, $alias->recipients); $this->assertCount(0, $alias->recipients);
} }
/** @test */ #[Test]
public function user_cannot_attach_more_than_allowed_recipients_to_alias() public function user_cannot_attach_more_than_allowed_recipients_to_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -141,7 +142,7 @@ class AliasRecipientsTest extends TestCase
$this->assertCount(0, $alias->recipients); $this->assertCount(0, $alias->recipients);
} }
/** @test */ #[Test]
public function alias_recipient_record_is_deleted_if_recipient_is_deleted() public function alias_recipient_record_is_deleted_if_recipient_is_deleted()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([

View File

@@ -7,6 +7,7 @@ use App\Models\Domain;
use App\Models\Recipient; use App\Models\Recipient;
use App\Models\Username; use App\Models\Username;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class AliasesTest extends TestCase class AliasesTest extends TestCase
@@ -22,7 +23,7 @@ class AliasesTest extends TestCase
$this->user->defaultUsername->save(); $this->user->defaultUsername->save();
} }
/** @test */ #[Test]
public function user_can_get_all_aliases() public function user_can_get_all_aliases()
{ {
// Arrange // Arrange
@@ -38,7 +39,7 @@ class AliasesTest extends TestCase
$this->assertCount(3, $response->json()['data']); $this->assertCount(3, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_all_aliases_including_deleted() public function user_can_get_all_aliases_including_deleted()
{ {
// Arrange // Arrange
@@ -59,7 +60,7 @@ class AliasesTest extends TestCase
$this->assertCount(3, $response->json()['data']); $this->assertCount(3, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_only_deleted_aliases() public function user_can_get_only_deleted_aliases()
{ {
// Arrange // Arrange
@@ -80,7 +81,7 @@ class AliasesTest extends TestCase
$this->assertCount(2, $response->json()['data']); $this->assertCount(2, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_only_active_aliases() public function user_can_get_only_active_aliases()
{ {
// Arrange // Arrange
@@ -102,7 +103,7 @@ class AliasesTest extends TestCase
$this->assertCount(1, $response->json()['data']); $this->assertCount(1, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_individual_alias() public function user_can_get_individual_alias()
{ {
// Arrange // Arrange
@@ -119,7 +120,7 @@ class AliasesTest extends TestCase
$this->assertEquals($alias->email, $response->json()['data']['email']); $this->assertEquals($alias->email, $response->json()['data']['email']);
} }
/** @test */ #[Test]
public function user_can_generate_new_alias() public function user_can_generate_new_alias()
{ {
$response = $this->json('POST', '/api/v1/aliases', [ $response = $this->json('POST', '/api/v1/aliases', [
@@ -133,7 +134,7 @@ class AliasesTest extends TestCase
$this->assertEquals($this->user->aliases[0]->local_part, $response->getData()->data->local_part); $this->assertEquals($this->user->aliases[0]->local_part, $response->getData()->data->local_part);
} }
/** @test */ #[Test]
public function user_can_generate_alias_with_recipients() public function user_can_generate_alias_with_recipients()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -158,7 +159,7 @@ class AliasesTest extends TestCase
$this->assertContains($recipient->email, $this->user->aliases[0]->recipients->pluck('email')); $this->assertContains($recipient->email, $this->user->aliases[0]->recipients->pluck('email'));
} }
/** @test */ #[Test]
public function user_can_generate_new_uuid_alias() public function user_can_generate_new_uuid_alias()
{ {
$response = $this->json('POST', '/api/v1/aliases', [ $response = $this->json('POST', '/api/v1/aliases', [
@@ -174,7 +175,7 @@ class AliasesTest extends TestCase
$this->assertEquals($this->user->aliases[0]->id, $this->user->aliases[0]->local_part); $this->assertEquals($this->user->aliases[0]->id, $this->user->aliases[0]->local_part);
} }
/** @test */ #[Test]
public function user_can_generate_new_alias_with_local_part() public function user_can_generate_new_alias_with_local_part()
{ {
$response = $this->json('POST', '/api/v1/aliases', [ $response = $this->json('POST', '/api/v1/aliases', [
@@ -190,7 +191,7 @@ class AliasesTest extends TestCase
$this->assertEquals('valid-local-part@'.$this->user->username.'.anonaddy.com', $this->user->aliases[0]->email); $this->assertEquals('valid-local-part@'.$this->user->username.'.anonaddy.com', $this->user->aliases[0]->email);
} }
/** @test */ #[Test]
public function user_can_generate_new_alias_with_local_part_and_extension() public function user_can_generate_new_alias_with_local_part_and_extension()
{ {
$response = $this->json('POST', '/api/v1/aliases', [ $response = $this->json('POST', '/api/v1/aliases', [
@@ -207,7 +208,7 @@ class AliasesTest extends TestCase
$this->assertEquals('valid-local-part@'.$this->user->username.'.anonaddy.com', $this->user->aliases[0]->email); $this->assertEquals('valid-local-part@'.$this->user->username.'.anonaddy.com', $this->user->aliases[0]->email);
} }
/** @test */ #[Test]
public function user_cannot_generate_new_alias_with_invalid_local_part() public function user_cannot_generate_new_alias_with_invalid_local_part()
{ {
$response = $this->json('POST', '/api/v1/aliases', [ $response = $this->json('POST', '/api/v1/aliases', [
@@ -222,7 +223,7 @@ class AliasesTest extends TestCase
$response->assertJsonValidationErrors('local_part_without_extension'); $response->assertJsonValidationErrors('local_part_without_extension');
} }
/** @test */ #[Test]
public function user_cannot_generate_custom_alias_that_already_exists() public function user_cannot_generate_custom_alias_that_already_exists()
{ {
Alias::factory()->create([ Alias::factory()->create([
@@ -245,7 +246,7 @@ class AliasesTest extends TestCase
$response->assertJsonValidationErrors('local_part_without_extension'); $response->assertJsonValidationErrors('local_part_without_extension');
} }
/** @test */ #[Test]
public function user_can_generate_new_random_word_alias() public function user_can_generate_new_random_word_alias()
{ {
$response = $this->json('POST', '/api/v1/aliases', [ $response = $this->json('POST', '/api/v1/aliases', [
@@ -260,7 +261,7 @@ class AliasesTest extends TestCase
$this->assertNotEquals($this->user->aliases[0]->id, $this->user->aliases[0]->local_part); $this->assertNotEquals($this->user->aliases[0]->id, $this->user->aliases[0]->local_part);
} }
/** @test */ #[Test]
public function user_can_generate_new_alias_with_correct_aliasable_type() public function user_can_generate_new_alias_with_correct_aliasable_type()
{ {
Username::factory()->create([ Username::factory()->create([
@@ -285,7 +286,7 @@ class AliasesTest extends TestCase
$this->assertEquals($domain->id, $this->user->aliases[0]->aliasable_id); $this->assertEquals($domain->id, $this->user->aliases[0]->aliasable_id);
} }
/** @test */ #[Test]
public function user_can_update_alias_description() public function user_can_update_alias_description()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -300,7 +301,7 @@ class AliasesTest extends TestCase
$this->assertEquals('The new description', $response->getData()->data->description); $this->assertEquals('The new description', $response->getData()->data->description);
} }
/** @test */ #[Test]
public function user_can_update_alias_from_name() public function user_can_update_alias_from_name()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -315,7 +316,7 @@ class AliasesTest extends TestCase
$this->assertEquals('John Doe', $response->getData()->data->from_name); $this->assertEquals('John Doe', $response->getData()->data->from_name);
} }
/** @test */ #[Test]
public function user_can_delete_alias() public function user_can_delete_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -330,7 +331,7 @@ class AliasesTest extends TestCase
$this->assertFalse($alias->refresh()->active); $this->assertFalse($alias->refresh()->active);
} }
/** @test */ #[Test]
public function user_can_forget_alias() public function user_can_forget_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -347,7 +348,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_forget_shared_domain_alias() public function user_can_forget_shared_domain_alias()
{ {
$sharedDomainAlias = Alias::factory()->create([ $sharedDomainAlias = Alias::factory()->create([
@@ -381,7 +382,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_restore_deleted_alias() public function user_can_restore_deleted_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -395,7 +396,7 @@ class AliasesTest extends TestCase
$this->assertFalse($this->user->aliases[0]->trashed()); $this->assertFalse($this->user->aliases[0]->trashed());
} }
/** @test */ #[Test]
public function user_can_activate_alias() public function user_can_activate_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -411,7 +412,7 @@ class AliasesTest extends TestCase
$this->assertEquals(true, $response->getData()->data->active); $this->assertEquals(true, $response->getData()->data->active);
} }
/** @test */ #[Test]
public function user_can_deactivate_alias() public function user_can_deactivate_alias()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -425,7 +426,7 @@ class AliasesTest extends TestCase
$this->assertFalse($this->user->aliases[0]->active); $this->assertFalse($this->user->aliases[0]->active);
} }
/** @test */ #[Test]
public function user_can_bulk_get_aliases() public function user_can_bulk_get_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -447,7 +448,7 @@ class AliasesTest extends TestCase
$this->assertCount(2, $response->getData()->data); $this->assertCount(2, $response->getData()->data);
} }
/** @test */ #[Test]
public function user_cannot_bulk_get_invalid_aliases() public function user_cannot_bulk_get_invalid_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -464,7 +465,7 @@ class AliasesTest extends TestCase
$this->assertEquals('No aliases found', $response->getData()->message); $this->assertEquals('No aliases found', $response->getData()->message);
} }
/** @test */ #[Test]
public function user_can_bulk_activate_aliases() public function user_can_bulk_activate_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -493,7 +494,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_bulk_activate_invalid_aliases() public function user_cannot_bulk_activate_invalid_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -526,7 +527,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_bulk_deactivate_aliases() public function user_can_bulk_deactivate_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -555,7 +556,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_bulk_delete_aliases() public function user_can_bulk_delete_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -587,7 +588,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_bulk_restore_aliases() public function user_can_bulk_restore_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -619,7 +620,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_bulk_forget_aliases() public function user_can_bulk_forget_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -647,7 +648,7 @@ class AliasesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_bulk_update_recipients_for_aliases() public function user_can_bulk_update_recipients_for_aliases()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature\Api;
use App\Models\User; use App\Models\User;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ApiTokenDetailsTest extends TestCase class ApiTokenDetailsTest extends TestCase
@@ -15,7 +16,7 @@ class ApiTokenDetailsTest extends TestCase
parent::setUp(); parent::setUp();
} }
/** @test */ #[Test]
public function user_can_get_account_details() public function user_can_get_account_details()
{ {
$user = User::factory()->create()->fresh(); $user = User::factory()->create()->fresh();

View File

@@ -5,6 +5,7 @@ namespace Tests\Feature\Api;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Laravel\Sanctum\Sanctum; use Laravel\Sanctum\Sanctum;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ApiTokensTest extends TestCase class ApiTokensTest extends TestCase
@@ -21,7 +22,7 @@ class ApiTokensTest extends TestCase
Sanctum::actingAs($this->user, [], 'web'); Sanctum::actingAs($this->user, [], 'web');
} }
/** @test */ #[Test]
public function user_can_create_api_token() public function user_can_create_api_token()
{ {
$response = $this->post('/settings/personal-access-tokens', [ $response = $this->post('/settings/personal-access-tokens', [
@@ -38,7 +39,7 @@ class ApiTokensTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_create_api_token_with_incorrect_password() public function user_cannot_create_api_token_with_incorrect_password()
{ {
$response = $this->post('/settings/personal-access-tokens', [ $response = $this->post('/settings/personal-access-tokens', [
@@ -56,7 +57,7 @@ class ApiTokensTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_revoke_api_token() public function user_can_revoke_api_token()
{ {
$token = $this->user->createToken('New'); $token = $this->user->createToken('New');

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature\Api;
use App\Helpers\GitVersionHelper as Version; use App\Helpers\GitVersionHelper as Version;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class AppVersionTest extends TestCase class AppVersionTest extends TestCase
@@ -16,7 +17,7 @@ class AppVersionTest extends TestCase
parent::setUpSanctum(); parent::setUpSanctum();
} }
/** @test */ #[Test]
public function user_can_get_app_version() public function user_can_get_app_version()
{ {
$response = $this->json('GET', '/api/v1/app-version'); $response = $this->json('GET', '/api/v1/app-version');

View File

@@ -5,6 +5,7 @@ namespace Tests\Feature\Api;
use App\Models\Domain; use App\Models\Domain;
use App\Models\Recipient; use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class DomainsTest extends TestCase class DomainsTest extends TestCase
@@ -17,7 +18,7 @@ class DomainsTest extends TestCase
parent::setUpSanctum(); parent::setUpSanctum();
} }
/** @test */ #[Test]
public function user_can_get_all_domains() public function user_can_get_all_domains()
{ {
// Arrange // Arrange
@@ -33,7 +34,7 @@ class DomainsTest extends TestCase
$this->assertCount(3, $response->json()['data']); $this->assertCount(3, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_individual_domain() public function user_can_get_individual_domain()
{ {
// Arrange // Arrange
@@ -50,7 +51,7 @@ class DomainsTest extends TestCase
$this->assertEquals($domain->domain, $response->json()['data']['domain']); $this->assertEquals($domain->domain, $response->json()['data']['domain']);
} }
/** @test */ #[Test]
public function user_can_create_new_domain() public function user_can_create_new_domain()
{ {
$response = $this->json('POST', '/api/v1/domains', [ $response = $this->json('POST', '/api/v1/domains', [
@@ -61,7 +62,7 @@ class DomainsTest extends TestCase
$this->assertEquals('random.com', $response->getData()->data->domain); $this->assertEquals('random.com', $response->getData()->data->domain);
} }
/** @test */ #[Test]
public function user_can_not_create_the_same_domain() public function user_can_not_create_the_same_domain()
{ {
Domain::factory()->create([ Domain::factory()->create([
@@ -78,7 +79,7 @@ class DomainsTest extends TestCase
->assertJsonValidationErrors('domain'); ->assertJsonValidationErrors('domain');
} }
/** @test */ #[Test]
public function new_domain_must_be_a_valid_fqdn() public function new_domain_must_be_a_valid_fqdn()
{ {
$response = $this->json('POST', '/api/v1/domains', [ $response = $this->json('POST', '/api/v1/domains', [
@@ -90,7 +91,7 @@ class DomainsTest extends TestCase
->assertJsonValidationErrors('domain'); ->assertJsonValidationErrors('domain');
} }
/** @test */ #[Test]
public function new_domain_must_not_include_protocol() public function new_domain_must_not_include_protocol()
{ {
$response = $this->json('POST', '/api/v1/domains', [ $response = $this->json('POST', '/api/v1/domains', [
@@ -102,7 +103,7 @@ class DomainsTest extends TestCase
->assertJsonValidationErrors('domain'); ->assertJsonValidationErrors('domain');
} }
/** @test */ #[Test]
public function new_domain_must_not_be_local() public function new_domain_must_not_be_local()
{ {
$response = $this->json('POST', '/api/v1/domains', [ $response = $this->json('POST', '/api/v1/domains', [
@@ -114,7 +115,7 @@ class DomainsTest extends TestCase
->assertJsonValidationErrors('domain'); ->assertJsonValidationErrors('domain');
} }
/** @test */ #[Test]
public function new_domain_must_not_be_local_subdomain() public function new_domain_must_not_be_local_subdomain()
{ {
$response = $this->json('POST', '/api/v1/domains', [ $response = $this->json('POST', '/api/v1/domains', [
@@ -126,7 +127,7 @@ class DomainsTest extends TestCase
->assertJsonValidationErrors('domain'); ->assertJsonValidationErrors('domain');
} }
/** @test */ #[Test]
public function user_can_activate_domain() public function user_can_activate_domain()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -142,7 +143,7 @@ class DomainsTest extends TestCase
$this->assertEquals(true, $response->getData()->data->active); $this->assertEquals(true, $response->getData()->data->active);
} }
/** @test */ #[Test]
public function user_can_deactivate_domain() public function user_can_deactivate_domain()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -156,7 +157,7 @@ class DomainsTest extends TestCase
$this->assertFalse($this->user->domains[0]->active); $this->assertFalse($this->user->domains[0]->active);
} }
/** @test */ #[Test]
public function user_can_enable_catch_all_for_domain() public function user_can_enable_catch_all_for_domain()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -172,7 +173,7 @@ class DomainsTest extends TestCase
$this->assertTrue($response->getData()->data->catch_all); $this->assertTrue($response->getData()->data->catch_all);
} }
/** @test */ #[Test]
public function user_can_disable_catch_all_for_domain() public function user_can_disable_catch_all_for_domain()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -186,7 +187,7 @@ class DomainsTest extends TestCase
$this->assertFalse($this->user->domains[0]->catch_all); $this->assertFalse($this->user->domains[0]->catch_all);
} }
/** @test */ #[Test]
public function user_can_update_domain_description() public function user_can_update_domain_description()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -201,7 +202,7 @@ class DomainsTest extends TestCase
$this->assertEquals('The new description', $response->getData()->data->description); $this->assertEquals('The new description', $response->getData()->data->description);
} }
/** @test */ #[Test]
public function user_can_update_domain_from_name() public function user_can_update_domain_from_name()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -216,7 +217,7 @@ class DomainsTest extends TestCase
$this->assertEquals('John Doe', $response->getData()->data->from_name); $this->assertEquals('John Doe', $response->getData()->data->from_name);
} }
/** @test */ #[Test]
public function user_can_delete_domain() public function user_can_delete_domain()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -229,7 +230,7 @@ class DomainsTest extends TestCase
$this->assertEmpty($this->user->domains); $this->assertEmpty($this->user->domains);
} }
/** @test */ #[Test]
public function user_can_update_domain_default_recipient() public function user_can_update_domain_default_recipient()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -254,7 +255,7 @@ class DomainsTest extends TestCase
$this->assertEquals($newDefaultRecipient->email, $domain->refresh()->defaultRecipient->email); $this->assertEquals($newDefaultRecipient->email, $domain->refresh()->defaultRecipient->email);
} }
/** @test */ #[Test]
public function user_cannot_update_domain_default_recipient_with_unverified_recipient() public function user_cannot_update_domain_default_recipient_with_unverified_recipient()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([
@@ -278,7 +279,7 @@ class DomainsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_remove_domain_default_recipient() public function user_can_remove_domain_default_recipient()
{ {
$defaultRecipient = Recipient::factory()->create([ $defaultRecipient = Recipient::factory()->create([

View File

@@ -4,6 +4,7 @@ namespace Tests\Feature\Api;
use App\Models\FailedDelivery; use App\Models\FailedDelivery;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class FailedDeliveriesTest extends TestCase class FailedDeliveriesTest extends TestCase
@@ -18,7 +19,7 @@ class FailedDeliveriesTest extends TestCase
$this->user->recipients()->save($this->user->defaultRecipient); $this->user->recipients()->save($this->user->defaultRecipient);
} }
/** @test */ #[Test]
public function user_can_get_all_failed_deliveries() public function user_can_get_all_failed_deliveries()
{ {
// Arrange // Arrange
@@ -34,7 +35,7 @@ class FailedDeliveriesTest extends TestCase
$this->assertCount(3, $response->json()['data']); $this->assertCount(3, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_individual_failed_delivery() public function user_can_get_individual_failed_delivery()
{ {
// Arrange // Arrange
@@ -51,7 +52,7 @@ class FailedDeliveriesTest extends TestCase
$this->assertEquals($failedDelivery->code, $response->json()['data']['code']); $this->assertEquals($failedDelivery->code, $response->json()['data']['code']);
} }
/** @test */ #[Test]
public function user_can_delete_failed_delivery() public function user_can_delete_failed_delivery()
{ {
$failedDelivery = FailedDelivery::factory()->create([ $failedDelivery = FailedDelivery::factory()->create([

View File

@@ -6,6 +6,7 @@ use App\Models\Domain;
use App\Models\Recipient; use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class RecipientsTest extends TestCase class RecipientsTest extends TestCase
@@ -18,7 +19,7 @@ class RecipientsTest extends TestCase
parent::setUpSanctum(); parent::setUpSanctum();
} }
/** @test */ #[Test]
public function user_can_get_all_recipients() public function user_can_get_all_recipients()
{ {
// Arrange // Arrange
@@ -34,7 +35,7 @@ class RecipientsTest extends TestCase
$this->assertCount(4, $response->json()['data']); $this->assertCount(4, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_individual_recipient() public function user_can_get_individual_recipient()
{ {
// Arrange // Arrange
@@ -51,7 +52,7 @@ class RecipientsTest extends TestCase
$this->assertEquals($recipient->email, $response->json()['data']['email']); $this->assertEquals($recipient->email, $response->json()['data']['email']);
} }
/** @test */ #[Test]
public function user_can_create_new_recipient() public function user_can_create_new_recipient()
{ {
$response = $this->json('POST', '/api/v1/recipients', [ $response = $this->json('POST', '/api/v1/recipients', [
@@ -62,7 +63,7 @@ class RecipientsTest extends TestCase
$this->assertEquals('johndoe@example.com', $response->getData()->data->email); $this->assertEquals('johndoe@example.com', $response->getData()->data->email);
} }
/** @test */ #[Test]
public function user_can_create_auto_verified_recipient() public function user_can_create_auto_verified_recipient()
{ {
Notification::fake(); Notification::fake();
@@ -87,7 +88,7 @@ class RecipientsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function user_can_not_create_the_same_recipient() public function user_can_not_create_the_same_recipient()
{ {
Recipient::factory()->create([ Recipient::factory()->create([
@@ -104,7 +105,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('email'); ->assertJsonValidationErrors('email');
} }
/** @test */ #[Test]
public function user_can_not_create_the_same_recipient_in_uppercase() public function user_can_not_create_the_same_recipient_in_uppercase()
{ {
Recipient::factory()->create([ Recipient::factory()->create([
@@ -121,7 +122,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('email'); ->assertJsonValidationErrors('email');
} }
/** @test */ #[Test]
public function user_can_not_create_the_same_recipient_as_default() public function user_can_not_create_the_same_recipient_as_default()
{ {
$this->user->recipients()->save($this->user->defaultRecipient); $this->user->recipients()->save($this->user->defaultRecipient);
@@ -135,7 +136,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('email'); ->assertJsonValidationErrors('email');
} }
/** @test */ #[Test]
public function user_can_not_create_recipient_with_local_domain() public function user_can_not_create_recipient_with_local_domain()
{ {
$response = $this->json('POST', '/api/v1/recipients', [ $response = $this->json('POST', '/api/v1/recipients', [
@@ -147,7 +148,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('email'); ->assertJsonValidationErrors('email');
} }
/** @test */ #[Test]
public function user_can_not_create_recipient_with_local_custom_domain() public function user_can_not_create_recipient_with_local_custom_domain()
{ {
Domain::factory()->create([ Domain::factory()->create([
@@ -165,7 +166,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('email'); ->assertJsonValidationErrors('email');
} }
/** @test */ #[Test]
public function new_recipient_must_have_valid_email() public function new_recipient_must_have_valid_email()
{ {
$response = $this->json('POST', '/api/v1/recipients', [ $response = $this->json('POST', '/api/v1/recipients', [
@@ -177,7 +178,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('email'); ->assertJsonValidationErrors('email');
} }
/** @test */ #[Test]
public function user_can_delete_recipient() public function user_can_delete_recipient()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -190,7 +191,7 @@ class RecipientsTest extends TestCase
$this->assertCount(1, $this->user->recipients); $this->assertCount(1, $this->user->recipients);
} }
/** @test */ #[Test]
public function user_can_not_delete_default_recipient() public function user_can_not_delete_default_recipient()
{ {
$this->user->recipients()->save($this->user->defaultRecipient); $this->user->recipients()->save($this->user->defaultRecipient);
@@ -204,7 +205,7 @@ class RecipientsTest extends TestCase
$this->assertEquals($defaultRecipient->id, $this->user->defaultRecipient->id); $this->assertEquals($defaultRecipient->id, $this->user->defaultRecipient->id);
} }
/** @test */ #[Test]
public function user_can_add_gpg_key_to_recipient() public function user_can_add_gpg_key_to_recipient()
{ {
$gnupg = new \gnupg(); $gnupg = new \gnupg();
@@ -222,7 +223,7 @@ class RecipientsTest extends TestCase
$this->assertTrue($response->getData()->data->should_encrypt); $this->assertTrue($response->getData()->data->should_encrypt);
} }
/** @test */ #[Test]
public function gpg_key_must_be_correct_format() public function gpg_key_must_be_correct_format()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -238,7 +239,7 @@ class RecipientsTest extends TestCase
->assertJsonValidationErrors('key_data'); ->assertJsonValidationErrors('key_data');
} }
/** @test */ #[Test]
public function gpg_key_must_be_valid() public function gpg_key_must_be_valid()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -253,7 +254,7 @@ class RecipientsTest extends TestCase
->assertStatus(404); ->assertStatus(404);
} }
/** @test */ #[Test]
public function user_can_remove_gpg_key_from_recipient() public function user_can_remove_gpg_key_from_recipient()
{ {
$gnupg = new \gnupg(); $gnupg = new \gnupg();
@@ -272,7 +273,7 @@ class RecipientsTest extends TestCase
$this->assertFalse($this->user->recipients[0]->should_encrypt); $this->assertFalse($this->user->recipients[0]->should_encrypt);
} }
/** @test */ #[Test]
public function user_can_turn_on_encryption_for_recipient() public function user_can_turn_on_encryption_for_recipient()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -289,7 +290,7 @@ class RecipientsTest extends TestCase
$this->assertEquals(true, $response->getData()->data->should_encrypt); $this->assertEquals(true, $response->getData()->data->should_encrypt);
} }
/** @test */ #[Test]
public function user_can_turn_off_encryption_for_recipient() public function user_can_turn_off_encryption_for_recipient()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -304,7 +305,7 @@ class RecipientsTest extends TestCase
$this->assertFalse($this->user->recipients[0]->should_encrypt); $this->assertFalse($this->user->recipients[0]->should_encrypt);
} }
/** @test */ #[Test]
public function user_can_allow_recipient_to_send_or_reply() public function user_can_allow_recipient_to_send_or_reply()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -320,7 +321,7 @@ class RecipientsTest extends TestCase
$this->assertEquals(true, $response->getData()->data->can_reply_send); $this->assertEquals(true, $response->getData()->data->can_reply_send);
} }
/** @test */ #[Test]
public function user_can_disallow_recipient_from_sending_or_replying() public function user_can_disallow_recipient_from_sending_or_replying()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -334,7 +335,7 @@ class RecipientsTest extends TestCase
$this->assertFalse($this->user->recipients[1]->can_reply_send); $this->assertFalse($this->user->recipients[1]->can_reply_send);
} }
/** @test */ #[Test]
public function user_can_turn_on_inline_encryption() public function user_can_turn_on_inline_encryption()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -351,7 +352,7 @@ class RecipientsTest extends TestCase
$this->assertEquals(true, $response->getData()->data->inline_encryption); $this->assertEquals(true, $response->getData()->data->inline_encryption);
} }
/** @test */ #[Test]
public function user_can_turn_off_inline_encryption() public function user_can_turn_off_inline_encryption()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -366,7 +367,7 @@ class RecipientsTest extends TestCase
$this->assertFalse($this->user->recipients[0]->inline_encryption); $this->assertFalse($this->user->recipients[0]->inline_encryption);
} }
/** @test */ #[Test]
public function user_can_turn_on_protected_headers() public function user_can_turn_on_protected_headers()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -383,7 +384,7 @@ class RecipientsTest extends TestCase
$this->assertEquals(true, $response->getData()->data->protected_headers); $this->assertEquals(true, $response->getData()->data->protected_headers);
} }
/** @test */ #[Test]
public function user_can_turn_off_protected_headers() public function user_can_turn_off_protected_headers()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([

View File

@@ -9,6 +9,7 @@ use App\Models\Rule;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use PhpMimeMailParser\Parser; use PhpMimeMailParser\Parser;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class RulesTest extends TestCase class RulesTest extends TestCase
@@ -24,7 +25,7 @@ class RulesTest extends TestCase
$this->user->defaultUsername->save(); $this->user->defaultUsername->save();
} }
/** @test */ #[Test]
public function user_can_get_all_rules() public function user_can_get_all_rules()
{ {
// Arrange // Arrange
@@ -40,7 +41,7 @@ class RulesTest extends TestCase
$this->assertCount(3, $response->json()['data']); $this->assertCount(3, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_individual_rule() public function user_can_get_individual_rule()
{ {
// Arrange // Arrange
@@ -57,7 +58,7 @@ class RulesTest extends TestCase
$this->assertEquals($rule->name, $response->json()['data']['name']); $this->assertEquals($rule->name, $response->json()['data']['name']);
} }
/** @test */ #[Test]
public function user_can_create_new_rule() public function user_can_create_new_rule()
{ {
$response = $this->json('POST', '/api/v1/rules', [ $response = $this->json('POST', '/api/v1/rules', [
@@ -101,7 +102,7 @@ class RulesTest extends TestCase
$this->assertEquals('test rule', $response->getData()->data->name); $this->assertEquals('test rule', $response->getData()->data->name);
} }
/** @test */ #[Test]
public function user_cannot_create_invalid_rule() public function user_cannot_create_invalid_rule()
{ {
$response = $this->json('POST', '/api/v1/rules', [ $response = $this->json('POST', '/api/v1/rules', [
@@ -130,7 +131,7 @@ class RulesTest extends TestCase
$response->assertStatus(422); $response->assertStatus(422);
} }
/** @test */ #[Test]
public function user_can_update_rule() public function user_can_update_rule()
{ {
$rule = Rule::factory()->create([ $rule = Rule::factory()->create([
@@ -166,7 +167,7 @@ class RulesTest extends TestCase
$this->assertEquals('OR', $response->getData()->data->operator); $this->assertEquals('OR', $response->getData()->data->operator);
} }
/** @test */ #[Test]
public function user_can_delete_rule() public function user_can_delete_rule()
{ {
$rule = Rule::factory()->create([ $rule = Rule::factory()->create([
@@ -179,7 +180,7 @@ class RulesTest extends TestCase
$this->assertEmpty($this->user->rules); $this->assertEmpty($this->user->rules);
} }
/** @test */ #[Test]
public function user_can_activate_rule() public function user_can_activate_rule()
{ {
$rule = Rule::factory()->create([ $rule = Rule::factory()->create([
@@ -195,7 +196,7 @@ class RulesTest extends TestCase
$this->assertEquals(true, $response->getData()->data->active); $this->assertEquals(true, $response->getData()->data->active);
} }
/** @test */ #[Test]
public function user_can_deactivate_rule() public function user_can_deactivate_rule()
{ {
$rule = Rule::factory()->create([ $rule = Rule::factory()->create([
@@ -209,7 +210,7 @@ class RulesTest extends TestCase
$this->assertFalse($this->user->rules[0]->active); $this->assertFalse($this->user->rules[0]->active);
} }
/** @test */ #[Test]
public function it_can_apply_user_rules() public function it_can_apply_user_rules()
{ {
$rule = Rule::factory()->create([ $rule = Rule::factory()->create([
@@ -280,7 +281,7 @@ class RulesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function it_does_not_apply_rules_if_email_type_is_not_selected() public function it_does_not_apply_rules_if_email_type_is_not_selected()
{ {
$rule = Rule::factory()->create([ $rule = Rule::factory()->create([
@@ -349,7 +350,7 @@ class RulesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function it_can_apply_user_rules_in_correct_order() public function it_can_apply_user_rules_in_correct_order()
{ {
Rule::factory()->create([ Rule::factory()->create([
@@ -435,7 +436,7 @@ class RulesTest extends TestCase
$this->assertEquals('Applied after', $email->subject); $this->assertEquals('Applied after', $email->subject);
} }
/** @test */ #[Test]
public function user_can_reorder_rules() public function user_can_reorder_rules()
{ {
$ruleOne = Rule::factory()->create([ $ruleOne = Rule::factory()->create([
@@ -517,12 +518,12 @@ class RulesTest extends TestCase
if ($file === 'stream') { if ($file === 'stream') {
$fd = fopen('php://stdin', 'r'); $fd = fopen('php://stdin', 'r');
$this->rawEmail = ''; $rawEmail = '';
while (! feof($fd)) { while (! feof($fd)) {
$this->rawEmail .= fread($fd, 1024); $rawEmail .= fread($fd, 1024);
} }
fclose($fd); fclose($fd);
$parser->setText($this->rawEmail); $parser->setText($rawEmail);
} else { } else {
$parser->setPath($file); $parser->setPath($file);
} }

View File

@@ -7,6 +7,7 @@ use App\Models\Recipient;
use App\Models\User; use App\Models\User;
use App\Models\Username; use App\Models\Username;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class UsernamesTest extends TestCase class UsernamesTest extends TestCase
@@ -22,7 +23,7 @@ class UsernamesTest extends TestCase
$this->user->defaultUsername->save(); $this->user->defaultUsername->save();
} }
/** @test */ #[Test]
public function user_can_get_all_usernames() public function user_can_get_all_usernames()
{ {
// Arrange // Arrange
@@ -38,7 +39,7 @@ class UsernamesTest extends TestCase
$this->assertCount(4, $response->json()['data']); $this->assertCount(4, $response->json()['data']);
} }
/** @test */ #[Test]
public function user_can_get_individual_username() public function user_can_get_individual_username()
{ {
// Arrange // Arrange
@@ -55,7 +56,7 @@ class UsernamesTest extends TestCase
$this->assertEquals($username->username, $response->json()['data']['username']); $this->assertEquals($username->username, $response->json()['data']['username']);
} }
/** @test */ #[Test]
public function user_can_create_username() public function user_can_create_username()
{ {
$response = $this->json('POST', '/api/v1/usernames', [ $response = $this->json('POST', '/api/v1/usernames', [
@@ -67,7 +68,7 @@ class UsernamesTest extends TestCase
$this->assertEquals(1, $this->user->username_count); $this->assertEquals(1, $this->user->username_count);
} }
/** @test */ #[Test]
public function user_can_not_exceed_username_limit() public function user_can_not_exceed_username_limit()
{ {
$this->json('POST', '/api/v1/usernames', [ $this->json('POST', '/api/v1/usernames', [
@@ -91,7 +92,7 @@ class UsernamesTest extends TestCase
$this->assertCount(4, $this->user->usernames); $this->assertCount(4, $this->user->usernames);
} }
/** @test */ #[Test]
public function user_can_not_create_the_same_username() public function user_can_not_create_the_same_username()
{ {
Username::factory()->create([ Username::factory()->create([
@@ -108,7 +109,7 @@ class UsernamesTest extends TestCase
->assertJsonValidationErrors('username'); ->assertJsonValidationErrors('username');
} }
/** @test */ #[Test]
public function user_can_not_create_username_that_has_been_deleted() public function user_can_not_create_username_that_has_been_deleted()
{ {
DeletedUsername::factory()->create([ DeletedUsername::factory()->create([
@@ -124,7 +125,7 @@ class UsernamesTest extends TestCase
->assertJsonValidationErrors('username'); ->assertJsonValidationErrors('username');
} }
/** @test */ #[Test]
public function must_be_unique_across_users_and_usernames_tables() public function must_be_unique_across_users_and_usernames_tables()
{ {
$user = User::factory()->create()->fresh(); $user = User::factory()->create()->fresh();
@@ -138,7 +139,7 @@ class UsernamesTest extends TestCase
->assertJsonValidationErrors('username'); ->assertJsonValidationErrors('username');
} }
/** @test */ #[Test]
public function username_must_be_alpha_numeric() public function username_must_be_alpha_numeric()
{ {
$response = $this->json('POST', '/api/v1/usernames', [ $response = $this->json('POST', '/api/v1/usernames', [
@@ -150,7 +151,7 @@ class UsernamesTest extends TestCase
->assertJsonValidationErrors('username'); ->assertJsonValidationErrors('username');
} }
/** @test */ #[Test]
public function username_must_be_less_than_max_length() public function username_must_be_less_than_max_length()
{ {
$response = $this->json('POST', '/api/v1/usernames', [ $response = $this->json('POST', '/api/v1/usernames', [
@@ -162,7 +163,7 @@ class UsernamesTest extends TestCase
->assertJsonValidationErrors('username'); ->assertJsonValidationErrors('username');
} }
/** @test */ #[Test]
public function user_can_activate_username() public function user_can_activate_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -178,7 +179,7 @@ class UsernamesTest extends TestCase
$this->assertEquals(true, $response->getData()->data->active); $this->assertEquals(true, $response->getData()->data->active);
} }
/** @test */ #[Test]
public function user_can_deactivate_username() public function user_can_deactivate_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -192,7 +193,7 @@ class UsernamesTest extends TestCase
$this->assertFalse($this->user->usernames[1]->active); $this->assertFalse($this->user->usernames[1]->active);
} }
/** @test */ #[Test]
public function user_can_enable_catch_all_for_username() public function user_can_enable_catch_all_for_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -208,7 +209,7 @@ class UsernamesTest extends TestCase
$this->assertTrue($response->getData()->data->catch_all); $this->assertTrue($response->getData()->data->catch_all);
} }
/** @test */ #[Test]
public function user_can_disable_catch_all_for_username() public function user_can_disable_catch_all_for_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -222,7 +223,7 @@ class UsernamesTest extends TestCase
$this->assertFalse($this->user->usernames[1]->catch_all); $this->assertFalse($this->user->usernames[1]->catch_all);
} }
/** @test */ #[Test]
public function user_can_allow_login_for_username() public function user_can_allow_login_for_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -238,7 +239,7 @@ class UsernamesTest extends TestCase
$this->assertTrue($response->getData()->data->can_login); $this->assertTrue($response->getData()->data->can_login);
} }
/** @test */ #[Test]
public function user_can_disallow_login_for_username() public function user_can_disallow_login_for_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -252,7 +253,7 @@ class UsernamesTest extends TestCase
$this->assertFalse($this->user->usernames[1]->can_login); $this->assertFalse($this->user->usernames[1]->can_login);
} }
/** @test */ #[Test]
public function user_cannot_disallow_login_for_default_username() public function user_cannot_disallow_login_for_default_username()
{ {
$username = $this->user->defaultUsername; $username = $this->user->defaultUsername;
@@ -263,7 +264,7 @@ class UsernamesTest extends TestCase
$this->assertTrue($this->user->usernames[0]->can_login); $this->assertTrue($this->user->usernames[0]->can_login);
} }
/** @test */ #[Test]
public function user_can_update_usernames_description() public function user_can_update_usernames_description()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -278,7 +279,7 @@ class UsernamesTest extends TestCase
$this->assertEquals('The new description', $response->getData()->data->description); $this->assertEquals('The new description', $response->getData()->data->description);
} }
/** @test */ #[Test]
public function user_can_update_username_from_name() public function user_can_update_username_from_name()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -293,7 +294,7 @@ class UsernamesTest extends TestCase
$this->assertEquals('John Doe', $response->getData()->data->from_name); $this->assertEquals('John Doe', $response->getData()->data->from_name);
} }
/** @test */ #[Test]
public function user_can_delete_username() public function user_can_delete_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -308,7 +309,7 @@ class UsernamesTest extends TestCase
$this->assertEquals(DeletedUsername::first()->username, $username->username); $this->assertEquals(DeletedUsername::first()->username, $username->username);
} }
/** @test */ #[Test]
public function user_can_not_delete_default_username() public function user_can_not_delete_default_username()
{ {
$this->user->usernames()->save($this->user->defaultUsername); $this->user->usernames()->save($this->user->defaultUsername);
@@ -322,7 +323,7 @@ class UsernamesTest extends TestCase
$this->assertEquals($defaultUsername->id, $this->user->defaultUsername->id); $this->assertEquals($defaultUsername->id, $this->user->defaultUsername->id);
} }
/** @test */ #[Test]
public function user_can_update_username_default_recipient() public function user_can_update_username_default_recipient()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -346,7 +347,7 @@ class UsernamesTest extends TestCase
$this->assertEquals($newDefaultRecipient->email, $username->refresh()->defaultRecipient->email); $this->assertEquals($newDefaultRecipient->email, $username->refresh()->defaultRecipient->email);
} }
/** @test */ #[Test]
public function user_cannot_update_username_default_recipient_with_unverified_recipient() public function user_cannot_update_username_default_recipient_with_unverified_recipient()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -369,7 +370,7 @@ class UsernamesTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_remove_username_default_recipient() public function user_can_remove_username_default_recipient()
{ {
$defaultRecipient = Recipient::factory()->create([ $defaultRecipient = Recipient::factory()->create([

View File

@@ -5,6 +5,7 @@ namespace Tests\Feature;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Routing\Middleware\ThrottleRequestsWithRedis; use Illuminate\Routing\Middleware\ThrottleRequestsWithRedis;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ApiAuthenticationTest extends TestCase class ApiAuthenticationTest extends TestCase
@@ -20,7 +21,7 @@ class ApiAuthenticationTest extends TestCase
$this->user = $this->createUser('johndoe', null, ['password' => Hash::make('mypassword')]); $this->user = $this->createUser('johndoe', null, ['password' => Hash::make('mypassword')]);
} }
/** @test */ #[Test]
public function user_can_retreive_valid_access_token() public function user_can_retreive_valid_access_token()
{ {
$this->withoutMiddleware(ThrottleRequestsWithRedis::class); $this->withoutMiddleware(ThrottleRequestsWithRedis::class);
@@ -35,7 +36,7 @@ class ApiAuthenticationTest extends TestCase
$this->assertEquals($this->user->tokens[0]->token, hash('sha256', $response->json()['api_key'])); $this->assertEquals($this->user->tokens[0]->token, hash('sha256', $response->json()['api_key']));
} }
/** @test */ #[Test]
public function user_password_must_be_correct_to_get_access_token() public function user_password_must_be_correct_to_get_access_token()
{ {
$this->withoutMiddleware(ThrottleRequestsWithRedis::class); $this->withoutMiddleware(ThrottleRequestsWithRedis::class);
@@ -49,7 +50,7 @@ class ApiAuthenticationTest extends TestCase
$response->assertUnauthorized(); $response->assertUnauthorized();
} }
/** @test */ #[Test]
public function user_must_exist_to_get_access_token() public function user_must_exist_to_get_access_token()
{ {
$this->withoutMiddleware(ThrottleRequestsWithRedis::class); $this->withoutMiddleware(ThrottleRequestsWithRedis::class);
@@ -64,7 +65,7 @@ class ApiAuthenticationTest extends TestCase
$response->assertExactJson(['error' => 'The provided credentials are incorrect']); $response->assertExactJson(['error' => 'The provided credentials are incorrect']);
} }
/** @test */ #[Test]
public function user_is_throttled_by_middleware_for_too_many_requests() public function user_is_throttled_by_middleware_for_too_many_requests()
{ {
$this->json('POST', '/api/auth/login', [ $this->json('POST', '/api/auth/login', [
@@ -94,7 +95,7 @@ class ApiAuthenticationTest extends TestCase
$response->assertStatus(429); $response->assertStatus(429);
} }
/** @test */ #[Test]
public function user_cannot_get_access_token_with_webauthn_enabled() public function user_cannot_get_access_token_with_webauthn_enabled()
{ {
$this->withoutMiddleware(ThrottleRequestsWithRedis::class); $this->withoutMiddleware(ThrottleRequestsWithRedis::class);
@@ -122,7 +123,7 @@ class ApiAuthenticationTest extends TestCase
$response->assertExactJson(['error' => 'Security key authentication is not currently supported from the extension or mobile apps, please use an API key to login instead']); $response->assertExactJson(['error' => 'Security key authentication is not currently supported from the extension or mobile apps, please use an API key to login instead']);
} }
/** @test */ #[Test]
public function user_must_provide_correct_otp_if_enabled() public function user_must_provide_correct_otp_if_enabled()
{ {
$this->withoutMiddleware(ThrottleRequestsWithRedis::class); $this->withoutMiddleware(ThrottleRequestsWithRedis::class);

View File

@@ -6,9 +6,11 @@ use App\Enums\LoginRedirect;
use App\Models\Username; use App\Models\Username;
use App\Notifications\UsernameReminder; use App\Notifications\UsernameReminder;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Routing\Middleware\ThrottleRequestsWithRedis;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class LoginTest extends TestCase class LoginTest extends TestCase
@@ -24,7 +26,7 @@ class LoginTest extends TestCase
$this->user = $this->createUser('johndoe', null, ['password' => Hash::make('mypassword')]); $this->user = $this->createUser('johndoe', null, ['password' => Hash::make('mypassword')]);
} }
/** @test */ #[Test]
public function user_can_login_successfully() public function user_can_login_successfully()
{ {
$response = $this->post('/login', [ $response = $this->post('/login', [
@@ -37,7 +39,7 @@ class LoginTest extends TestCase
->assertSessionHasNoErrors(); ->assertSessionHasNoErrors();
} }
/** @test */ #[Test]
public function user_can_login_and_be_redirected_based_on_login_redirect_successfully() public function user_can_login_and_be_redirected_based_on_login_redirect_successfully()
{ {
$this->withoutMiddleware(ThrottleRequestsWithRedis::class); $this->withoutMiddleware(ThrottleRequestsWithRedis::class);
@@ -55,7 +57,7 @@ class LoginTest extends TestCase
->assertSessionHasNoErrors(); ->assertSessionHasNoErrors();
} }
/** @test */ #[Test]
public function user_can_login_with_any_username() public function user_can_login_with_any_username()
{ {
$username = Username::factory()->create([ $username = Username::factory()->create([
@@ -72,7 +74,7 @@ class LoginTest extends TestCase
->assertSessionHasNoErrors(); ->assertSessionHasNoErrors();
} }
/** @test */ #[Test]
public function user_can_login_successfully_using_backup_code() public function user_can_login_successfully_using_backup_code()
{ {
$this->user->update([ $this->user->update([
@@ -107,7 +109,7 @@ class LoginTest extends TestCase
->assertSessionHasNoErrors(); ->assertSessionHasNoErrors();
} }
/** @test */ #[Test]
public function user_can_receive_username_reminder_email() public function user_can_receive_username_reminder_email()
{ {
$this->withoutMiddleware(); $this->withoutMiddleware();
@@ -126,7 +128,7 @@ class LoginTest extends TestCase
); );
} }
/** @test */ #[Test]
public function username_reminder_email_not_sent_for_unkown_email() public function username_reminder_email_not_sent_for_unkown_email()
{ {
$this->withoutMiddleware(); $this->withoutMiddleware();

View File

@@ -13,6 +13,7 @@ use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ReceiveEmailTest extends TestCase class ReceiveEmailTest extends TestCase
@@ -28,7 +29,7 @@ class ReceiveEmailTest extends TestCase
$this->user = $this->createUser('johndoe'); $this->user = $this->createUser('johndoe');
} }
/** @test */ #[Test]
public function it_can_forward_email_from_file() public function it_can_forward_email_from_file()
{ {
Mail::fake(); Mail::fake();
@@ -64,7 +65,7 @@ class ReceiveEmailTest extends TestCase
Notification::assertNothingSent(); Notification::assertNothingSent();
} }
/** @test */ #[Test]
public function it_can_forward_email_from_file_with_capitals() public function it_can_forward_email_from_file_with_capitals()
{ {
Mail::fake(); Mail::fake();
@@ -97,7 +98,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_from_file_with_attachment() public function it_can_forward_email_from_file_with_attachment()
{ {
Mail::fake(); Mail::fake();
@@ -130,7 +131,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_from_file_to_multiple_recipients() public function it_can_forward_email_from_file_to_multiple_recipients()
{ {
Mail::fake(); Mail::fake();
@@ -175,7 +176,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_from_file_with_extension() public function it_can_forward_email_from_file_with_extension()
{ {
Mail::fake(); Mail::fake();
@@ -209,7 +210,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_with_existing_alias() public function it_can_forward_email_with_existing_alias()
{ {
Mail::fake(); Mail::fake();
@@ -250,7 +251,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_with_uuid_generated_alias() public function it_can_forward_email_with_uuid_generated_alias()
{ {
Mail::fake(); Mail::fake();
@@ -300,7 +301,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_with_random_word_generated_alias() public function it_can_forward_email_with_random_word_generated_alias()
{ {
Mail::fake(); Mail::fake();
@@ -349,7 +350,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_with_existing_alias_and_receipients() public function it_can_forward_email_with_existing_alias_and_receipients()
{ {
Mail::fake(); Mail::fake();
@@ -410,7 +411,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_attach_recipients_to_new_alias_with_extension() public function it_can_attach_recipients_to_new_alias_with_extension()
{ {
Mail::fake(); Mail::fake();
@@ -455,7 +456,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_not_attach_unverified_recipient_to_new_alias_with_extension() public function it_can_not_attach_unverified_recipient_to_new_alias_with_extension()
{ {
Mail::fake(); Mail::fake();
@@ -500,7 +501,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_does_not_send_email_if_default_recipient_has_not_yet_been_verified() public function it_does_not_send_email_if_default_recipient_has_not_yet_been_verified()
{ {
Mail::fake(); Mail::fake();
@@ -532,7 +533,7 @@ class ReceiveEmailTest extends TestCase
Mail::assertNotQueued(ForwardEmail::class); Mail::assertNotQueued(ForwardEmail::class);
} }
/** @test */ #[Test]
public function it_can_unsubscribe_alias_by_emailing_list_unsubscribe() public function it_can_unsubscribe_alias_by_emailing_list_unsubscribe()
{ {
Mail::fake(); Mail::fake();
@@ -584,7 +585,7 @@ class ReceiveEmailTest extends TestCase
Mail::assertNotQueued(ForwardEmail::class); Mail::assertNotQueued(ForwardEmail::class);
} }
/** @test */ #[Test]
public function it_cannot_unsubscribe_alias_if_not_a_verified_user_recipient() public function it_cannot_unsubscribe_alias_if_not_a_verified_user_recipient()
{ {
Mail::fake(); Mail::fake();
@@ -631,7 +632,7 @@ class ReceiveEmailTest extends TestCase
Mail::assertNotQueued(ForwardEmail::class); Mail::assertNotQueued(ForwardEmail::class);
} }
/** @test */ #[Test]
public function it_can_forward_email_to_admin_username_for_root_domain() public function it_can_forward_email_to_admin_username_for_root_domain()
{ {
Mail::fake(); Mail::fake();
@@ -667,7 +668,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_for_custom_domain() public function it_can_forward_email_for_custom_domain()
{ {
Mail::fake(); Mail::fake();
@@ -709,7 +710,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_for_custom_domain_with_verified_sending() public function it_can_forward_email_for_custom_domain_with_verified_sending()
{ {
Mail::fake(); Mail::fake();
@@ -752,7 +753,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_for_username() public function it_can_forward_email_for_username()
{ {
Mail::fake(); Mail::fake();
@@ -793,7 +794,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_send_near_bandwidth_limit_notification() public function it_can_send_near_bandwidth_limit_notification()
{ {
Notification::fake(); Notification::fake();
@@ -829,7 +830,7 @@ class ReceiveEmailTest extends TestCase
); );
} }
/** @test */ #[Test]
public function it_does_not_send_near_bandwidth_limit_notification_more_than_once_per_day() public function it_does_not_send_near_bandwidth_limit_notification_more_than_once_per_day()
{ {
Notification::fake(); Notification::fake();
@@ -872,7 +873,7 @@ class ReceiveEmailTest extends TestCase
); );
} }
/** @test */ #[Test]
public function it_can_forward_email_from_file_for_all_domains() public function it_can_forward_email_from_file_for_all_domains()
{ {
Mail::fake(); Mail::fake();
@@ -905,7 +906,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_for_custom_domain_with_default_recipient() public function it_can_forward_email_for_custom_domain_with_default_recipient()
{ {
Mail::fake(); Mail::fake();
@@ -952,7 +953,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_for_username_with_default_recipient() public function it_can_forward_email_for_username_with_default_recipient()
{ {
Mail::fake(); Mail::fake();
@@ -998,7 +999,7 @@ class ReceiveEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_forward_email_using_old_reply_to_and_from_headers() public function it_can_forward_email_using_old_reply_to_and_from_headers()
{ {
Mail::fake(); Mail::fake();

View File

@@ -13,13 +13,14 @@ use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\URL;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class RegistrationTest extends TestCase class RegistrationTest extends TestCase
{ {
use LazilyRefreshDatabase; use LazilyRefreshDatabase;
/** @test */ #[Test]
public function user_can_register_successfully() public function user_can_register_successfully()
{ {
Notification::fake(); Notification::fake();
@@ -48,7 +49,7 @@ class RegistrationTest extends TestCase
); );
} }
/** @test */ #[Test]
public function user_cannot_register_with_invalid_characters() public function user_cannot_register_with_invalid_characters()
{ {
$response = $this->post('/register', [ $response = $this->post('/register', [
@@ -66,7 +67,7 @@ class RegistrationTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_verify_email_successfully() public function user_can_verify_email_successfully()
{ {
$user = User::factory()->create()->fresh(); $user = User::factory()->create()->fresh();
@@ -93,7 +94,7 @@ class RegistrationTest extends TestCase
$this->assertNotNull($user->refresh()->email_verified_at); $this->assertNotNull($user->refresh()->email_verified_at);
} }
/** @test */ #[Test]
public function user_must_use_valid_username() public function user_must_use_valid_username()
{ {
$response = $this->post('/register', [ $response = $this->post('/register', [
@@ -110,7 +111,7 @@ class RegistrationTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_must_confirm_email() public function user_must_confirm_email()
{ {
$response = $this->post('/register', [ $response = $this->post('/register', [
@@ -127,7 +128,7 @@ class RegistrationTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_register_with_existing_email() public function user_cannot_register_with_existing_email()
{ {
$user = User::factory()->create()->fresh(); $user = User::factory()->create()->fresh();
@@ -153,7 +154,7 @@ class RegistrationTest extends TestCase
$response->assertSessionHasErrors(['email']); $response->assertSessionHasErrors(['email']);
} }
/** @test */ #[Test]
public function user_cannot_register_with_existing_username() public function user_cannot_register_with_existing_username()
{ {
$user = User::factory()->create()->fresh(); $user = User::factory()->create()->fresh();
@@ -174,7 +175,7 @@ class RegistrationTest extends TestCase
$response->assertSessionHasErrors(['username']); $response->assertSessionHasErrors(['username']);
} }
/** @test */ #[Test]
public function user_cannot_register_with_blacklisted_username() public function user_cannot_register_with_blacklisted_username()
{ {
$response = $this->post('/register', [ $response = $this->post('/register', [
@@ -192,7 +193,7 @@ class RegistrationTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_register_with_uppercase_blacklisted_username() public function user_cannot_register_with_uppercase_blacklisted_username()
{ {
$response = $this->post('/register', [ $response = $this->post('/register', [
@@ -210,7 +211,7 @@ class RegistrationTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_register_with_deleted_username() public function user_cannot_register_with_deleted_username()
{ {
DeletedUsername::create(['username' => 'johndoe']); DeletedUsername::create(['username' => 'johndoe']);
@@ -230,7 +231,7 @@ class RegistrationTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_register_with_uppercase_deleted_username() public function user_cannot_register_with_uppercase_deleted_username()
{ {
DeletedUsername::create(['username' => 'johndoe']); DeletedUsername::create(['username' => 'johndoe']);

View File

@@ -7,6 +7,7 @@ use App\Models\Alias;
use App\Models\Recipient; use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ReplyToEmailTest extends TestCase class ReplyToEmailTest extends TestCase
@@ -22,7 +23,7 @@ class ReplyToEmailTest extends TestCase
$this->user = $this->createUser('johndoe', 'will@anonaddy.com'); $this->user = $this->createUser('johndoe', 'will@anonaddy.com');
} }
/** @test */ #[Test]
public function it_can_reply_to_email_from_file() public function it_can_reply_to_email_from_file()
{ {
Mail::fake(); Mail::fake();
@@ -58,7 +59,7 @@ class ReplyToEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_cannot_reply_using_unverified_recipient() public function it_cannot_reply_using_unverified_recipient()
{ {
Mail::fake(); Mail::fake();
@@ -104,7 +105,7 @@ class ReplyToEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_reply_to_multiple_emails_from_file() public function it_can_reply_to_multiple_emails_from_file()
{ {
Mail::fake(); Mail::fake();

View File

@@ -6,6 +6,7 @@ use App\Mail\SendFromEmail;
use App\Models\Alias; use App\Models\Alias;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class SendFromEmailTest extends TestCase class SendFromEmailTest extends TestCase
@@ -21,7 +22,7 @@ class SendFromEmailTest extends TestCase
$this->user = $this->createUser('johndoe', 'will@anonaddy.com'); $this->user = $this->createUser('johndoe', 'will@anonaddy.com');
} }
/** @test */ #[Test]
public function it_can_send_email_from_alias_from_file() public function it_can_send_email_from_alias_from_file()
{ {
Mail::fake(); Mail::fake();
@@ -57,7 +58,7 @@ class SendFromEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_send_from_alias_to_multiple_emails_from_file() public function it_can_send_from_alias_to_multiple_emails_from_file()
{ {
Mail::fake(); Mail::fake();
@@ -101,7 +102,7 @@ class SendFromEmailTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function it_can_send_email_from_catch_all_alias_that_does_not_yet_exist() public function it_can_send_email_from_catch_all_alias_that_does_not_yet_exist()
{ {
Mail::fake(); Mail::fake();

View File

@@ -19,6 +19,7 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Maatwebsite\Excel\Facades\Excel; use Maatwebsite\Excel\Facades\Excel;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class SettingsTest extends TestCase class SettingsTest extends TestCase
@@ -35,7 +36,7 @@ class SettingsTest extends TestCase
$this->actingAs($this->user); $this->actingAs($this->user);
} }
/** @test */ #[Test]
public function user_can_update_default_recipient() public function user_can_update_default_recipient()
{ {
Notification::fake(); Notification::fake();
@@ -64,7 +65,7 @@ class SettingsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function user_cannot_update_to_unverified_default_recipient() public function user_cannot_update_to_unverified_default_recipient()
{ {
$newDefaultRecipient = Recipient::factory()->create([ $newDefaultRecipient = Recipient::factory()->create([
@@ -82,7 +83,7 @@ class SettingsTest extends TestCase
$this->assertNotEquals($this->user->default_recipient_id, $newDefaultRecipient->id); $this->assertNotEquals($this->user->default_recipient_id, $newDefaultRecipient->id);
} }
/** @test */ #[Test]
public function user_can_edit_default_recipient() public function user_can_edit_default_recipient()
{ {
Notification::fake(); Notification::fake();
@@ -117,7 +118,7 @@ class SettingsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function user_must_enter_current_password_to_edit_default_recipient() public function user_must_enter_current_password_to_edit_default_recipient()
{ {
Notification::fake(); Notification::fake();
@@ -136,7 +137,7 @@ class SettingsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function user_can_update_default_username() public function user_can_update_default_username()
{ {
$currentDefaultUsername = $this->user->defaultUsername; $currentDefaultUsername = $this->user->defaultUsername;
@@ -164,7 +165,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_update_default_alias_domain() public function user_can_update_default_alias_domain()
{ {
$defaultAliasDomain = $this->user->username.'.anonaddy.me'; $defaultAliasDomain = $this->user->username.'.anonaddy.me';
@@ -180,7 +181,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_update_default_alias_domain_if_invalid() public function user_cannot_update_default_alias_domain_if_invalid()
{ {
$response = $this->post('/settings/default-alias-domain', [ $response = $this->post('/settings/default-alias-domain', [
@@ -195,7 +196,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_update_default_alias_format() public function user_can_update_default_alias_format()
{ {
$defaultAliasFormat = 'random_words'; $defaultAliasFormat = 'random_words';
@@ -211,7 +212,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_update_default_alias_format_if_invalid() public function user_cannot_update_default_alias_format_if_invalid()
{ {
$response = $this->post('/settings/default-alias-format', [ $response = $this->post('/settings/default-alias-format', [
@@ -226,7 +227,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_update_display_from_format() public function user_can_update_display_from_format()
{ {
$displayFromFormat = DisplayFromFormat::DEFAULT->value; $displayFromFormat = DisplayFromFormat::DEFAULT->value;
@@ -242,7 +243,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_cannot_update_display_from_format_if_invalid() public function user_cannot_update_display_from_format_if_invalid()
{ {
$response = $this->post('/settings/display-from-format', [ $response = $this->post('/settings/display-from-format', [
@@ -257,7 +258,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_update_reply_from_name() public function user_can_update_reply_from_name()
{ {
$this->assertNull($this->user->from_name); $this->assertNull($this->user->from_name);
@@ -270,7 +271,7 @@ class SettingsTest extends TestCase
$this->assertEquals('John Doe', $this->user->from_name); $this->assertEquals('John Doe', $this->user->from_name);
} }
/** @test */ #[Test]
public function user_can_update_reply_from_name_to_empty() public function user_can_update_reply_from_name_to_empty()
{ {
$this->assertNull($this->user->from_name); $this->assertNull($this->user->from_name);
@@ -283,7 +284,7 @@ class SettingsTest extends TestCase
$this->assertEquals(null, $this->user->from_name); $this->assertEquals(null, $this->user->from_name);
} }
/** @test */ #[Test]
public function user_can_update_email_subject() public function user_can_update_email_subject()
{ {
$this->assertNull($this->user->email_subject); $this->assertNull($this->user->email_subject);
@@ -296,7 +297,7 @@ class SettingsTest extends TestCase
$this->assertEquals('The subject', $this->user->email_subject); $this->assertEquals('The subject', $this->user->email_subject);
} }
/** @test */ #[Test]
public function user_can_update_email_subject_to_empty() public function user_can_update_email_subject_to_empty()
{ {
$this->assertNull($this->user->email_subject); $this->assertNull($this->user->email_subject);
@@ -309,7 +310,7 @@ class SettingsTest extends TestCase
$this->assertEquals(null, $this->user->email_subject); $this->assertEquals(null, $this->user->email_subject);
} }
/** @test */ #[Test]
public function user_can_update_email_banner_location() public function user_can_update_email_banner_location()
{ {
$this->assertEquals('top', $this->user->banner_location); $this->assertEquals('top', $this->user->banner_location);
@@ -322,7 +323,7 @@ class SettingsTest extends TestCase
$this->assertEquals('bottom', $this->user->banner_location); $this->assertEquals('bottom', $this->user->banner_location);
} }
/** @test */ #[Test]
public function user_cannot_update_email_banner_location_to_incorrect_value() public function user_cannot_update_email_banner_location_to_incorrect_value()
{ {
$this->assertEquals('top', $this->user->banner_location); $this->assertEquals('top', $this->user->banner_location);
@@ -337,7 +338,7 @@ class SettingsTest extends TestCase
$this->assertEquals('top', $this->user->banner_location); $this->assertEquals('top', $this->user->banner_location);
} }
/** @test */ #[Test]
public function user_can_enable_use_reply_to() public function user_can_enable_use_reply_to()
{ {
$this->assertFalse($this->user->use_reply_to); $this->assertFalse($this->user->use_reply_to);
@@ -350,7 +351,7 @@ class SettingsTest extends TestCase
$this->assertTrue($this->user->use_reply_to); $this->assertTrue($this->user->use_reply_to);
} }
/** @test */ #[Test]
public function user_can_disable_use_reply_to() public function user_can_disable_use_reply_to()
{ {
$this->user->update(['use_reply_to' => true]); $this->user->update(['use_reply_to' => true]);
@@ -365,7 +366,7 @@ class SettingsTest extends TestCase
$this->assertFalse($this->user->use_reply_to); $this->assertFalse($this->user->use_reply_to);
} }
/** @test */ #[Test]
public function user_can_enable_store_failed_deliveries() public function user_can_enable_store_failed_deliveries()
{ {
$this->user->update(['store_failed_deliveries' => false]); $this->user->update(['store_failed_deliveries' => false]);
@@ -378,7 +379,7 @@ class SettingsTest extends TestCase
$this->assertTrue($this->user->store_failed_deliveries); $this->assertTrue($this->user->store_failed_deliveries);
} }
/** @test */ #[Test]
public function user_can_disable_store_failed_deliveries() public function user_can_disable_store_failed_deliveries()
{ {
$this->assertTrue($this->user->store_failed_deliveries); $this->assertTrue($this->user->store_failed_deliveries);
@@ -391,7 +392,7 @@ class SettingsTest extends TestCase
$this->assertFalse($this->user->store_failed_deliveries); $this->assertFalse($this->user->store_failed_deliveries);
} }
/** @test */ #[Test]
public function user_can_enable_save_alias_last_used() public function user_can_enable_save_alias_last_used()
{ {
$this->user->update(['save_alias_last_used' => false]); $this->user->update(['save_alias_last_used' => false]);
@@ -406,7 +407,7 @@ class SettingsTest extends TestCase
$this->assertTrue($this->user->save_alias_last_used); $this->assertTrue($this->user->save_alias_last_used);
} }
/** @test */ #[Test]
public function user_can_disable_save_alias_last_used() public function user_can_disable_save_alias_last_used()
{ {
$this->assertTrue($this->user->save_alias_last_used); $this->assertTrue($this->user->save_alias_last_used);
@@ -419,7 +420,7 @@ class SettingsTest extends TestCase
$this->assertFalse($this->user->save_alias_last_used); $this->assertFalse($this->user->save_alias_last_used);
} }
/** @test */ #[Test]
public function user_can_generate_new_backup_code() public function user_can_generate_new_backup_code()
{ {
$this->user->update([ $this->user->update([
@@ -439,7 +440,7 @@ class SettingsTest extends TestCase
$this->assertNotEquals($currentBackupCode, $this->user->two_factor_backup_code); $this->assertNotEquals($currentBackupCode, $this->user->two_factor_backup_code);
} }
/** @test */ #[Test]
public function user_must_enter_current_password_to_generate_new_backup_code() public function user_must_enter_current_password_to_generate_new_backup_code()
{ {
$this->user->update([ $this->user->update([
@@ -460,7 +461,7 @@ class SettingsTest extends TestCase
$this->assertEquals($currentBackupCode, $this->user->two_factor_backup_code); $this->assertEquals($currentBackupCode, $this->user->two_factor_backup_code);
} }
/** @test */ #[Test]
public function user_can_enable_webauthn_key() public function user_can_enable_webauthn_key()
{ {
$key = $this->user->webauthnKeys()->create([ $key = $this->user->webauthnKeys()->create([
@@ -486,7 +487,7 @@ class SettingsTest extends TestCase
$this->assertTrue($this->user->webauthnKeys[0]->enabled); $this->assertTrue($this->user->webauthnKeys[0]->enabled);
} }
/** @test */ #[Test]
public function user_can_disable_webauthn_key() public function user_can_disable_webauthn_key()
{ {
$key = $this->user->webauthnKeys()->create([ $key = $this->user->webauthnKeys()->create([
@@ -512,7 +513,7 @@ class SettingsTest extends TestCase
$this->assertFalse($this->user->webauthnKeys[0]->enabled); $this->assertFalse($this->user->webauthnKeys[0]->enabled);
} }
/** @test */ #[Test]
public function user_must_enter_correct_password_to_disable_webauthn_key() public function user_must_enter_correct_password_to_disable_webauthn_key()
{ {
$key = $this->user->webauthnKeys()->create([ $key = $this->user->webauthnKeys()->create([
@@ -540,7 +541,7 @@ class SettingsTest extends TestCase
$this->assertTrue($this->user->webauthnKeys[0]->enabled); $this->assertTrue($this->user->webauthnKeys[0]->enabled);
} }
/** @test */ #[Test]
public function user_can_delete_webauthn_key() public function user_can_delete_webauthn_key()
{ {
$key = $this->user->webauthnKeys()->create([ $key = $this->user->webauthnKeys()->create([
@@ -568,7 +569,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_must_enter_correct_password_to_delete_webauthn_key() public function user_must_enter_correct_password_to_delete_webauthn_key()
{ {
$key = $this->user->webauthnKeys()->create([ $key = $this->user->webauthnKeys()->create([
@@ -598,7 +599,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** @test */ #[Test]
public function user_can_delete_account() public function user_can_delete_account()
{ {
$this->assertNotNull($this->user->id); $this->assertNotNull($this->user->id);
@@ -718,7 +719,7 @@ class SettingsTest extends TestCase
$this->assertEquals(DeletedUsername::skip(1)->first()->username, $username->username); $this->assertEquals(DeletedUsername::skip(1)->first()->username, $username->username);
} }
/** @test */ #[Test]
public function user_must_enter_correct_password_to_delete_account() public function user_must_enter_correct_password_to_delete_account()
{ {
$this->assertNotNull($this->user->id); $this->assertNotNull($this->user->id);
@@ -745,9 +746,7 @@ class SettingsTest extends TestCase
]); ]);
} }
/** #[Test]
* @test
*/
public function user_can_import_aliases_for_custom_domains() public function user_can_import_aliases_for_custom_domains()
{ {
Excel::fake(); Excel::fake();
@@ -771,9 +770,7 @@ class SettingsTest extends TestCase
}); });
} }
/** #[Test]
* @test
*/
public function user_can_download_aliases_export() public function user_can_download_aliases_export()
{ {
Excel::fake(); Excel::fake();

View File

@@ -8,6 +8,7 @@ use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Inertia\Testing\AssertableInertia as Assert; use Inertia\Testing\AssertableInertia as Assert;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ShowAliasesTest extends TestCase class ShowAliasesTest extends TestCase
@@ -24,7 +25,7 @@ class ShowAliasesTest extends TestCase
$this->actingAs($this->user); $this->actingAs($this->user);
} }
/** @test */ #[Test]
public function user_can_view_aliases_from_the_dashboard() public function user_can_view_aliases_from_the_dashboard()
{ {
// Arrange // Arrange
@@ -45,7 +46,7 @@ class ShowAliasesTest extends TestCase
); );
} }
/** @test */ #[Test]
public function latest_aliases_are_listed_first() public function latest_aliases_are_listed_first()
{ {
// Arrange // Arrange
@@ -78,7 +79,7 @@ class ShowAliasesTest extends TestCase
$this->assertTrue($response->data('page')['props']['initialRows']['data'][2]['id'] === $a->id); $this->assertTrue($response->data('page')['props']['initialRows']['data'][2]['id'] === $a->id);
} }
/** @test */ #[Test]
public function deleted_aliases_are_not_listed() public function deleted_aliases_are_not_listed()
{ {
Alias::factory()->count(3)->create([ Alias::factory()->count(3)->create([
@@ -101,7 +102,7 @@ class ShowAliasesTest extends TestCase
); );
} }
/** @test */ #[Test]
public function aliases_are_listed_with_recipients() public function aliases_are_listed_with_recipients()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -129,7 +130,7 @@ class ShowAliasesTest extends TestCase
$this->assertEquals($aliasRecipient->recipient->email, $response->data('page')['props']['initialRows']['data'][0]['recipients'][0]['email']); $this->assertEquals($aliasRecipient->recipient->email, $response->data('page')['props']['initialRows']['data'][0]['recipients'][0]['email']);
} }
/** @test */ #[Test]
public function aliases_are_listed_with_only_verified_recipient_options() public function aliases_are_listed_with_only_verified_recipient_options()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([

View File

@@ -6,6 +6,7 @@ use App\Models\Domain;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Inertia\Testing\AssertableInertia as Assert; use Inertia\Testing\AssertableInertia as Assert;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ShowDomainsTest extends TestCase class ShowDomainsTest extends TestCase
@@ -22,7 +23,7 @@ class ShowDomainsTest extends TestCase
$this->actingAs($this->user); $this->actingAs($this->user);
} }
/** @test */ #[Test]
public function user_can_view_domains_from_the_domains_page() public function user_can_view_domains_from_the_domains_page()
{ {
Domain::factory()->count(3)->create([ Domain::factory()->count(3)->create([
@@ -40,7 +41,7 @@ class ShowDomainsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function latest_domains_are_listed_first() public function latest_domains_are_listed_first()
{ {
$a = Domain::factory()->create([ $a = Domain::factory()->create([
@@ -70,7 +71,7 @@ class ShowDomainsTest extends TestCase
$this->assertTrue($response->data('page')['props']['initialRows'][2]['id'] === $a->id); $this->assertTrue($response->data('page')['props']['initialRows'][2]['id'] === $a->id);
} }
/** @test */ #[Test]
public function user_can_verify_domain_sending_records() public function user_can_verify_domain_sending_records()
{ {
$domain = Domain::factory()->create([ $domain = Domain::factory()->create([

View File

@@ -6,6 +6,7 @@ use App\Models\FailedDelivery;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Inertia\Testing\AssertableInertia as Assert; use Inertia\Testing\AssertableInertia as Assert;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ShowFailedDeliveriesTest extends TestCase class ShowFailedDeliveriesTest extends TestCase
@@ -22,7 +23,7 @@ class ShowFailedDeliveriesTest extends TestCase
$this->actingAs($this->user); $this->actingAs($this->user);
} }
/** @test */ #[Test]
public function user_can_view_failed_deliveries_from_the_failed_deliveries_page() public function user_can_view_failed_deliveries_from_the_failed_deliveries_page()
{ {
FailedDelivery::factory()->count(3)->create([ FailedDelivery::factory()->count(3)->create([
@@ -40,7 +41,7 @@ class ShowFailedDeliveriesTest extends TestCase
); );
} }
/** @test */ #[Test]
public function latest_failed_deliveries_are_listed_first() public function latest_failed_deliveries_are_listed_first()
{ {
$a = FailedDelivery::factory()->create([ $a = FailedDelivery::factory()->create([

View File

@@ -2,10 +2,7 @@
namespace Tests\Feature; namespace Tests\Feature;
use App\Models\Alias;
use App\Models\AliasRecipient;
use App\Models\Recipient; use App\Models\Recipient;
use App\Models\User;
use App\Notifications\CustomVerifyEmail; use App\Notifications\CustomVerifyEmail;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
@@ -14,6 +11,7 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification; use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\URL;
use Inertia\Testing\AssertableInertia as Assert; use Inertia\Testing\AssertableInertia as Assert;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ShowRecipientsTest extends TestCase class ShowRecipientsTest extends TestCase
@@ -30,7 +28,7 @@ class ShowRecipientsTest extends TestCase
$this->actingAs($this->user); $this->actingAs($this->user);
} }
/** @test */ #[Test]
public function user_can_view_recipients_from_the_recipients_page() public function user_can_view_recipients_from_the_recipients_page()
{ {
Recipient::factory()->count(5)->create([ Recipient::factory()->count(5)->create([
@@ -48,7 +46,7 @@ class ShowRecipientsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function latest_recipients_are_listed_first() public function latest_recipients_are_listed_first()
{ {
$a = Recipient::factory()->create([ $a = Recipient::factory()->create([
@@ -78,8 +76,8 @@ class ShowRecipientsTest extends TestCase
$this->assertTrue($response->data('page')['props']['initialRows'][3]['id'] === $a->id); $this->assertTrue($response->data('page')['props']['initialRows'][3]['id'] === $a->id);
} }
/** @test */ /* #[Test]
/* public function recipients_are_listed_with_aliases_count() public function recipients_are_listed_with_aliases_count()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
'user_id' => $this->user->id, 'user_id' => $this->user->id,
@@ -100,7 +98,7 @@ class ShowRecipientsTest extends TestCase
$this->assertCount(3, $response->data('recipients')[0]['aliases']); $this->assertCount(3, $response->data('recipients')[0]['aliases']);
} */ } */
/** @test */ #[Test]
public function user_can_resend_recipient_verification_email() public function user_can_resend_recipient_verification_email()
{ {
Notification::fake(); Notification::fake();
@@ -124,7 +122,7 @@ class ShowRecipientsTest extends TestCase
); );
} }
/** @test */ #[Test]
public function user_can_verify_recipient_email_successfully() public function user_can_verify_recipient_email_successfully()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -152,7 +150,7 @@ class ShowRecipientsTest extends TestCase
$this->assertNotNull($recipient->refresh()->email_verified_at); $this->assertNotNull($recipient->refresh()->email_verified_at);
} }
/** @test */ #[Test]
public function user_must_wait_before_resending_recipient_verification_email() public function user_must_wait_before_resending_recipient_verification_email()
{ {
Notification::fake(); Notification::fake();

View File

@@ -6,6 +6,7 @@ use App\Models\Username;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
use Inertia\Testing\AssertableInertia as Assert; use Inertia\Testing\AssertableInertia as Assert;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class ShowUsernamesTest extends TestCase class ShowUsernamesTest extends TestCase
@@ -22,7 +23,7 @@ class ShowUsernamesTest extends TestCase
$this->actingAs($this->user); $this->actingAs($this->user);
} }
/** @test */ #[Test]
public function user_can_view_usernames_from_the_usernames_page() public function user_can_view_usernames_from_the_usernames_page()
{ {
Username::factory()->count(3)->create([ Username::factory()->count(3)->create([
@@ -40,7 +41,7 @@ class ShowUsernamesTest extends TestCase
); );
} }
/** @test */ #[Test]
public function latest_usernames_are_listed_first() public function latest_usernames_are_listed_first()
{ {
$a = Username::factory()->create([ $a = Username::factory()->create([

View File

@@ -12,14 +12,14 @@ use Ramsey\Uuid\Uuid;
abstract class TestCase extends BaseTestCase abstract class TestCase extends BaseTestCase
{ {
use CreatesApplication;
protected $user; protected $user;
protected function setUp(): void protected function setUp(): void
{ {
parent::setUp(); parent::setUp();
$this->withoutVite();
config([ config([
'anonaddy.limit' => 1000, 'anonaddy.limit' => 1000,
'anonaddy.additional_username_limit' => 3, 'anonaddy.additional_username_limit' => 3,

View File

@@ -6,6 +6,7 @@ use App\Models\Alias;
use App\Models\AliasRecipient; use App\Models\AliasRecipient;
use App\Models\Recipient; use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class AliasTest extends TestCase class AliasTest extends TestCase
@@ -21,7 +22,7 @@ class AliasTest extends TestCase
$this->user = $this->createUser(); $this->user = $this->createUser();
} }
/** @test */ #[Test]
public function alias_can_get_verified_recipients() public function alias_can_get_verified_recipients()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -52,7 +53,7 @@ class AliasTest extends TestCase
$this->assertEquals($verifiedRecipient->id, $alias->verifiedRecipients[0]->id); $this->assertEquals($verifiedRecipient->id, $alias->verifiedRecipients[0]->id);
} }
/** @test */ #[Test]
public function alias_can_set_default_recipient_email() public function alias_can_set_default_recipient_email()
{ {
Alias::factory()->create([ Alias::factory()->create([
@@ -70,7 +71,7 @@ class AliasTest extends TestCase
$this->assertEquals($this->user->default_recipient_id, $recipient->id); $this->assertEquals($this->user->default_recipient_id, $recipient->id);
} }
/** @test */ #[Test]
public function alias_can_get_default_recipient_email() public function alias_can_get_default_recipient_email()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([
@@ -92,7 +93,7 @@ class AliasTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function alias_can_get_verified_recipients_or_default() public function alias_can_get_verified_recipients_or_default()
{ {
$alias = Alias::factory()->create([ $alias = Alias::factory()->create([

View File

@@ -6,6 +6,7 @@ use App\Mail\TokenExpiringSoon;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class EmailUsersWithTokenExpiringSoonTest extends TestCase class EmailUsersWithTokenExpiringSoonTest extends TestCase
@@ -23,7 +24,7 @@ class EmailUsersWithTokenExpiringSoonTest extends TestCase
Mail::fake(); Mail::fake();
} }
/** @test */ #[Test]
public function it_can_send_a_mail_concerning_a_token_expiring_soon() public function it_can_send_a_mail_concerning_a_token_expiring_soon()
{ {
$this->setNow(2019, 1, 28); $this->setNow(2019, 1, 28);

View File

@@ -6,6 +6,7 @@ use App\Models\Alias;
use App\Models\AliasRecipient; use App\Models\AliasRecipient;
use App\Models\Recipient; use App\Models\Recipient;
use Illuminate\Foundation\Testing\LazilyRefreshDatabase; use Illuminate\Foundation\Testing\LazilyRefreshDatabase;
use PHPUnit\Framework\Attributes\Test;
use Tests\TestCase; use Tests\TestCase;
class UserTest extends TestCase class UserTest extends TestCase
@@ -21,7 +22,7 @@ class UserTest extends TestCase
$this->user = $this->createUser('johndoe'); $this->user = $this->createUser('johndoe');
} }
/** @test */ #[Test]
public function user_can_get_aliases_from_relationship() public function user_can_get_aliases_from_relationship()
{ {
$aliases = Alias::factory()->count(10)->create([ $aliases = Alias::factory()->count(10)->create([
@@ -31,7 +32,7 @@ class UserTest extends TestCase
$aliases->assertEquals($this->user->aliases); $aliases->assertEquals($this->user->aliases);
} }
/** @test */ #[Test]
public function user_can_only_get_their_own_aliases_from_relationship() public function user_can_only_get_their_own_aliases_from_relationship()
{ {
$aliases = Alias::factory()->count(5)->create([ $aliases = Alias::factory()->count(5)->create([
@@ -43,7 +44,7 @@ class UserTest extends TestCase
$aliases->assertEquals($this->user->aliases); $aliases->assertEquals($this->user->aliases);
} }
/** @test */ #[Test]
public function user_can_get_total_emails_forwarded() public function user_can_get_total_emails_forwarded()
{ {
Alias::factory()->create([ Alias::factory()->create([
@@ -66,7 +67,7 @@ class UserTest extends TestCase
$this->assertEquals(10, $this->user->totalEmailsForwarded()); $this->assertEquals(10, $this->user->totalEmailsForwarded());
} }
/** @test */ #[Test]
public function user_can_get_total_emails_blocked() public function user_can_get_total_emails_blocked()
{ {
Alias::factory()->create([ Alias::factory()->create([
@@ -89,7 +90,7 @@ class UserTest extends TestCase
$this->assertEquals(8, $this->user->totalEmailsBlocked()); $this->assertEquals(8, $this->user->totalEmailsBlocked());
} }
/** @test */ #[Test]
public function user_can_get_total_emails_replied() public function user_can_get_total_emails_replied()
{ {
Alias::factory()->create([ Alias::factory()->create([
@@ -112,7 +113,7 @@ class UserTest extends TestCase
$this->assertEquals(7, $this->user->totalEmailsReplied()); $this->assertEquals(7, $this->user->totalEmailsReplied());
} }
/** @test */ #[Test]
public function user_can_get_aliases_using_default_recipient() public function user_can_get_aliases_using_default_recipient()
{ {
$recipient = Recipient::factory()->create([ $recipient = Recipient::factory()->create([
@@ -146,7 +147,7 @@ class UserTest extends TestCase
$this->assertCount(3, $this->user->aliases); $this->assertCount(3, $this->user->aliases);
} }
/** @test */ #[Test]
public function user_can_get_bandwidth_in_mb() public function user_can_get_bandwidth_in_mb()
{ {
$this->user->update(['bandwidth' => 10485760]); $this->user->update(['bandwidth' => 10485760]);
@@ -159,7 +160,7 @@ class UserTest extends TestCase
$this->assertEquals(10, $this->user->bandwidth_mb); $this->assertEquals(10, $this->user->bandwidth_mb);
} }
/** @test */ #[Test]
public function user_can_get_bandwidth_in_mb_to_correct_precision() public function user_can_get_bandwidth_in_mb_to_correct_precision()
{ {
$this->user->update(['bandwidth' => 7324019]); $this->user->update(['bandwidth' => 7324019]);
@@ -172,13 +173,13 @@ class UserTest extends TestCase
$this->assertEquals(6.98, $this->user->bandwidth_mb); $this->assertEquals(6.98, $this->user->bandwidth_mb);
} }
/** @test */ #[Test]
public function user_can_get_bandwidth_limit_in_mb() public function user_can_get_bandwidth_limit_in_mb()
{ {
$this->assertEquals(100, $this->user->getBandwidthLimitMb()); $this->assertEquals(100, $this->user->getBandwidthLimitMb());
} }
/** @test */ #[Test]
public function user_can_check_if_near_bandwidth_usage_limit() public function user_can_check_if_near_bandwidth_usage_limit()
{ {
$this->user->update(['bandwidth' => 100943820]); $this->user->update(['bandwidth' => 100943820]);
@@ -193,7 +194,7 @@ class UserTest extends TestCase
$this->assertEquals(96.27, $this->user->bandwidth_mb); $this->assertEquals(96.27, $this->user->bandwidth_mb);
} }
/** @test */ #[Test]
public function user_get_domain_options() public function user_get_domain_options()
{ {
$username = $this->user->username; $username = $this->user->username;
@@ -214,7 +215,7 @@ class UserTest extends TestCase
}); });
} }
/** @test */ #[Test]
public function user_can_match_verified_recipient_with_extension() public function user_can_match_verified_recipient_with_extension()
{ {
$this->user->defaultRecipient->email = 'hello+anonaddy@example.com'; $this->user->defaultRecipient->email = 'hello+anonaddy@example.com';

View File

@@ -9,10 +9,10 @@ export default defineConfig(({ command, mode }) => {
const host = env.APP_URL.replace(/https?:\/\//, '') const host = env.APP_URL.replace(/https?:\/\//, '')
return { return {
server: { server: {
host: host,
hmr: { hmr: {
host: host, host: host,
}, },
host: host,
https: { https: {
key: key:
process.env.NODE_ENV === 'production' process.env.NODE_ENV === 'production'
@@ -25,6 +25,7 @@ export default defineConfig(({ command, mode }) => {
}, },
watch: { watch: {
usePolling: true, usePolling: true,
ignored: ['**/vendor/**', '**/postfix/**', '**/storage/**'],
}, },
}, },
plugins: [ plugins: [
@@ -35,7 +36,6 @@ export default defineConfig(({ command, mode }) => {
'resources/js/webauthn/authenticate.js', 'resources/js/webauthn/authenticate.js',
'resources/js/webauthn/register.js', 'resources/js/webauthn/register.js',
], ],
refresh: true,
}), }),
vue({ vue({
template: { template: {