clearMock(); $wpdb = null; try { ob_flush(); ob_end_clean(); } catch (Exception $e) { } parent::tearDown(); } public function setUp() { parent::setup(); date_default_timezone_set('America/New_York'); $str = file_get_contents('TransformEntryFunctionTest.json'); $data = json_decode($str, true); $mock = new MockQueryResultIterator($data); CFDBQueryResultIteratorFactory::getInstance()->setQueryResultsIteratorMock($mock); global $wpdb; $wpdb = new WPDB_Mock; $fields = array(); foreach (array_keys($data[0]) as $key) { $fields[] = (object)array('field_name' => $key); } $wpdb->getResultReturnVal = $fields; } public function testAddNewFieldInTransformEntry() { $options = array(); $options['trans'] = 'sumToNewField'; $exp = new ExportToJson(); ob_start(); $exp->export('form', $options); $text = ob_get_contents(); $stuff = json_decode($text); $idx = 0; $this->assertTrue(is_array($stuff)); $this->assertEquals('1', $stuff[$idx]->a); $this->assertEquals('2', $stuff[$idx]->b); $this->assertEquals('3', $stuff[$idx]->c); ++$idx; $this->assertEquals('20', $stuff[$idx]->a); $this->assertEquals('30', $stuff[$idx]->b); $this->assertEquals('50', $stuff[$idx]->c); } public function testAddNewFieldRemoveOldInTransformEntry() { $options = array(); $options['trans'] = 'sumToNewFieldRemoveB'; $exp = new ExportToJson(); ob_start(); $exp->export('form', $options); $text = ob_get_contents(); $stuff = json_decode($text); $idx = 0; $this->assertTrue(is_array($stuff)); $this->assertEquals('1', $stuff[$idx]->a); $this->assertFalse(isset($stuff[0]->b)); $this->assertEquals('3', $stuff[$idx]->c); ++$idx; $this->assertEquals('20', $stuff[$idx]->a); $this->assertFalse(isset($stuff[0]->b)); $this->assertEquals('50', $stuff[$idx]->c); } public function testAddAllNewsFieldInTransformEntry() { $options = array(); $options['trans'] = 'allNewFields'; $exp = new ExportToJson(); ob_start(); $exp->export('form', $options); $text = ob_get_contents(); $stuff = json_decode($text); $this->assertTrue(is_array($stuff)); $this->assertEquals('100', $stuff[0]->c); $this->assertEquals('200', $stuff[0]->d); $this->assertFalse(isset($stuff[0]->a)); $this->assertFalse(isset($stuff[0]->b)); } public function testSometimesAddNewFieldInTransformEntry() { $options = array(); $options['trans'] = 'sometimesNewFields'; $exp = new ExportToJson(); ob_start(); $exp->export('form', $options); $text = ob_get_contents(); $stuff = json_decode($text); $idx = 0; $this->assertTrue(is_array($stuff)); $this->assertEquals('1', $stuff[$idx]->a); $this->assertEquals('2', $stuff[$idx]->b); $this->assertEquals('3', $stuff[$idx]->c); ++$idx; $this->assertEquals('20', $stuff[$idx]->a); $this->assertEquals('30', $stuff[$idx]->b); $this->assertEquals('', $stuff[$idx]->c); } public function testSometimesAddNewFieldInTransformEntry2() { $options = array(); $options['trans'] = 'sometimesNewFields2'; $exp = new ExportToJson(); ob_start(); $exp->export('form', $options); $text = ob_get_contents(); $stuff = json_decode($text); $idx = 0; $this->assertTrue(is_array($stuff)); $this->assertEquals('1', $stuff[$idx]->a); $this->assertEquals('2', $stuff[$idx]->b); // todo: should be first following line, not second //$this->assertEquals('', $stuff[$idx]->c); $this->assertFalse(isset($stuff[$idx]->c)); ++$idx; $this->assertEquals('20', $stuff[$idx]->a); $this->assertEquals('30', $stuff[$idx]->b); // todo: should be first following line, not second // $this->assertEquals('50', $stuff[$idx]->c); $this->assertFalse(isset($stuff[$idx]->c)); } } function sumToNewField(&$entry) { $entry['c'] = $entry['a'] + $entry['b']; } function sumToNewFieldRemoveB(&$entry) { $entry['c'] = $entry['a'] + $entry['b']; unset($entry['b']); } function allNewFields(&$entry) { return array('c' => '100', 'd' => '200'); } function sometimesNewFields(&$entry) { if ($entry['a'] == '1') { $entry['c'] = $entry['a'] + $entry['b']; } } function sometimesNewFields2(&$entry) { if ($entry['a'] == '20') { $entry['c'] = $entry['a'] + $entry['b']; } }