Cleanup core pseudoconstant buildOptions
[civicrm-core.git] / tests / phpunit / CRM / Price / Form / OptionTest.php
CommitLineData
7237222f
TO
1<?php
2
3class CRM_Price_Form_OptionTest extends CiviUnitTestCase {
4
5 protected $priceFieldValues;
f78dbf0b 6
7237222f 7 protected $visibilityOptionsKeys;
f78dbf0b 8
7237222f 9 protected $visibilityOptions;
f78dbf0b 10
7237222f 11 protected $publicValue;
f78dbf0b 12
7237222f
TO
13 protected $adminValue;
14
15 public function setUp() {
16 parent::setUp();
17
39868387 18 $this->visibilityOptions = CRM_Core_PseudoConstant::get('CRM_Price_BAO_PriceFieldValue', 'visibility_id', [
7237222f 19 'labelColumn' => 'name',
f78dbf0b 20 ]);
39868387 21 $this->visibilityOptionsKeys = CRM_Core_PseudoConstant::get('CRM_Price_BAO_PriceFieldValue', 'visibility_id', [
7237222f
TO
22 'labelColumn' => 'name',
23 'flip' => TRUE,
f78dbf0b 24 ]);
7237222f
TO
25 }
26
27 public function testChangingUniquePublicOptionOnPublicFieldIsNotAllowed() {
f78dbf0b 28 $this->setUpPriceSet([
7237222f
TO
29 'html_type' => 'Select',
30 'visibility_id' => $this->visibilityOptionsKeys['public'],
f78dbf0b 31 'option_label' => ['1' => 'Price Field 1', '2' => 'Price Field 2'],
32 'option_value' => ['1' => 100, '2' => 200],
33 'option_name' => ['1' => 'Price Field 1', '2' => 'Price Field 2'],
34 'option_weight' => ['1' => 1, '2' => 2],
35 'option_amount' => ['1' => 100, '2' => 200],
36 'option_visibility_id' => [1 => $this->visibilityOptionsKeys['public'], 2 => $this->visibilityOptionsKeys['admin']],
37 ]);
38
39 $params = [
7237222f
TO
40 'fieldId' => $this->publicValue['price_field_id'],
41 'optionId' => $this->publicValue['id'],
42 'visibility_id' => $this->visibilityOptionsKeys['admin'],
f78dbf0b 43 ];
7237222f
TO
44
45 $form = new CRM_Price_Form_Option();
46 $form->_action = CRM_Core_Action::ADD;
f78dbf0b 47 $files = [];
7237222f
TO
48
49 $validationResult = $form->formRule($params, $files, $form);
50 $this->assertType('array', $validationResult);
51 $this->assertTrue(array_key_exists('visibility_id', $validationResult));
52 }
53
54 public function testAddingPublicOptionToAdminFieldIsNotAllowed() {
f78dbf0b 55 $this->setUpPriceSet([
7237222f
TO
56 'html_type' => 'Select',
57 'visibility_id' => $this->visibilityOptionsKeys['admin'],
f78dbf0b 58 'option_label' => ['1' => 'Price Field 1', '2' => 'Price Field 2'],
59 'option_value' => ['1' => 100, '2' => 200],
60 'option_name' => ['1' => 'Price Field 1', '2' => 'Price Field 2'],
61 'option_weight' => ['1' => 1, '2' => 2],
62 'option_amount' => ['1' => 100, '2' => 200],
63 'option_visibility_id' => [1 => $this->visibilityOptionsKeys['admin'], 2 => $this->visibilityOptionsKeys['admin']],
64 ]);
65
66 $params = [
7237222f
TO
67 'fieldId' => $this->adminValue['price_field_id'],
68 'optionId' => $this->adminValue['id'],
69 'visibility_id' => $this->visibilityOptionsKeys['public'],
f78dbf0b 70 ];
7237222f
TO
71
72 $form = new CRM_Price_Form_Option();
73 $form->_action = CRM_Core_Action::ADD;
f78dbf0b 74 $files = [];
7237222f
TO
75
76 $validationResult = $form->formRule($params, $files, $form);
77 $this->assertType('array', $validationResult);
78 $this->assertTrue(array_key_exists('visibility_id', $validationResult));
79 }
80
81 private function setUpPriceSet($params) {
82 $priceSetCreateResult = $this->createPriceSet('contribution_page', NULL, $params);
83
84 $this->priceFieldValues = $priceSetCreateResult['values'];
85
86 foreach ($this->priceFieldValues as $currentField) {
87 if ($this->visibilityOptions[$currentField['visibility_id']] == 'public') {
88 $this->publicValue = $currentField;
89 }
90 else {
91 $this->adminValue = $currentField;
92 }
93 }
94 }
95
96}