Odyssey
FilterInputTest.php
1 <?php
2 /**
3  * Unit Test For HCUImport Var
4  * This is not a complete unit test, but it is a start
5  * unit testing can be difficult when testing against functions like filter_input which use
6  * builtin php superglobals. I experimented with modifying _POST, but that does not work
7  * with the filter_input function.
8  * Building a mock function may have worked, but what I did instead was use the
9  * HCU_FilterInput option of using the filter_var function.
10  * In order to do this I wrote a localized version of HCU_ImportVars.
11  * This option calls HCU_FilterInput slightly different
12  *
13  * MWS 3/2017
14 
15  */
16 
17 use PHPUnit\Framework\TestCase;
18 
19 $sharedLibrary= "/var/www/html/shared/library";
20 
21 require_once("$sharedLibrary/hcuCommon.i");
22 require_once("$sharedLibrary/dms_imp_val.i");
23 
24 class FilterInputTests extends TestCase
25 {
26 
27  protected static $testValues;
28  protected static $testOptions;
29 
30  /**
31  * This function will setup the default values for usage in the test
32  * The test should emulate a POST action.
33  * Because of the way the calls are done through filter_input
34  * $_POST must be made.
35  */
36  public function setUp() {
37 
38 
39  self::$testValues = Array(
40  'field1' => array(
41  "value" => "5'11\"",
42  "results" => array(
43  'FILTER_SANITIZE_STRING' => '5&#39;11&#34;',
44  'FILTER_SANITIZE_STRING_NO_ENCODE' => '5\'11"',
45  'FILTER_SANITIZE_NUMBER_FLOAT' => '511',
46  'FILTER_SANITIZE_NUMBER_FLOAT_ALLOW_FRACTION' => '511',
47  'FILTER_SANITIZE_NUMBER_INT' => '511',
48  'FILTER_SANITIZE_FULL_SPECIAL_CHARS' => '5&#039;11&quot;',
49  'FILTER_SANITIZE_FULL_SPECIAL_CHARS_NO_ENCODE' => '5\'11"',
50  'FILTER_VALIDATE_EMAIL' => '',
51  'FILTER_VALIDATE_INT' => '',
52  'FILTER_VALIDATE_FLOAT' => '',
53  'FILTER_VALIDATE_FLOAT_ALLOW_1000' => '',
54  'FILTER_VALIDATE_REGEXP' => ''
55  )
56  ),
57  'field2' => array(
58  "value" => "Billy's Account",
59  "results" => array(
60  'FILTER_SANITIZE_STRING' => 'Billy&#39;s Account',
61  'FILTER_SANITIZE_STRING_NO_ENCODE' => 'Billy\'s Account',
62  'FILTER_SANITIZE_NUMBER_FLOAT' => '',
63  'FILTER_SANITIZE_NUMBER_FLOAT_ALLOW_FRACTION' => '',
64  'FILTER_SANITIZE_NUMBER_INT' => '',
65  'FILTER_SANITIZE_FULL_SPECIAL_CHARS' => 'Billy&#039;s Account',
66  'FILTER_SANITIZE_FULL_SPECIAL_CHARS_NO_ENCODE' => 'Billy\'s Account',
67  'FILTER_VALIDATE_EMAIL' => '',
68  'FILTER_VALIDATE_INT' => '',
69  'FILTER_VALIDATE_FLOAT' => '',
70  'FILTER_VALIDATE_FLOAT_ALLOW_1000' => '',
71  'FILTER_VALIDATE_REGEXP' => ''
72  )
73  ),
74  'field3' => array(
75  "value" => "1,234.33",
76  "results" => array(
77  'FILTER_SANITIZE_STRING' => '1,234.33',
78  'FILTER_SANITIZE_STRING_NO_ENCODE' => '1,234.33',
79  'FILTER_SANITIZE_NUMBER_FLOAT' => '123433',
80  'FILTER_SANITIZE_NUMBER_FLOAT_ALLOW_FRACTION' => '1234.33',
81  'FILTER_SANITIZE_NUMBER_INT' => '123433',
82  'FILTER_SANITIZE_FULL_SPECIAL_CHARS' => '1,234.33',
83  'FILTER_SANITIZE_FULL_SPECIAL_CHARS_NO_ENCODE' => '1,234.33',
84  'FILTER_VALIDATE_EMAIL' => '',
85  'FILTER_VALIDATE_INT' => '',
86  'FILTER_VALIDATE_FLOAT' => '',
87  'FILTER_VALIDATE_FLOAT_ALLOW_1000' => '1234.33',
88  'FILTER_VALIDATE_REGEXP' => ''
89  )
90  ),
91  'field4' => array(
92  "value" => "mail@homecu.net",
93  "results" => array(
94  'FILTER_SANITIZE_STRING' => 'mail@homecu.net',
95  'FILTER_SANITIZE_STRING_NO_ENCODE' => 'mail@homecu.net',
96  'FILTER_SANITIZE_NUMBER_FLOAT' => '',
97  'FILTER_SANITIZE_NUMBER_FLOAT_ALLOW_FRACTION' => '.',
98  'FILTER_SANITIZE_NUMBER_INT' => '',
99  'FILTER_SANITIZE_FULL_SPECIAL_CHARS' => 'mail@homecu.net',
100  'FILTER_SANITIZE_FULL_SPECIAL_CHARS_NO_ENCODE' => 'mail@homecu.net',
101  'FILTER_VALIDATE_EMAIL' => 'mail@homecu.net',
102  'FILTER_VALIDATE_INT' => '',
103  'FILTER_VALIDATE_FLOAT' => '',
104  'FILTER_VALIDATE_FLOAT_ALLOW_1000' => '',
105  'FILTER_VALIDATE_REGEXP' => 'mail@homecu.net'
106  )
107  ),
108  'field5' => array(
109  "value" => 3299,
110  "results" => array(
111  'FILTER_SANITIZE_STRING' => '3299',
112  'FILTER_SANITIZE_STRING_NO_ENCODE' => '3299',
113  'FILTER_SANITIZE_NUMBER_FLOAT' => '3299',
114  'FILTER_SANITIZE_NUMBER_FLOAT_ALLOW_FRACTION' => '3299',
115  'FILTER_SANITIZE_NUMBER_INT' => '3299',
116  'FILTER_SANITIZE_FULL_SPECIAL_CHARS' => '3299',
117  'FILTER_SANITIZE_FULL_SPECIAL_CHARS_NO_ENCODE' => '3299',
118  'FILTER_VALIDATE_EMAIL' => '',
119  'FILTER_VALIDATE_INT' => '3299',
120  'FILTER_VALIDATE_FLOAT' => '3299',
121  'FILTER_VALIDATE_FLOAT_ALLOW_1000' => '3299',
122  'FILTER_VALIDATE_REGEXP' => ''
123  )
124  )
125  );
126 
127  self::$testOptions = Array(
128  'FILTER_SANITIZE_STRING' => array('filter' => FILTER_SANITIZE_STRING),
129  'FILTER_SANITIZE_STRING_NO_ENCODE' => array('filter' => FILTER_SANITIZE_STRING, 'options' => array('flags' => FILTER_FLAG_NO_ENCODE_QUOTES)),
130  'FILTER_SANITIZE_NUMBER_FLOAT' => array('filter' => FILTER_SANITIZE_NUMBER_FLOAT),
131  'FILTER_SANITIZE_NUMBER_FLOAT_ALLOW_FRACTION' => array('filter' => FILTER_SANITIZE_NUMBER_FLOAT, 'options' => array('flags' => FILTER_FLAG_ALLOW_FRACTION)),
132  'FILTER_SANITIZE_NUMBER_INT' => array('filter' => FILTER_SANITIZE_NUMBER_INT),
133  'FILTER_SANITIZE_FULL_SPECIAL_CHARS' => array('filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS),
134  'FILTER_SANITIZE_FULL_SPECIAL_CHARS_NO_ENCODE' => array('filter' => FILTER_SANITIZE_FULL_SPECIAL_CHARS, 'options' => array('flags' => FILTER_FLAG_NO_ENCODE_QUOTES)),
135  'FILTER_VALIDATE_EMAIL' => array('filter' => FILTER_VALIDATE_EMAIL),
136  'FILTER_VALIDATE_INT' => array('filter' => FILTER_VALIDATE_INT),
137  'FILTER_VALIDATE_FLOAT' => array('filter' => FILTER_VALIDATE_FLOAT),
138  'FILTER_VALIDATE_FLOAT_ALLOW_1000' => array('filter' => FILTER_VALIDATE_FLOAT, 'options' => array('flags' => FILTER_FLAG_ALLOW_THOUSAND)),
139  'FILTER_VALIDATE_REGEXP' => array('filter' => FILTER_VALIDATE_REGEXP, 'options' => array('options' => array('regexp'=>'/^m(.*)/')))
140  );
141 
142  }
143 
144  /**
145  * Test Values
146  */
147  public function test_post_filter() {
148 
149 
150 
151  $myTestValues = self::$testValues;
152  $myTestOptions = self::$testOptions;
153 
154  if (count($myTestValues) > 0) {
155  foreach ($myTestValues as $valKey => $valSetup) {
156 
157  $testInputValue = $valSetup['value'];
158 
159  // ** Loop through each of the results for validating the response
160  foreach ($valSetup['results'] as $resultFilter => $resultVal) {
161 
162  if (array_key_exists($resultFilter, $myTestOptions)) {
163 
164  // ** Call the function to start the process of validating the filter value
165  $filterResult = $this->myTestHCU_ImportVars($testInputValue, $myTestOptions[$resultFilter]);
166 
167  $this->assertEquals($resultVal, $filterResult);
168 
169  } else {
170  // ** Could not find test filter -- that's a fail!!
171  $this->assertFalse(true, "$resultFilter Not Defined as Valid Test Option");
172  }
173 
174  }
175 
176 
177  }
178  }
179  }
180 
181 
182  /**
183  *
184  * return the results of the test using the parameters passed in
185  *
186  */
187  public function myTestHCU_ImportVars ($pFieldVal, $pFilter) {
188  $fieldFilter = 0;
189  $fieldFlags = false;
190  $fieldOptions = 0;
191 
192  // ** Determine FILTER TYPE
193  if (array_key_exists('filter', $pFilter)) {
194  $fieldFilter = $pFilter['filter'];
195  }
196  // ** set to FILTER_DEFAULT IF NOT SET
197  $fieldFilter = ($fieldFilter == 0 ? FILTER_DEFAULT : $fieldFilter);
198 
199  // ** DETERMINE IF SET FLAG FOR REQUIRE ARRAY
200  if (array_key_exists('flags', $pFilter)) {
201  $fieldFlags = $pFilter['flags'];
202  }
203  $fieldIsArray = ($fieldFlags == FILTER_REQUIRE_ARRAY ? true : false);
204 
205 
206  // ** set the filter options
207  if (array_key_exists('options', $pFilter)) {
208  $fieldOptions = $pFilter['options'];
209  }
210 
211 
212  $fieldValue = HCU_FilterInput (HCUFILTER_VAR, $pFieldVal, $fieldFilter, $fieldIsArray, $fieldOptions);
213 
214  return $fieldValue;
215 
216  } // * myHcu_ImportVars
217 
218 }
219 
220 
myTestHCU_ImportVars($pFieldVal, $pFilter)