Files
opnform-host-nginx/tests/Helpers/FormSubmissionDataFactory.php
Sutirtha Bharati Das a53677d2ed ENH: Phone Input Component (#189)
* #170-ENH: Created custom dropdown phone input

* #170-ENH: Added phone_number rules

* #170-ENH: Added phone_number rules

* #170-ENH: Added separate Rule for phone number input, starting 0 phone number is ignored, added regex to ignore non digit phone input

* #170-ENH: Removed global registration of CountryFlag

* #170-ENH: Using VSelect component for country selection, added prop for dropdown styling

* #170-ENH: Updated phone number rule

* #170-ENH: Added margins to country selector

---------

Co-authored-by: Sutirtha <sdas@republicfinance.com>
Co-authored-by: Julien Nahum <julien@nahum.net>
2023-09-12 10:13:10 +02:00

92 lines
2.9 KiB
PHP

<?php
namespace Tests\Helpers;
use App\Models\Forms\Form;
use Faker;
class FormSubmissionDataFactory
{
private Faker\Generator|null $faker;
public function __construct(private Form $form)
{
$this->faker = Faker\Factory::create();
}
public static function generateSubmissionData(Form $form, array $data = [])
{
return (new self($form))->createSubmissionData($data);
}
public function createSubmissionData($mergeData = [])
{
$data = [];
// for all non-hidden fields in form, create some fake data
collect($this->form->properties)->each(function ($property) use (&$data) {
$value = null;
switch ($property['type']) {
case 'text':
$value = $this->faker->name();
break;
case 'email':
$value = $this->faker->unique()->email();
break;
case 'checkbox':
$value = $this->faker->randomElement([true, false]);
break;
case 'number':
$value = $this->faker->numberBetween();
break;
case 'url':
$value = $this->faker->url();
break;
case 'phone_number':
$value = '+1 ' .$this->faker->phoneNumber();
break;
case 'date':
$value = $this->faker->date();
break;
case 'select':
$value = $this->generateSelectValue($property);
break;
case 'multi_select':
$value = $this->generateMultiSelectValues($property);
break;
case 'files':
$value = null; // TODO: Will do this in future
break;
}
$data[$property['id']] = $value;
});
return array_merge($data, $mergeData);
}
private function generateSelectValue($property)
{
$values = [];
if (isset($property["select"]["options"]) && count($property["select"]["options"]) > 0) {
$values = collect($property["select"]["options"])->map(function ($option) {
return $option['name'];
})->toArray();
}
return ($values) ? $this->faker->randomElement($values) : null;
}
private function generateMultiSelectValues($property)
{
$values = [];
if (isset($property["multi_select"]["options"]) && count($property["multi_select"]["options"]) > 0) {
$values = collect($property["multi_select"]["options"])->map(function ($option) {
return $option['name'];
})->toArray();
}
return ($values) ? $this->faker->randomElements(
$values,
$this->faker->numberBetween(1, count($values))) : null;
}
}