Skip to content

Commit 75c5cf1

Browse files
committed
feat: ninja form submission serialization tests
1 parent 62af6e6 commit 75c5cf1

File tree

7 files changed

+148
-4
lines changed

7 files changed

+148
-4
lines changed

forms-bridge/integrations/ninja/class-ninja-integration.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,10 @@ public function serialize_submission( $submission, $form_data ) {
554554
continue;
555555
}
556556

557-
$field = $submission['fields'][ (int) $field_data['id'] ];
557+
$field = $submission['fields'][ (int) $field_data['id'] ] ?? null;
558+
if ( ! $field ) {
559+
continue;
560+
}
558561

559562
if ( 'repeater' === $field_data['basetype'] ) {
560563
$subfields = $field['fields'];

tests/data/ninja/enquiry-submission.php.txt

Lines changed: 2 additions & 0 deletions
Large diffs are not rendered by default.

tests/data/ninja/questionnaire-submission.php.txt

Lines changed: 2 additions & 0 deletions
Large diffs are not rendered by default.

tests/data/ninja/quote-request-form.php.txt

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

tests/data/ninja/quote-request-submission.php.txt

Lines changed: 2 additions & 0 deletions
Large diffs are not rendered by default.

tests/integrations/test-ninja-forms.php

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,39 @@ public function test_enquiry_form_serialization() {
150150
);
151151
}
152152

153+
function test_enquiry_submission_serialization() {
154+
$form = self::get_form( 'Enquiry' );
155+
$form_data = $this->serialize_form( $form );
156+
157+
$store = self::store();
158+
foreach ( $store as $name => $object ) {
159+
if ( 'enquiry-submission' === $name ) {
160+
$submission = $object;
161+
break;
162+
}
163+
}
164+
165+
if ( ! isset( $submission ) ) {
166+
throw new Exception( 'Enquiry submission not found' );
167+
}
168+
169+
$l = count( $form_data['fields'] );
170+
for ( $i = 0; $i < $l; ++$i ) {
171+
$form_data['fields'][ $i ]['id'] = array_keys( $submission['fields'] )[ $i ];
172+
}
173+
174+
$payload = $this->serialize_submission( $submission, $form_data );
175+
176+
$this->assertSame( 'John', $payload['firstname_1523908368154'] );
177+
$this->assertSame( 'Doe', $payload['lastname_1523908369534'] );
178+
$this->assertSame( '600000000', $payload['phone_1523908588264'] );
179+
$this->assertSame( 'choice1', $payload['occupation_1523908435932'] );
180+
$this->assertSame( 'choice2', $payload['enquiry_type_1523908495090'] );
181+
$this->assertSame( 'Lorem ipsum dolor sit amer', $payload['details_1523908537286'] );
182+
$this->assertSame( 1, $payload['may_we_contact_you_1523908579864'] );
183+
$this->assertSame( 'afternoon', $payload['best_time_to_call_1523908689926'] );
184+
}
185+
153186
public function test_quote_request_form_serialization() {
154187
$form = self::get_form( 'Quote Request Form' );
155188
$form_data = $this->serialize_form( $form );
@@ -208,6 +241,55 @@ public function test_quote_request_form_serialization() {
208241
);
209242
}
210243

244+
public function test_quote_request_submission_serialization() {
245+
$form = self::get_form( 'Quote Request Form' );
246+
$form_data = $this->serialize_form( $form );
247+
248+
$store = self::store();
249+
foreach ( $store as $name => $object ) {
250+
if ( 'quote-request-submission' === $name ) {
251+
$submission = $object;
252+
break;
253+
}
254+
}
255+
256+
if ( ! isset( $submission ) ) {
257+
throw new Exception( 'Quote request submission not found' );
258+
}
259+
260+
$i = 0;
261+
$j = 0;
262+
$l = count( $form_data['fields'] );
263+
$k = count( $submission['fields'] );
264+
while ( $i < $l && $j < $k ) {
265+
$field_id = array_keys( $submission['fields'] )[ $j ];
266+
$submission_field = $submission['fields'][ $field_id ];
267+
268+
if (
269+
in_array(
270+
$submission_field['type'],
271+
array( 'html', 'confirm', 'hr', 'recaptcha', 'spam', 'submit' ),
272+
true,
273+
)
274+
) {
275+
++$j;
276+
continue;
277+
}
278+
279+
$form_data['fields'][ $i ]['id'] = $field_id;
280+
++$i;
281+
++$j;
282+
}
283+
284+
$payload = $this->serialize_submission( $submission, $form_data );
285+
286+
$this->assertSame( '13/11/2025', $payload['due_date'] );
287+
$this->assertSame( 'Carrer de les Camèlies', $payload['address'] );
288+
$this->assertSame( 'Barcelona', $payload['city'] );
289+
$this->assertSame( 'CA', $payload['liststate'] );
290+
$this->assertSame( '08001', $payload['zip'] );
291+
}
292+
211293
public function test_questionnaire_form_serialization() {
212294
$form = self::get_form( 'Questionnaire' );
213295
$form_data = $this->serialize_form( $form );
@@ -252,4 +334,58 @@ public function test_questionnaire_form_serialization() {
252334
),
253335
);
254336
}
337+
338+
public function test_questionnaire_submission_serialization() {
339+
$form = self::get_form( 'Questionnaire' );
340+
$form_data = $this->serialize_form( $form );
341+
342+
$store = self::store();
343+
foreach ( $store as $name => $object ) {
344+
if ( 'questionnaire-submission' === $name ) {
345+
$submission = $object;
346+
break;
347+
}
348+
}
349+
350+
if ( ! isset( $submission ) ) {
351+
throw new Exception( 'Questionnaire submission not found' );
352+
}
353+
354+
$i = 0;
355+
$j = 0;
356+
$l = count( $form_data['fields'] );
357+
$k = count( $submission['fields'] );
358+
while ( $i < $l && $j < $k ) {
359+
$field_id = array_keys( $submission['fields'] )[ $j ];
360+
$submission_field = $submission['fields'][ $field_id ];
361+
362+
if (
363+
in_array(
364+
$submission_field['type'],
365+
array( 'html', 'confirm', 'hr', 'recaptcha', 'spam', 'submit' ),
366+
true,
367+
)
368+
) {
369+
++$j;
370+
continue;
371+
}
372+
373+
$form_data['fields'][ $i ]['id'] = $field_id;
374+
++$i;
375+
++$j;
376+
}
377+
378+
$payload = $this->serialize_submission( $submission, $form_data );
379+
380+
$this->assertSame( '18-30', $payload['age_1523910843594'] );
381+
$this->assertEqualSets(
382+
array( 'one', 'two' ),
383+
$payload['question_2_1762818391757']
384+
);
385+
$this->assertEqualSets(
386+
array( 'one', 'three' ),
387+
$payload['question_3_1762818351190'],
388+
);
389+
$this->assertEquals( 3, $payload['starrating_1762818417160'] );
390+
}
255391
}

tests/integrations/test-wpforms.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,7 @@ public function test_meeting_room_registration_form_serialization() {
248248
}
249249

250250
public function test_meeting_room_registration_submission_serialization() {
251-
$form = self::get_form( 'Meeting Room Registration Form' );
252-
251+
$form = self::get_form( 'Meeting Room Registration Form' );
253252
$form_data = $this->serialize_form( $form );
254253

255254
$store = self::store();

0 commit comments

Comments
 (0)