mirror of
https://github.com/FOSSBilling/FOSSBilling.git
synced 2026-11-09 05:24:58 +09:00
* Update PHPUnit to version 10 Update composer and CI version of PHPUnit to 10, and migrate XML config to updated schema. * Update tests for PHPUnit 10 Update tests to replace depreciated functions in PHPUnit 10. Also, remove risky tests which don't assert anything.
594 lines
17 KiB
PHP
594 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),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @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),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @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'),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @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')->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')
|
|
->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')
|
|
->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')
|
|
->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')
|
|
->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($formId);
|
|
$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')->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(array());
|
|
$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')
|
|
->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);
|
|
}
|
|
|
|
|
|
}
|
|
|