diff --git a/app/Form/Actions/FormStoreAction.php b/app/Form/Actions/FormStoreAction.php index 1551e1ea..f3c8a3cf 100644 --- a/app/Form/Actions/FormStoreAction.php +++ b/app/Form/Actions/FormStoreAction.php @@ -36,6 +36,7 @@ class FormStoreAction 'needs_prevention' => 'present|boolean', 'prevention_text' => 'array', 'prevention_conditions' => 'array', + 'leader_conditions' => 'array', 'zip' => 'present|nullable|string', 'location' => 'present|nullable|string', 'country' => 'nullable|string|max:255', diff --git a/app/Form/Actions/FormUpdateAction.php b/app/Form/Actions/FormUpdateAction.php index 593d9046..b5095183 100644 --- a/app/Form/Actions/FormUpdateAction.php +++ b/app/Form/Actions/FormUpdateAction.php @@ -38,6 +38,7 @@ class FormUpdateAction 'location' => 'present|nullable|string', 'zip' => 'present|nullable|string', 'country' => 'nullable|string|max:255', + 'leader_conditions' => 'array', ]; } diff --git a/app/Form/Models/Form.php b/app/Form/Models/Form.php index b1520887..7ef62e47 100644 --- a/app/Form/Models/Form.php +++ b/app/Form/Models/Form.php @@ -50,7 +50,7 @@ class Form extends Model implements HasMedia 'registration_from' => 'datetime', 'registration_until' => 'datetime', 'country' => Country::class, - 'leader_condition' => Condition::class, + 'leader_conditions' => Condition::class, ]; /** diff --git a/app/Form/Resources/FormResource.php b/app/Form/Resources/FormResource.php index 282a10f0..f4b0cfaf 100644 --- a/app/Form/Resources/FormResource.php +++ b/app/Form/Resources/FormResource.php @@ -55,6 +55,7 @@ class FormResource extends JsonResource 'needs_prevention' => $this->needs_prevention, 'prevention_text' => $this->prevention_text, 'prevention_conditions' => $this->prevention_conditions, + 'leader_conditions' => $this->leader_conditions, 'zip' => $this->zip, 'location' => $this->location, 'country' => $this->country, diff --git a/database/migrations/2025_07_09_221048_create_forms_leader_condition_column.php b/database/migrations/2025_07_09_221048_create_forms_leader_conditions_column.php similarity index 74% rename from database/migrations/2025_07_09_221048_create_forms_leader_condition_column.php rename to database/migrations/2025_07_09_221048_create_forms_leader_conditions_column.php index 9941396e..9d65cfd8 100644 --- a/database/migrations/2025_07_09_221048_create_forms_leader_condition_column.php +++ b/database/migrations/2025_07_09_221048_create_forms_leader_conditions_column.php @@ -12,7 +12,7 @@ return new class extends Migration public function up(): void { Schema::table('forms', function (Blueprint $table) { - $table->json('leader_condition')->after('name')->default(json_encode(['mode' => 'all', 'ifs' => []])); + $table->json('leader_conditions')->after('name')->default(json_encode(['mode' => 'all', 'ifs' => []])); }); } @@ -22,7 +22,7 @@ return new class extends Migration public function down(): void { Schema::table('forms', function (Blueprint $table) { - $table->dropColumn('leader_condition'); + $table->dropColumn('leader_conditions'); }); } }; diff --git a/tests/EndToEnd/Form/FormIndexActionTest.php b/tests/EndToEnd/Form/FormIndexActionTest.php index 3c24deda..cd63b410 100644 --- a/tests/EndToEnd/Form/FormIndexActionTest.php +++ b/tests/EndToEnd/Form/FormIndexActionTest.php @@ -16,6 +16,7 @@ use Tests\RequestFactories\EditorRequestFactory; use Tests\Lib\CreatesFormFields; use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\EndToEndTestCase; +use Tests\RequestFactories\ConditionRequestFactory; uses(CreatesFormFields::class); uses(DatabaseTransactions::class); @@ -24,6 +25,7 @@ uses(EndToEndTestCase::class); it('testItDisplaysForms', function () { Carbon::setTestNow(Carbon::parse('2023-03-03')); $this->login()->loginNami()->withoutExceptionHandling(); + $leaderConditions = ConditionRequestFactory::new()->whenField('f', 'v'); $form = Form::factory() ->name('lala') ->excerpt('fff') @@ -39,7 +41,7 @@ it('testItDisplaysForms', function () { ->zip('12345') ->location('SG') ->country(Country::CH) - ->create(); + ->create(['leader_conditions' => $leaderConditions->toData()]); sleep(1); $this->get(route('form.index')) @@ -58,6 +60,7 @@ it('testItDisplaysForms', function () { ->assertInertiaPath('data.data.0.location', 'SG') ->assertInertiaPath('data.data.0.country', 'Schweiz') ->assertInertiaPath('data.data.0.participants_count', 5) + ->assertInertiaPath('data.data.0.leader_conditions', $leaderConditions->create()) ->assertInertiaPath('data.data.0.to', '2023-06-07') ->assertInertiaPath('data.data.0.is_active', true) ->assertInertiaPath('data.data.0.is_private', false) diff --git a/tests/Feature/Form/FormUpdateActionTest.php b/tests/Feature/Form/FormUpdateActionTest.php index ba065f4a..1aa28857 100644 --- a/tests/Feature/Form/FormUpdateActionTest.php +++ b/tests/Feature/Form/FormUpdateActionTest.php @@ -8,6 +8,7 @@ use App\Form\Models\Form; use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\RequestFactories\EditorRequestFactory; use Tests\Lib\CreatesFormFields; +use Tests\RequestFactories\ConditionRequestFactory; uses(DatabaseTransactions::class); uses(CreatesFormFields::class); @@ -170,3 +171,16 @@ it('testItUpdatesPrevention', function () { $this->assertEquals('lorem ipsum', $form->fresh()->prevention_text->blocks[0]['data']['text']); $this->assertEquals(['mode' => 'all', 'ifs' => [['field' => 'vorname', 'value' => 'Max', 'comparator' => 'isEqual']]], $form->fresh()->prevention_conditions->toArray()); }); + +it('updates leader conditions', function () { + $this->login()->loginNami()->withoutExceptionHandling(); + $form = Form::factory()->create(); + $condition = ConditionRequestFactory::new()->whenField('A', 'TT')->create(); + $payload = FormRequest::new() + ->preventionText(EditorRequestFactory::new()->text(10, 'lorem ipsum')) + ->state(['leader_conditions' => ConditionRequestFactory::new()->whenField('A', 'TT')]) + ->create(); + + $this->patchJson(route('form.update', ['form' => $form]), $payload); + $this->assertEquals($condition, $form->fresh()->leader_conditions->toArray()); +}); diff --git a/tests/RequestFactories/ConditionRequestFactory.php b/tests/RequestFactories/ConditionRequestFactory.php index 96048369..9a7e4a05 100644 --- a/tests/RequestFactories/ConditionRequestFactory.php +++ b/tests/RequestFactories/ConditionRequestFactory.php @@ -3,6 +3,7 @@ namespace Tests\RequestFactories; use Worksome\RequestFactories\RequestFactory; +use App\Lib\Editor\Condition; class ConditionRequestFactory extends RequestFactory { @@ -17,8 +18,12 @@ class ConditionRequestFactory extends RequestFactory public function whenField(string $field, string $value): self { return $this->state([ 'ifs' => [ - ['field' => $field, 'comparator' => 'isEqual', 'value' => $value] + ['field' => $field, 'value' => $value, 'comparator' => 'isEqual'] ], ]); } + + public function toData(): Condition { + return Condition::from($this->create()); + } }