feat: limit comment field to 256 characters for environment variables

This commit is contained in:
Andras Bacsai 2025-11-18 12:47:43 +01:00
parent e33558488e
commit 201c9fada3
4 changed files with 38 additions and 9 deletions

View file

@ -65,7 +65,7 @@ class Show extends Component
protected $rules = [
'key' => 'required|string',
'value' => 'nullable',
'comment' => 'nullable|string|max:1000',
'comment' => 'nullable|string|max:256',
'is_multiline' => 'required|boolean',
'is_literal' => 'required|boolean',
'is_shown_once' => 'required|boolean',
@ -107,7 +107,7 @@ public function syncData(bool $toModel = false)
$this->validate([
'key' => 'required|string',
'value' => 'nullable',
'comment' => 'nullable|string|max:1000',
'comment' => 'nullable|string|max:256',
'is_multiline' => 'required|boolean',
'is_literal' => 'required|boolean',
'is_shown_once' => 'required|boolean',

View file

@ -12,11 +12,11 @@
public function up(): void
{
Schema::table('environment_variables', function (Blueprint $table) {
$table->text('comment')->nullable();
$table->string('comment', 256)->nullable();
});
Schema::table('shared_environment_variables', function (Blueprint $table) {
$table->text('comment')->nullable();
$table->string('comment', 256)->nullable();
});
}

View file

@ -121,6 +121,7 @@
<x-forms.input disabled type="password" id="real_value" />
@endif
</div>
<x-forms.input disabled id="comment" label="Comment (Optional)" helper="Add a note to document what this environment variable is used for." maxlength="256" />
</div>
@else
<div class="flex flex-col w-full gap-2">
@ -136,7 +137,7 @@
<x-forms.input :disabled="$is_redis_credential" :required="$is_redis_credential" disabled type="password" id="real_value" />
@endif
</div>
<x-forms.input instantSave id="comment" label="Comment (Optional)" helper="Add a note to document what this environment variable is used for." />
<x-forms.input instantSave id="comment" label="Comment (Optional)" helper="Add a note to document what this environment variable is used for." maxlength="256" />
</div>
@endif
@else
@ -148,9 +149,7 @@
<x-forms.input disabled type="password" id="real_value" />
@endif
</div>
@if (!$isDisabled)
<x-forms.input disabled id="comment" label="Comment (Optional)" helper="Add a note to document what this environment variable is used for." />
@endif
<x-forms.input disabled id="comment" label="Comment (Optional)" helper="Add a note to document what this environment variable is used for." maxlength="256" />
</div>
@endcan
@can('update', $this->env)

View file

@ -85,7 +85,7 @@
'resourceable_id' => $this->application->id,
]);
// The model's booted() method should create a preview version
// The model's created() event listener automatically creates a preview version
$previewEnv = EnvironmentVariable::where('key', 'TEST_VAR')
->where('resourceable_id', $this->application->id)
->where('is_preview', true)
@ -118,3 +118,33 @@
expect($env1->value)->toBe('value_with_#_in_it');
expect($env1->comment)->toBe('Contains hash symbol');
});
test('environment variable comment can store up to 256 characters', function () {
$comment = str_repeat('a', 256);
$env = EnvironmentVariable::create([
'key' => 'TEST_VAR',
'value' => 'test_value',
'comment' => $comment,
'resourceable_type' => Application::class,
'resourceable_id' => $this->application->id,
]);
expect($env->comment)->toBe($comment);
expect(strlen($env->comment))->toBe(256);
});
test('environment variable comment cannot exceed 256 characters via Livewire', function () {
$env = EnvironmentVariable::create([
'key' => 'TEST_VAR',
'value' => 'test_value',
'resourceable_type' => Application::class,
'resourceable_id' => $this->application->id,
]);
$longComment = str_repeat('a', 257);
Livewire::test(\App\Livewire\Project\Shared\EnvironmentVariable\Show::class, ['env' => $env, 'type' => 'application'])
->set('comment', $longComment)
->call('submit')
->assertHasErrors(['comment' => 'max']);
});