";s:10:"show_title";i:0;s:16:"show_description";i:0;s:11:"ajax_submit";i:0;}s:10:"created_at";s:19:"2026-01-13 10:02:32";s:6:"fields";a:7:{i:0;O:8:"stdClass":13:{s:2:"id";s:3:"248";s:9:"field_key";s:11:"first-name2";s:4:"name";s:10:"First name";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"1";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"25";s:10:"created_at";s:19:"2026-01-13 10:02:32";s:9:"form_name";s:12:"Appointments";}i:1;O:8:"stdClass":13:{s:2:"id";s:3:"249";s:9:"field_key";s:10:"last-name2";s:4:"name";s:9:"Last name";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"2";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"25";s:10:"created_at";s:19:"2026-01-13 10:02:32";s:9:"form_name";s:12:"Appointments";}i:2;O:8:"stdClass":13:{s:2:"id";s:3:"250";s:9:"field_key";s:6:"email2";s:4:"name";s:5:"Email";s:11:"description";s:0:"";s:4:"type";s:5:"email";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"3";s:8:"required";s:1:"1";s:13:"field_options";a:18:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;s:12:"autocomplete";s:5:"email";}s:7:"form_id";s:2:"25";s:10:"created_at";s:19:"2026-01-13 10:02:32";s:9:"form_name";s:12:"Appointments";}i:3;O:8:"stdClass":13:{s:2:"id";s:3:"251";s:9:"field_key";s:4:"date";s:4:"name";s:4:"Date";s:11:"description";s:0:"";s:4:"type";s:4:"date";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"4";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"25";s:10:"created_at";s:19:"2026-01-13 10:02:32";s:9:"form_name";s:12:"Appointments";}i:5;O:8:"stdClass":13:{s:2:"id";s:3:"253";s:9:"field_key";s:6:"minute";s:4:"name";s:6:"Minute";s:11:"description";s:0:"";s:4:"type";s:6:"select";s:13:"default_value";s:0:"";s:7:"options";a:12:{i:0;a:3:{s:5:"label";s:2:"00";s:5:"value";i:0;s:5:"image";i:0;}i:1;a:3:{s:5:"label";s:2:"05";s:5:"value";i:5;s:5:"image";i:0;}i:2;a:3:{s:5:"label";s:2:"10";s:5:"value";i:10;s:5:"image";i:0;}i:3;a:3:{s:5:"label";s:2:"15";s:5:"value";i:15;s:5:"image";i:0;}i:4;a:3:{s:5:"label";s:2:"20";s:5:"value";i:20;s:5:"image";i:0;}i:5;a:3:{s:5:"label";s:2:"25";s:5:"value";i:25;s:5:"image";i:0;}i:6;a:3:{s:5:"label";s:2:"30";s:5:"value";i:30;s:5:"image";i:0;}i:7;a:3:{s:5:"label";s:2:"35";s:5:"value";i:35;s:5:"image";i:0;}i:8;a:3:{s:5:"label";s:2:"40";s:5:"value";i:40;s:5:"image";i:0;}i:9;a:3:{s:5:"label";s:2:"45";s:5:"value";i:45;s:5:"image";i:0;}i:10;a:3:{s:5:"label";s:2:"50";s:5:"value";i:50;s:5:"image";i:0;}i:11;a:3:{s:5:"label";s:2:"55";s:5:"value";i:55;s:5:"image";i:0;}}s:11:"field_order";s:1:"6";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"25";s:10:"created_at";s:19:"2026-01-13 10:02:32";s:9:"form_name";s:12:"Appointments";}i:6;O:8:"stdClass":13:{s:2:"id";s:3:"261";s:9:"field_key";s:5:"uhayr";s:4:"name";s:6:"Submit";s:11:"description";s:0:"";s:4:"type";s:6:"submit";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"7";s:8:"required";s:1:"0";s:13:"field_options";a:21:{s:9:"edit_text";s:0:"";s:5:"align";s:0:"";s:10:"start_over";s:0:"";s:16:"start_over_label";s:0:"";s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:115:"
+ [input]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"25";s:10:"created_at";s:19:"2026-01-13 11:10:33";s:9:"form_name";s:12:"Appointments";}}}
\ No newline at end of file
diff --git a/tests/data/formidable/appointments-submission.php.txt b/tests/data/formidable/appointments-submission.php.txt
new file mode 100644
index 00000000..9691c718
--- /dev/null
+++ b/tests/data/formidable/appointments-submission.php.txt
@@ -0,0 +1 @@
+a:2:{s:2:"id";i:287;s:6:"values";a:7:{i:0;O:8:"stdClass":5:{s:2:"id";s:1:"6";s:10:"meta_value";s:6:"ELADIO";s:8:"field_id";s:1:"6";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}i:1;O:8:"stdClass":5:{s:2:"id";s:1:"7";s:10:"meta_value";s:6:"CHACON";s:8:"field_id";s:1:"7";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}i:2;O:8:"stdClass":5:{s:2:"id";s:1:"8";s:10:"meta_value";s:23:"wf96cchto@scientist.com";s:8:"field_id";s:1:"8";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}i:3;O:8:"stdClass":5:{s:2:"id";s:1:"9";s:10:"meta_value";s:10:"2026-01-27";s:8:"field_id";s:1:"9";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}i:4;O:8:"stdClass":5:{s:2:"id";s:2:"10";s:10:"meta_value";s:4:"9 AM";s:8:"field_id";s:2:"10";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}i:5;O:8:"stdClass":5:{s:2:"id";s:2:"11";s:10:"meta_value";s:2:"00";s:8:"field_id";s:2:"11";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}i:6;O:8:"stdClass":5:{s:2:"id";s:4:"1235";s:10:"meta_value";s:58:"a:1:{s:9:"unique_id";s:28:"c3765b97eb666469-19bb71a71c9";}";s:8:"field_id";s:1:"0";s:7:"item_id";s:3:"287";s:10:"created_at";s:19:"2026-01-13 11:25:23";}}}
diff --git a/tests/data/formidable/checkout-submission.php.txt b/tests/data/formidable/checkout-submission.php.txt
new file mode 100644
index 00000000..0f8faeb8
Binary files /dev/null and b/tests/data/formidable/checkout-submission.php.txt differ
diff --git a/tests/data/formidable/contacts-form.php.txt b/tests/data/formidable/contacts-form.php.txt
new file mode 100644
index 00000000..73455a54
--- /dev/null
+++ b/tests/data/formidable/contacts-form.php.txt
@@ -0,0 +1,36 @@
+O:8:"stdClass":13:{s:2:"id";s:2:"26";s:8:"form_key";s:8:"contacts";s:4:"name";s:8:"Contacts";s:11:"description";s:0:"";s:14:"parent_form_id";s:1:"0";s:9:"logged_in";s:1:"0";s:8:"editable";s:1:"0";s:11:"is_template";s:1:"0";s:16:"default_template";s:1:"0";s:6:"status";s:9:"published";s:7:"options";a:18:{s:12:"submit_value";s:6:"Submit";s:14:"success_action";s:7:"message";s:11:"success_msg";s:54:"Your responses were successfully submitted. Thank you!";s:9:"show_form";i:0;s:7:"akismet";s:0:"";s:13:"stopforumspam";i:0;s:8:"antispam";i:0;s:7:"no_save";i:0;s:9:"ajax_load";i:0;s:11:"js_validate";i:0;s:10:"form_class";s:0:"";s:12:"custom_style";i:1;s:11:"before_html";s:224:"
+[if form_name]
";s:10:"show_title";i:0;s:16:"show_description";i:0;s:11:"ajax_submit";i:0;}s:10:"created_at";s:19:"2026-01-13 10:03:07";s:6:"fields";a:4:{i:0;O:8:"stdClass":13:{s:2:"id";s:3:"254";s:9:"field_key";s:10:"your-email";s:4:"name";s:10:"Your email";s:11:"description";s:0:"";s:4:"type";s:5:"email";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"1";s:8:"required";s:1:"1";s:13:"field_options";a:18:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;s:12:"autocomplete";s:5:"email";}s:7:"form_id";s:2:"26";s:10:"created_at";s:19:"2026-01-13 10:03:07";s:9:"form_name";s:8:"Contacts";}i:1;O:8:"stdClass":13:{s:2:"id";s:3:"255";s:9:"field_key";s:15:"your-first-name";s:4:"name";s:15:"Your first name";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"2";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"26";s:10:"created_at";s:19:"2026-01-13 10:03:07";s:9:"form_name";s:8:"Contacts";}i:2;O:8:"stdClass":13:{s:2:"id";s:3:"256";s:9:"field_key";s:14:"your-last-name";s:4:"name";s:14:"Your last name";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"3";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"26";s:10:"created_at";s:19:"2026-01-13 10:03:07";s:9:"form_name";s:8:"Contacts";}i:3;O:8:"stdClass":13:{s:2:"id";s:3:"257";s:9:"field_key";s:10:"your-phone";s:4:"name";s:10:"Your phone";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"4";s:8:"required";s:1:"0";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"26";s:10:"created_at";s:19:"2026-01-13 10:03:07";s:9:"form_name";s:8:"Contacts";}}}
\ No newline at end of file
diff --git a/tests/data/formidable/contacts-submission.php.txt b/tests/data/formidable/contacts-submission.php.txt
new file mode 100644
index 00000000..0d7a9e0b
--- /dev/null
+++ b/tests/data/formidable/contacts-submission.php.txt
@@ -0,0 +1 @@
+a:2:{s:2:"id";i:289;s:6:"values";a:5:{i:0;O:8:"stdClass":5:{s:2:"id";s:2:"13";s:10:"meta_value";s:18:"hp3idrybf@yahoo.es";s:8:"field_id";s:2:"13";s:7:"item_id";s:3:"289";s:10:"created_at";s:19:"2026-01-13 11:29:53";}i:1;O:8:"stdClass":5:{s:2:"id";s:2:"14";s:10:"meta_value";s:5:"JULIO";s:8:"field_id";s:2:"14";s:7:"item_id";s:3:"289";s:10:"created_at";s:19:"2026-01-13 11:29:53";}i:2;O:8:"stdClass":5:{s:2:"id";s:2:"15";s:10:"meta_value";s:8:"CLEMENTE";s:8:"field_id";s:2:"15";s:7:"item_id";s:3:"289";s:10:"created_at";s:19:"2026-01-13 11:29:53";}i:3;O:8:"stdClass":5:{s:2:"id";s:2:"16";s:10:"meta_value";s:9:"739089195";s:8:"field_id";s:2:"16";s:7:"item_id";s:3:"289";s:10:"created_at";s:19:"2026-01-13 11:29:53";}i:4;O:8:"stdClass":5:{s:2:"id";s:4:"1245";s:10:"meta_value";s:58:"a:1:{s:9:"unique_id";s:28:"a689318e5a4b1d9c-19bb71e93d3";}";s:8:"field_id";s:1:"0";s:7:"item_id";s:3:"289";s:10:"created_at";s:19:"2026-01-13 11:29:53";}}}
diff --git a/tests/data/formidable/leads-form.php.txt b/tests/data/formidable/leads-form.php.txt
new file mode 100644
index 00000000..3d6882d2
--- /dev/null
+++ b/tests/data/formidable/leads-form.php.txt
@@ -0,0 +1,43 @@
+O:8:"stdClass":13:{s:2:"id";s:2:"24";s:8:"form_key";s:5:"leads";s:4:"name";s:5:"Leads";s:11:"description";s:0:"";s:14:"parent_form_id";s:1:"0";s:9:"logged_in";s:1:"0";s:8:"editable";s:1:"0";s:11:"is_template";s:1:"0";s:16:"default_template";s:1:"0";s:6:"status";s:9:"published";s:7:"options";a:18:{s:12:"submit_value";s:6:"Submit";s:14:"success_action";s:7:"message";s:11:"success_msg";s:54:"Your responses were successfully submitted. Thank you!";s:9:"show_form";i:0;s:7:"akismet";s:0:"";s:13:"stopforumspam";i:0;s:8:"antispam";i:0;s:7:"no_save";i:0;s:9:"ajax_load";i:0;s:11:"js_validate";i:0;s:10:"form_class";s:0:"";s:12:"custom_style";i:1;s:11:"before_html";s:224:"
+[if form_name]
";s:10:"show_title";i:0;s:16:"show_description";i:0;s:11:"ajax_submit";i:0;}s:10:"created_at";s:19:"2026-01-13 08:43:16";s:6:"fields";a:5:{i:0;O:8:"stdClass":13:{s:2:"id";s:3:"243";s:9:"field_key";s:10:"first-name";s:4:"name";s:10:"First name";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"1";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"24";s:10:"created_at";s:19:"2026-01-13 08:43:16";s:9:"form_name";s:5:"Leads";}i:1;O:8:"stdClass":13:{s:2:"id";s:3:"244";s:9:"field_key";s:9:"last-name";s:4:"name";s:9:"Last name";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"2";s:8:"required";s:1:"1";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"24";s:10:"created_at";s:19:"2026-01-13 08:43:16";s:9:"form_name";s:5:"Leads";}i:2;O:8:"stdClass":13:{s:2:"id";s:3:"245";s:9:"field_key";s:5:"email";s:4:"name";s:5:"Email";s:11:"description";s:0:"";s:4:"type";s:5:"email";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"3";s:8:"required";s:1:"1";s:13:"field_options";a:18:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;s:12:"autocomplete";s:5:"email";}s:7:"form_id";s:2:"24";s:10:"created_at";s:19:"2026-01-13 08:43:16";s:9:"form_name";s:5:"Leads";}i:3;O:8:"stdClass":13:{s:2:"id";s:3:"246";s:9:"field_key";s:5:"phone";s:4:"name";s:5:"Phone";s:11:"description";s:0:"";s:4:"type";s:4:"text";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"4";s:8:"required";s:1:"0";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:0:"";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"24";s:10:"created_at";s:19:"2026-01-13 08:43:16";s:9:"form_name";s:5:"Leads";}i:4;O:8:"stdClass":13:{s:2:"id";s:3:"247";s:9:"field_key";s:8:"comments";s:4:"name";s:8:"Comments";s:11:"description";s:0:"";s:4:"type";s:8:"textarea";s:13:"default_value";s:0:"";s:7:"options";s:0:"";s:11:"field_order";s:1:"5";s:8:"required";s:1:"0";s:13:"field_options";a:17:{s:4:"size";s:0:"";s:3:"max";s:1:"5";s:5:"label";s:0:"";s:5:"blank";s:29:"[field_name] cannot be blank.";s:18:"required_indicator";s:1:"*";s:7:"invalid";s:0:"";s:10:"unique_msg";s:0:"";s:14:"separate_value";i:0;s:14:"clear_on_focus";i:0;s:7:"classes";s:0:"";s:11:"custom_html";s:493:"
+
+ [input]
+ [if description]
[description]
[/if description]
+ [if error]
[error]
[/if error]
+
";s:6:"minnum";i:1;s:6:"maxnum";i:10;s:4:"step";i:1;s:6:"format";s:0:"";s:11:"placeholder";s:0:"";s:5:"draft";i:0;}s:7:"form_id";s:2:"24";s:10:"created_at";s:19:"2026-01-13 08:43:16";s:9:"form_name";s:5:"Leads";}}}
\ No newline at end of file
diff --git a/tests/data/formidable/leads-submission.php.txt b/tests/data/formidable/leads-submission.php.txt
new file mode 100644
index 00000000..c6a7ddbd
--- /dev/null
+++ b/tests/data/formidable/leads-submission.php.txt
@@ -0,0 +1 @@
+a:2:{s:2:"id";i:291;s:6:"values";a:6:{i:0;O:8:"stdClass":5:{s:2:"id";s:2:"17";s:10:"meta_value";s:5:"JULIO";s:8:"field_id";s:2:"17";s:7:"item_id";s:3:"291";s:10:"created_at";s:19:"2026-01-13 11:31:42";}i:1;O:8:"stdClass":5:{s:2:"id";s:2:"18";s:10:"meta_value";s:8:"CLEMENTE";s:8:"field_id";s:2:"18";s:7:"item_id";s:3:"291";s:10:"created_at";s:19:"2026-01-13 11:31:42";}i:2;O:8:"stdClass":5:{s:2:"id";s:2:"19";s:10:"meta_value";s:18:"hp3idrybf@yahoo.es";s:8:"field_id";s:2:"19";s:7:"item_id";s:3:"291";s:10:"created_at";s:19:"2026-01-13 11:31:42";}i:3;O:8:"stdClass":5:{s:2:"id";s:2:"20";s:10:"meta_value";s:9:"739089195";s:8:"field_id";s:2:"20";s:7:"item_id";s:3:"291";s:10:"created_at";s:19:"2026-01-13 11:31:42";}i:4;O:8:"stdClass":5:{s:2:"id";s:2:"21";s:10:"meta_value";s:54:"CUESTA DE ESPAÑA, 72, 13884, CIUDAD REAL(CIUDAD REAL)";s:8:"field_id";s:2:"21";s:7:"item_id";s:3:"291";s:10:"created_at";s:19:"2026-01-13 11:31:42";}i:5;O:8:"stdClass":5:{s:2:"id";s:4:"1255";s:10:"meta_value";s:58:"a:1:{s:9:"unique_id";s:28:"c9edf13eb0ef60e0-19bb7203d10";}";s:8:"field_id";s:1:"0";s:7:"item_id";s:3:"291";s:10:"created_at";s:19:"2026-01-13 11:31:42";}}}
diff --git a/tests/integrations/FORMIDABLE_TESTS.md b/tests/integrations/FORMIDABLE_TESTS.md
new file mode 100644
index 00000000..0dc0f0cf
--- /dev/null
+++ b/tests/integrations/FORMIDABLE_TESTS.md
@@ -0,0 +1,97 @@
+# Formidable Integration Tests
+
+## Overview
+This document describes the test structure for the Formidable Forms integration with the Forms Bridge plugin.
+
+## Files Created
+
+### 1. Test File
+**Location:** `tests/integrations/test-formidable.php`
+
+This file contains the main test class `FormidableTest` that extends `BaseIntegrationTest` and implements the required methods for testing the Formidable Forms integration.
+
+**Key Components:**
+- `NAME` constant set to `'formidable'`
+- Implementation of required methods:
+ - `get_forms()` - Retrieves published forms using `FrmForm::get_published_forms()`
+ - `add_form($config)` - Creates a new form with fields
+ - `delete_form($form)` - Deletes a form using `FrmForm::destroy()`
+
+**Test Methods:**
+1. `test_job_position_form_serialization()` - Tests form field serialization
+2. `test_job_position_form_submission_serialization()` - Tests submission data serialization
+3. `test_contact_form_serialization()` - Tests complex form with various field types
+4. `test_contact_form_submission_serialization()` - Tests complex submission data
+5. `test_form_templates()` - Tests form creation from templates
+
+### 2. Test Data Files
+**Location:** `tests/data/formidable/`
+
+#### Form Data Files:
+- `job-position-form.php.txt` - Serialized Formidable form object for "Job position" form
+- `contact-form.php.txt` - Serialized Formidable form object for "Contact Form"
+
+#### Submission Data Files:
+- `job-position-submission.php.txt` - Serialized submission data for job position form
+- `contact-submission.php.txt` - Serialized submission data for contact form
+
+## Test Structure
+
+The tests follow the same pattern as other integration tests in the codebase:
+
+1. **Form Serialization Tests**: Verify that form fields are correctly serialized with proper types, labels, and options
+2. **Submission Serialization Tests**: Verify that submission data is correctly extracted and formatted
+3. **Template Tests**: Verify that forms can be created from template definitions
+
+## Running the Tests
+
+To run the formidable integration tests:
+
+```bash
+# First, set up the WordPress test environment
+./bin/install-wp-tests.sh db_name db_user db_password db_host wp_version
+
+# Then run the tests
+./vendor/bin/phpunit tests/integrations/test-formidable.php
+```
+
+## Test Data Format
+
+The test data files contain serialized PHP objects that represent:
+
+### Form Objects:
+- Form ID, name, description, form_key, status
+- Form metadata and configuration
+
+### Submission Objects:
+- Submission ID, form_id, timestamps
+- Meta data containing field values
+- Each field value includes field_id, meta_value, and timestamps
+
+## Integration with Base Test Class
+
+The `FormidableTest` class extends `BaseIntegrationTest` which provides:
+- Common test utilities and assertions
+- Form and submission serialization methods
+- Template loading and testing infrastructure
+- Setup and teardown methods for test isolation
+
+## Key Assertions
+
+The tests use the `assertField()` helper method from the base class to verify:
+- Field type and basetype
+- Field schema (data type)
+- Required status
+- File upload status
+- Multi-value status
+- Conditional logic status
+- Field options and labels
+
+## Future Enhancements
+
+Potential areas for additional testing:
+- Repeater fields
+- Embedded forms
+- Conditional logic
+- File upload handling
+- Complex field types (address, credit card, etc.)
diff --git a/tests/integrations/class-base-integration-test.php b/tests/integrations/class-base-integration-test.php
index 0d507c9e..d4c494a7 100644
--- a/tests/integrations/class-base-integration-test.php
+++ b/tests/integrations/class-base-integration-test.php
@@ -66,6 +66,8 @@ protected static function get_form( $title ) {
}
} elseif ( is_object( $form ) && property_exists( $form, 'post_title' ) && $form->post_title === $title ) {
return $form;
+ } elseif ( is_object( $form ) && property_exists( $form, 'name' ) && $form->name === $title ) {
+ return $form;
}
}
diff --git a/tests/integrations/test-formidable.php b/tests/integrations/test-formidable.php
new file mode 100644
index 00000000..e6829feb
--- /dev/null
+++ b/tests/integrations/test-formidable.php
@@ -0,0 +1,213 @@
+ $config->name,
+ 'description' => '',
+ 'status' => 'published',
+ 'form_key' => $config->form_key,
+ );
+
+ $form_id = FrmForm::create( $form_data );
+
+ if ( ! $form_id ) {
+ return null;
+ }
+
+ // Add fields if they exist in config
+ if ( isset( $config->fields ) && is_array( $config->fields ) ) {
+ foreach ( $config->fields as $field ) {
+ $field_data = array(
+ 'type' => $field->type,
+ 'field_key' => $field->field_key,
+ 'name' => $field->name,
+ 'description' => $field->description,
+ 'required' => $field->required,
+ 'options' => $field->options,
+ 'field_options' => $field->field_options,
+ 'form_id' => $form_id,
+ 'default_value' => $field->default_value,
+ );
+
+ $field_data['field_options']['draft'] = 0;
+
+ FrmField::create( $field_data );
+ }
+ }
+
+ return $form_id;
+ }
+
+ protected static function delete_form( $form ) {
+ return (bool) FrmForm::destroy( $form->id );
+ }
+
+ public function test_appointments_form_serialization() {
+ $form = self::get_form( 'Appointments' );
+ $form_data = $this->serialize_form( $form );
+
+ $fields = $form_data['fields'];
+ $this->assertEquals( 6, count( $fields ) );
+
+ $field = $fields[0];
+ $this->assertField( $field, 'text' );
+
+ $field = $fields[2];
+ $this->assertField( $field, 'email' );
+
+ $field = $fields[3];
+ $this->assertField(
+ $field,
+ 'date',
+ array( 'format' => 'yyyy-mm-dd' ),
+ );
+
+ $field = $fields[4];
+ $this->assertEquals( 24, count( $field['options'] ) );
+ $this->assertField( $field, 'select' );
+ }
+
+ public function test_appointments_submission_serialization() {
+ $form = self::get_form( 'Appointments' );
+
+ $form_data = $this->serialize_form( $form );
+
+ $store = self::store();
+ foreach ( $store as $name => $object ) {
+ if ( 'appointments-submission' === $name ) {
+ $submission = $object;
+ break;
+ }
+ }
+
+ if ( ! isset( $submission ) ) {
+ throw new Exception( 'Appointments submission not found' );
+ }
+
+ $payload = $this->serialize_submission( $submission, $form_data );
+
+ $this->assertSame( 'ELADIO', $payload['First name'] );
+ $this->assertSame( 'CHACON', $payload['Last name'] );
+ $this->assertSame( 'wf96cchto@scientist.com', $payload['Email'] );
+ $this->assertSame( '2026-01-27', $payload['Date'] );
+ $this->assertSame( '9 AM', $payload['Hour'] );
+ $this->assertSame( '00', $payload['Minute'] );
+ }
+
+ public function test_contacts_form_serialization() {
+ $form = self::get_form( 'Contacts' );
+
+ $form_data = $this->serialize_form( $form );
+
+ $fields = $form_data['fields'];
+ $this->assertEquals( 4, count( $fields ) );
+
+ $field = $fields[0];
+ $this->assertField( $field, 'email' );
+
+ $field = $fields[2];
+ $this->assertField( $field, 'text' );
+
+ $field = $fields[3];
+ $this->assertField( $field, 'text', array( 'required' => false ) );
+ }
+
+ public function test_contacts_submission_serialization() {
+ $form = self::get_form( 'Contacts' );
+
+ $form_data = $this->serialize_form( $form );
+
+ $store = self::store();
+ foreach ( $store as $name => $object ) {
+ if ( 'contacts-submission' === $name ) {
+ $submission = $object;
+ break;
+ }
+ }
+
+ if ( ! isset( $submission ) ) {
+ throw new Exception( 'Contact submission not found' );
+ }
+
+ $payload = $this->serialize_submission( $submission, $form_data );
+
+ $this->assertSame( 'hp3idrybf@yahoo.es', $payload['Your email'] );
+ $this->assertSame( 'JULIO', $payload['Your first name'] );
+ $this->assertSame( 'CLEMENTE', $payload['Your last name'] );
+ $this->assertSame( '739089195', $payload['Your phone'] );
+ }
+
+ public function test_leads_form_serialization() {
+ $form = self::get_form( 'Leads' );
+
+ $form_data = $this->serialize_form( $form );
+
+ $fields = $form_data['fields'];
+ $this->assertEquals( 5, count( $fields ) );
+
+ $field = $fields[3];
+ $this->assertField( $field, 'text', array( 'required' => false ) );
+
+ $field = $fields[4];
+ $this->assertField( $field, 'textarea', array( 'required' => false ) );
+ }
+
+ public function test_leads_submission_serialization() {
+ $form = self::get_form( 'Leads' );
+
+ $form_data = $this->serialize_form( $form );
+
+ $store = self::store();
+ foreach ( $store as $name => $object ) {
+ if ( 'leads-submission' === $name ) {
+ $submission = $object;
+ break;
+ }
+ }
+
+ if ( ! isset( $submission ) ) {
+ throw new Exception( 'Leads submission not found' );
+ }
+
+ $payload = $this->serialize_submission( $submission, $form_data );
+
+ $this->assertSame( 'JULIO', $payload['First name'] );
+ $this->assertSame( 'CLEMENTE', $payload['Last name'] );
+ $this->assertSame( 'hp3idrybf@yahoo.es', $payload['Email'] );
+ $this->assertSame( '739089195', $payload['Phone'] );
+ $this->assertSame( 'CUESTA DE ESPAÑA, 72, 13884, CIUDAD REAL(CIUDAD REAL)', $payload['Comments'] );
+ }
+
+ public function test_form_templates() {
+ $this->run_test_form_templates();
+ }
+}