mirror of
https://github.com/FOSSBilling/FOSSBilling.git
synced 2026-11-09 05:24:58 +09:00
* Update rector config to include tests * Run Rector against the tests * Delete test-results * Update .gitignore * Correctly set the PHP min to 8.1, split the configs * Corrected PHPDoc * Deleted tests we can't really get to pass PHPunit is hard-coded to fail when a class has a return type of `never`, which is the correct return type of our redirect function (and rightfully so). No way to disable the exception as far as we can tell
588 lines
17 KiB
PHP
588 lines
17 KiB
PHP
<?php
|
|
|
|
|
|
namespace Box\Mod\Formbuilder;
|
|
|
|
|
|
class ServiceTest extends \BBTestCase {
|
|
|
|
/**
|
|
* @var \Box\Mod\Formbuilder\Service
|
|
*/
|
|
protected $service = null;
|
|
|
|
|
|
public function setup(): void
|
|
{
|
|
$this->service = new \Box\Mod\Formbuilder\Service();
|
|
}
|
|
|
|
|
|
public function testgetDi()
|
|
{
|
|
$di = new \Pimple\Container();
|
|
$this->service->setDi($di);
|
|
$getDi = $this->service->getDi();
|
|
$this->assertEquals($di, $getDi);
|
|
}
|
|
|
|
public function testgetFormFieldsTypes()
|
|
{
|
|
$expected = array(
|
|
"text" => 'Text input',
|
|
"select" => 'Dropdown',
|
|
"radio" => 'Radio select',
|
|
"checkbox" => 'Checkbox',
|
|
"textarea" => 'Text area'
|
|
);
|
|
|
|
$result = $this->service->getFormFieldsTypes();
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public static function typeValidationData()
|
|
{
|
|
return array(
|
|
array('select', true),
|
|
array('custom', false),
|
|
);
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\DataProvider('typeValidationData')]
|
|
public function testtypeValidation($type, $expected)
|
|
{
|
|
$result = $this->service->typeValidation($type);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public static function isArrayUniqueData()
|
|
{
|
|
return array(
|
|
array(array('sameValue', 'sameValue'), false),
|
|
array(array('sameValue', 'DiffValue'), true),
|
|
array(array(), true),
|
|
);
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\DataProvider('isArrayUniqueData')]
|
|
public function testisArrayUnique($data, $expected)
|
|
{
|
|
$result = $this->service->isArrayUnique($data);
|
|
$this->assertEquals($expected, $result);
|
|
}
|
|
|
|
public function testaddNewForm()
|
|
{
|
|
$newFormId = 1;
|
|
$data = array(
|
|
'name' => 'testName',
|
|
'style' => array(),
|
|
);
|
|
|
|
$model = new \Model_Form();
|
|
$model->loadBean(new \DummyBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue($newFormId));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->addNewForm($data);
|
|
|
|
$this->assertIsInt($result);
|
|
$this->assertEquals($newFormId, $result);
|
|
}
|
|
|
|
public function testaddNewField()
|
|
{
|
|
$newFieldId = 1;
|
|
$data = array(
|
|
'form_id' => 1,
|
|
'type' => 'select'
|
|
);
|
|
|
|
$model = new \Model_FormField();
|
|
$model->loadBean(new \DummyBean());
|
|
$model->id = 2;
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue($newFieldId));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getCell')
|
|
->will($this->returnValue(0));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->addNewField($data);
|
|
|
|
$this->assertIsInt($result);
|
|
$this->assertEquals($newFieldId, $result);
|
|
}
|
|
|
|
public static function updateFieldTypeData()
|
|
{
|
|
return array(
|
|
array('select'),
|
|
array('textarea'),
|
|
);
|
|
}
|
|
|
|
#[\PHPUnit\Framework\Attributes\DataProvider('updateFieldTypeData')]
|
|
public function testupdateField($fieldType)
|
|
{
|
|
$updateFIeldId = 2;
|
|
$data = array(
|
|
'id' => $updateFIeldId,
|
|
'form_id' => 1,
|
|
'type' => $fieldType,
|
|
'default_value' => 'defaultTestValue',
|
|
'values' => array('test'),
|
|
'labels' => array('labels'),
|
|
'name' => 'testFIeld',
|
|
'textarea_size' => array(64), // @TODO WHY ARRAY??
|
|
'textarea_option' => array(''), //textarea_size & textarea_option should have an equal number of elements
|
|
);
|
|
|
|
$model = new \Model_FormField();
|
|
$model->loadBean(new \DummyBean());
|
|
|
|
$modelArray = array(
|
|
'id' => $updateFIeldId,
|
|
'form_id' => 1,
|
|
'options' => '{"hidden":"hidden"}',
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('dispense')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('store')
|
|
->will($this->returnValue($updateFIeldId));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getExistingModelById')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('toArray')
|
|
->will($this->returnValue($modelArray));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
|
|
$validatorMock = $this->getMockBuilder('\\' . \FOSSBilling\Validate::class)->disableOriginalConstructor()->getMock();
|
|
$validatorMock->expects($this->atLeastOnce())
|
|
->method('checkRequiredParamsForArray')
|
|
->will($this->returnValue(null));
|
|
$di['validator'] = $validatorMock;
|
|
|
|
$this->service->setDi($di);
|
|
|
|
$result = $this->service->updateField($data);
|
|
$this->assertIsInt($result);
|
|
$this->assertEquals($updateFIeldId, $result);
|
|
}
|
|
|
|
public function testupdateFieldExists()
|
|
{
|
|
$data = array(
|
|
'id' => 2,
|
|
'form_id' => 1,
|
|
'name' => 'testFIeld',
|
|
'type' => 'select',
|
|
);
|
|
|
|
$serviceMock = $this->getMockBuilder('\\' . \Box\Mod\Formbuilder\Service::class)
|
|
->onlyMethods(array('formFieldNameExists', 'getField'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('formFieldNameExists')
|
|
->will($this->returnValue(true));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getField');
|
|
|
|
$this->expectException(\FOSSBilling\Exception::class);
|
|
$this->expectExceptionCode(7628);
|
|
$this->expectExceptionMessage('Unfortunately field with this name exists in this form already. Form must have different field names.');
|
|
$serviceMock->updateField($data);
|
|
}
|
|
|
|
public function testupdateFieldValuesNotUnique()
|
|
{
|
|
$data = array(
|
|
'id' => 2,
|
|
'form_id' => 1,
|
|
'type' => 'select',
|
|
'default_value' => 'defaultTestValue',
|
|
'values' => array('test', 'test'),
|
|
'labels' => array('labels'),
|
|
'name' => 'testFIeld',
|
|
);
|
|
|
|
$serviceMock = $this->getMockBuilder('\\' . \Box\Mod\Formbuilder\Service::class)
|
|
->onlyMethods(array('formFieldNameExists', 'getField'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('formFieldNameExists')
|
|
->will($this->returnValue(false));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getField');
|
|
|
|
$this->expectException(\FOSSBilling\Exception::class);
|
|
$this->expectExceptionCode(1597);
|
|
$this->expectExceptionMessage(ucfirst($data['type']).' values must be unique');
|
|
$serviceMock->updateField($data);
|
|
}
|
|
|
|
public function testupdateFieldLabelsNotUnique()
|
|
{
|
|
$data = array(
|
|
'id' => 2,
|
|
'form_id' => 1,
|
|
'type' => 'select',
|
|
'default_value' => 'defaultTestValue',
|
|
'values' => array('test'),
|
|
'labels' => array('labels', 'labels'),
|
|
'name' => 'testFIeld',
|
|
);
|
|
|
|
$serviceMock = $this->getMockBuilder('\\' . \Box\Mod\Formbuilder\Service::class)
|
|
->onlyMethods(array('formFieldNameExists', 'getField'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('formFieldNameExists')
|
|
->will($this->returnValue(false));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getField');
|
|
|
|
$this->expectException(\FOSSBilling\Exception::class);
|
|
$this->expectExceptionCode(1598);
|
|
$this->expectExceptionMessage(ucfirst($data['type']).' labels must be unique');
|
|
$serviceMock->updateField($data);
|
|
}
|
|
|
|
public function testupdateFieldTextAreaSizeException()
|
|
{
|
|
$data = array(
|
|
'id' => 2,
|
|
'form_id' => 1,
|
|
'type' => 'textarea',
|
|
'default_value' => 'defaultTestValue',
|
|
'values' => array('test'),
|
|
'labels' => array('labels'),
|
|
'name' => 'testFIeld',
|
|
'textarea_size' => array(''), // @TODO WHY ARRAY??
|
|
'textarea_option' => array(''), //textarea_size & textarea_option should have an equal number of elements
|
|
);
|
|
|
|
$serviceMock = $this->getMockBuilder('\\' . \Box\Mod\Formbuilder\Service::class)
|
|
->onlyMethods(array('formFieldNameExists', 'getField'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('formFieldNameExists')
|
|
->will($this->returnValue(false));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getField');
|
|
|
|
$this->expectException(\FOSSBilling\Exception::class);
|
|
$this->expectExceptionCode(3510);
|
|
$this->expectExceptionMessage('Textarea size options must be integer values');
|
|
$serviceMock->updateField($data);
|
|
}
|
|
|
|
public function testgetForm()
|
|
{
|
|
$modelArray = array(
|
|
'style' => '',
|
|
'id' => 1,
|
|
);
|
|
$getAllResult = array(
|
|
array(
|
|
'options' => '{"options":["hidden"]}',
|
|
'default_value' => 'TestingValue'
|
|
),
|
|
);
|
|
|
|
$model = new \Model_Form();
|
|
$model->loadBean(new \DummyBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getExistingModelById')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('toArray')
|
|
->will($this->returnValue($modelArray));
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue($getAllResult));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
|
|
$formId = 1;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getForm($formId);
|
|
$this->assertIsArray($result);
|
|
}
|
|
|
|
public function testgetFormFields()
|
|
{
|
|
$formId = 1;
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getFormFields($formId);
|
|
$this->assertIsArray($result);
|
|
}
|
|
|
|
public function testgetFormFieldsCount()
|
|
{
|
|
$formId = 1;
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getCell')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getFormFieldsCount($formId);
|
|
$this->assertIsArray($result);
|
|
}
|
|
|
|
public function testgetFormPairs()
|
|
{
|
|
$formId = 1;
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAssoc')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getFormPairs();
|
|
$this->assertIsArray($result);
|
|
}
|
|
|
|
public function testgetField()
|
|
{
|
|
$fieldId = 2;
|
|
$modelArray = array(
|
|
'id' => 2,
|
|
'options' => '{"options":["hidden"]}',
|
|
);
|
|
|
|
$expectedArray = $modelArray;
|
|
$expectedArray['options'] = json_decode($expectedArray['options']);
|
|
|
|
$model = new \Model_FormField();
|
|
$model->loadBean(new \DummyBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getExistingModelById')
|
|
->will($this->returnValue($model));
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('toArray')
|
|
->will($this->returnValue($modelArray));
|
|
|
|
$di = new \Pimple\Container();
|
|
$validatorMock = $this->getMockBuilder('\\' . \FOSSBilling\Validate::class)->disableOriginalConstructor()->getMock();
|
|
$validatorMock->expects($this->atLeastOnce())
|
|
->method('checkRequiredParamsForArray')
|
|
->will($this->returnValue(null));
|
|
$di['validator'] = $validatorMock;
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getField($fieldId);
|
|
$this->assertIsArray($result);
|
|
$this->assertEquals($expectedArray, $result);
|
|
}
|
|
|
|
public function testremoveForm()
|
|
{
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->exactly(4))
|
|
->method('exec');
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
$formId = 1;
|
|
$result = $this->service->removeForm($formId);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testremoveField()
|
|
{
|
|
$data = array('id' => 1);
|
|
|
|
$model = new \Model_FormField();
|
|
$model->loadBean(new \DummyBean());
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getExistingModelById')
|
|
->will($this->returnValue($model));
|
|
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('trash');
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->removeField($data);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testformFieldNameExists()
|
|
{
|
|
$data = array(
|
|
'field_name' => 'testingName',
|
|
'form_id' => 2,
|
|
'field_id' => 10,
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('findOne')
|
|
->will($this->returnValue(new \Model_FormField()));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->formFieldNameExists($data);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
public function testgetForms()
|
|
{
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->atLeastOnce())
|
|
->method('getAll')
|
|
->will($this->returnValue(array()));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->getForms();
|
|
$this->assertIsArray($result);
|
|
}
|
|
|
|
public function testduplicateForm()
|
|
{
|
|
$data = array(
|
|
'form_id' => 1,
|
|
'name' => 'testForm',
|
|
);
|
|
|
|
$newFormId = 3;
|
|
$newFieldId = 4;
|
|
$fields = array(
|
|
'options' => array(),
|
|
);
|
|
|
|
$serviceMock = $this->getMockBuilder('\\' . \Box\Mod\Formbuilder\Service::class)
|
|
->onlyMethods(array('getFormFields', 'addNewForm', 'addNewField'))
|
|
->getMock();
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('getFormFields')
|
|
->will($this->returnValue($fields));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('addNewForm')
|
|
->will($this->returnValue($newFormId));
|
|
|
|
$serviceMock->expects($this->atLeastOnce())
|
|
->method('addNewField')
|
|
->will($this->returnValue($newFieldId));
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$serviceMock->setDi($di);
|
|
$result = $serviceMock->duplicateForm($data);
|
|
$this->assertIsInt($result);
|
|
$this->assertEquals($newFormId, $result);
|
|
}
|
|
|
|
public function testupdateFormSettings()
|
|
{
|
|
$data = array(
|
|
'type' => 'default',
|
|
'form_name' => 'testForm',
|
|
'form_id' => 1,
|
|
);
|
|
|
|
$dbMock = $this->getMockBuilder('\Box_Database')->getMock();
|
|
$dbMock->expects($this->exactly(2))
|
|
->method('exec');
|
|
|
|
$di = new \Pimple\Container();
|
|
$di['db'] = $dbMock;
|
|
$di['logger'] = new \Box_Log();
|
|
|
|
$this->service->setDi($di);
|
|
$result = $this->service->updateFormSettings($data);
|
|
$this->assertTrue($result);
|
|
}
|
|
|
|
|
|
}
|
|
|