From bde70650f8a8d5b211b40650e1eaadb78815c9a1 Mon Sep 17 00:00:00 2001 From: Camilo Rodriguez Date: Fri, 25 Aug 2017 15:12:57 +0000 Subject: [PATCH] CRM-12167: Add Tests for Price Field Option Visibility Added tests to verify the field is added to the DAO and validations work on Field creation form and Option create/edit form. --- .../CRM/Price/BAO/PriceFieldValueTest.php | 57 ++++++++++++ tests/phpunit/CRM/Price/Form/FieldTest.php | 84 +++++++++++++++++ tests/phpunit/CRM/Price/Form/OptionTest.php | 91 +++++++++++++++++++ 3 files changed, 232 insertions(+) create mode 100755 tests/phpunit/CRM/Price/BAO/PriceFieldValueTest.php create mode 100755 tests/phpunit/CRM/Price/Form/FieldTest.php create mode 100755 tests/phpunit/CRM/Price/Form/OptionTest.php diff --git a/tests/phpunit/CRM/Price/BAO/PriceFieldValueTest.php b/tests/phpunit/CRM/Price/BAO/PriceFieldValueTest.php new file mode 100755 index 0000000000..c8d3252b8a --- /dev/null +++ b/tests/phpunit/CRM/Price/BAO/PriceFieldValueTest.php @@ -0,0 +1,57 @@ +assertArrayKeyExists('visibility_id', $fields); + $this->assertEquals('visibility', $fields['visibility_id']['pseudoconstant']['optionGroupName']); + } +} diff --git a/tests/phpunit/CRM/Price/Form/FieldTest.php b/tests/phpunit/CRM/Price/Form/FieldTest.php new file mode 100755 index 0000000000..f87528f1a2 --- /dev/null +++ b/tests/phpunit/CRM/Price/Form/FieldTest.php @@ -0,0 +1,84 @@ +visibilityOptionsKeys = CRM_Price_BAO_PriceFieldValue::buildOptions('visibility_id', NULL, array( + 'labelColumn' => 'name', + 'flip' => TRUE, + )); + + $this->publicFieldParams = $this->initializeFieldParameters(array( + 'label' => 'Public Price Field', + 'name' => 'public_price', + 'visibility_id' => $this->visibilityOptionsKeys['public'], + )); + + $this->adminFieldParams = $this->initializeFieldParameters(array( + 'label' => 'Public Price Field', + 'name' => 'public_price', + 'visibility_id' => $this->visibilityOptionsKeys['admin'], + )); + } + + public function testPublicFieldWithOnlyAdminOptionsIsNotAllowed() { + $this->publicFieldParams['option_label'][1] = 'Admin Price'; + $this->publicFieldParams['option_amount'][1] = 10; + $this->publicFieldParams['option_visibility_id'][1] = $this->visibilityOptionsKeys['admin']; + + $form = new CRM_Price_Form_Field(); + $form->_action = CRM_Core_Action::ADD; + $files = array(); + + $validationResult = $form->formRule($this->publicFieldParams, $files, $form); + $this->assertType('array', $validationResult); + $this->assertTrue(array_key_exists('visibility_id', $validationResult)); + } + + public function testAdminFieldDoesNotAllowPublicOptions() { + $this->adminFieldParams['option_label'][1] = 'Admin Price'; + $this->adminFieldParams['option_amount'][1] = 10; + $this->adminFieldParams['option_visibility_id'][1] = $this->visibilityOptionsKeys['public']; + + $form = new CRM_Price_Form_Field(); + $form->_action = CRM_Core_Action::ADD; + $files = array(); + + $validationResult = $form->formRule($this->adminFieldParams, $files, $form); + $this->assertType('array', $validationResult); + $this->assertTrue(array_key_exists('visibility_id', $validationResult)); + } + + private function initializeFieldParameters($params) { + $defaultParams = array( + 'label' => 'Price Field', + 'name' => CRM_Utils_String::titleToVar('Price Field'), + 'html_type' => 'Select', + 'is_display_amounts' => 1, + 'weight' => 1, + 'options_per_line' => 1, + 'is_enter_qty' => 1, + 'financial_type_id' => $this->getFinancialTypeId('Event Fee'), + 'visibility_id' => $this->visibilityOptionsKeys['public'], + ); + + for ($index = 1; $index <= CRM_Price_Form_Field::NUM_OPTION; $index++) { + $defaultParams['option_label'][$index] = null; + $defaultParams['option_value'][$index] = null; + $defaultParams['option_name'][$index] = null; + $defaultParams['option_weight'][$index] = null; + $defaultParams['option_amount'][$index] = null; + $defaultParams['option_visibility_id'][$index] = null; + } + + return array_merge($defaultParams, $params); + } +} diff --git a/tests/phpunit/CRM/Price/Form/OptionTest.php b/tests/phpunit/CRM/Price/Form/OptionTest.php new file mode 100755 index 0000000000..8b31935759 --- /dev/null +++ b/tests/phpunit/CRM/Price/Form/OptionTest.php @@ -0,0 +1,91 @@ +visibilityOptions = CRM_Price_BAO_PriceFieldValue::buildOptions('visibility_id', NULL, array( + 'labelColumn' => 'name', + )); + $this->visibilityOptionsKeys = CRM_Price_BAO_PriceFieldValue::buildOptions('visibility_id', NULL, array( + 'labelColumn' => 'name', + 'flip' => TRUE, + )); + } + + public function testChangingUniquePublicOptionOnPublicFieldIsNotAllowed() { + $this->setUpPriceSet(array( + 'html_type' => 'Select', + 'visibility_id' => $this->visibilityOptionsKeys['public'], + 'option_label' => array('1' => 'Price Field 1', '2' => 'Price Field 2'), + 'option_value' => array('1' => 100, '2' => 200), + 'option_name' => array('1' => 'Price Field 1', '2' => 'Price Field 2'), + 'option_weight' => array('1' => 1, '2' => 2), + 'option_amount' => array('1' => 100, '2' => 200), + 'option_visibility_id' => array(1 => $this->visibilityOptionsKeys['public'], 2 => $this->visibilityOptionsKeys['admin']), + )); + + $params = array( + 'fieldId' => $this->publicValue['price_field_id'], + 'optionId' => $this->publicValue['id'], + 'visibility_id' => $this->visibilityOptionsKeys['admin'], + ); + + $form = new CRM_Price_Form_Option(); + $form->_action = CRM_Core_Action::ADD; + $files = array(); + + $validationResult = $form->formRule($params, $files, $form); + $this->assertType('array', $validationResult); + $this->assertTrue(array_key_exists('visibility_id', $validationResult)); + } + + public function testAddingPublicOptionToAdminFieldIsNotAllowed() { + $this->setUpPriceSet(array( + 'html_type' => 'Select', + 'visibility_id' => $this->visibilityOptionsKeys['admin'], + 'option_label' => array('1' => 'Price Field 1', '2' => 'Price Field 2'), + 'option_value' => array('1' => 100, '2' => 200), + 'option_name' => array('1' => 'Price Field 1', '2' => 'Price Field 2'), + 'option_weight' => array('1' => 1, '2' => 2), + 'option_amount' => array('1' => 100, '2' => 200), + 'option_visibility_id' => array(1 => $this->visibilityOptionsKeys['admin'], 2 => $this->visibilityOptionsKeys['admin']), + )); + + $params = array( + 'fieldId' => $this->adminValue['price_field_id'], + 'optionId' => $this->adminValue['id'], + 'visibility_id' => $this->visibilityOptionsKeys['public'], + ); + + $form = new CRM_Price_Form_Option(); + $form->_action = CRM_Core_Action::ADD; + $files = array(); + + $validationResult = $form->formRule($params, $files, $form); + $this->assertType('array', $validationResult); + $this->assertTrue(array_key_exists('visibility_id', $validationResult)); + } + + private function setUpPriceSet($params) { + $priceSetCreateResult = $this->createPriceSet('contribution_page', NULL, $params); + + $this->priceFieldValues = $priceSetCreateResult['values']; + + foreach ($this->priceFieldValues as $currentField) { + if ($this->visibilityOptions[$currentField['visibility_id']] == 'public') { + $this->publicValue = $currentField; + } else { + $this->adminValue = $currentField; + } + } + + } +} -- 2.25.1