72 lines
2.7 KiB
PHP
72 lines
2.7 KiB
PHP
<?php
|
|
|
|
use App\Actions\Applications\CreateLaravelEnvironment;
|
|
use App\Enums\DeployPolicy;
|
|
use App\Enums\SchedulerMode;
|
|
use App\Enums\ServiceType;
|
|
use App\Models\Application;
|
|
use App\Models\Organisation;
|
|
|
|
it('creates a laravel environment with a primary web scheduler target and no worker by default', function () {
|
|
$organisation = Organisation::factory()->create();
|
|
$application = Application::factory()->for($organisation)->create([
|
|
'default_branch' => 'main',
|
|
]);
|
|
|
|
$environment = app(CreateLaravelEnvironment::class)->execute($application, 'production');
|
|
$web = $environment->services()->first();
|
|
|
|
expect($environment->branch)->toBe('main')
|
|
->and($environment->scheduler_enabled)->toBeTrue()
|
|
->and($environment->scheduler_mode)->toBe(SchedulerMode::SINGLE)
|
|
->and($environment->scheduler_target_service_id)->toBe($web->id)
|
|
->and($web->type)->toBe(ServiceType::LARAVEL)
|
|
->and($web->deploy_policy)->toBe(DeployPolicy::WITH_ENVIRONMENT)
|
|
->and($web->process_roles)->toBe(['web', 'scheduler'])
|
|
->and($environment->services()->whereJsonContains('process_roles', 'worker')->exists())->toBeFalse();
|
|
});
|
|
|
|
it('provides a managed serversideup frankenphp dockerfile template', function () {
|
|
$organisation = Organisation::factory()->create();
|
|
$application = Application::factory()->for($organisation)->create();
|
|
$environment = app(CreateLaravelEnvironment::class)->execute($application, 'production');
|
|
$web = $environment->services()->first();
|
|
|
|
$dockerfile = $web->driver()->dockerfileTemplate();
|
|
|
|
expect($dockerfile)
|
|
->toContain('FROM serversideup/php:8.4-frankenphp')
|
|
->toContain('composer install --no-dev')
|
|
->toContain('SERVER_DOCUMENT_ROOT=/var/www/html/public');
|
|
});
|
|
|
|
it('renders configurable javascript build steps for managed laravel artifacts', function () {
|
|
$organisation = Organisation::factory()->create();
|
|
$application = Application::factory()->for($organisation)->create();
|
|
$environment = app(CreateLaravelEnvironment::class)->execute($application, 'production');
|
|
$web = $environment->services()->first();
|
|
|
|
$web->update([
|
|
'config' => [
|
|
...$web->config,
|
|
'js_package_manager' => 'bun',
|
|
'js_build_command' => 'bun run build',
|
|
],
|
|
]);
|
|
|
|
expect($web->refresh()->driver()->dockerfileTemplate())
|
|
->toContain('bun install --frozen-lockfile')
|
|
->toContain('bun run build');
|
|
|
|
$web->update([
|
|
'config' => [
|
|
...$web->config,
|
|
'js_package_manager' => 'npm',
|
|
'js_build_command' => 'npm run build',
|
|
],
|
|
]);
|
|
|
|
expect($web->refresh()->driver()->dockerfileTemplate())
|
|
->toContain('npm ci && npm run build');
|
|
});
|