app_container = $server->getAppContainer('passman'); $this->db = $this->app_container->getServer()->getDatabaseConnection(); $this->datasets = []; $tables = $this->getTablesNames(); foreach ($tables as $table){ $this->datasets[$table] = $this->createMySQLXMLDataSet(self::DUMPS_DIR . $table . '.xml'); $this->setUpTable($table); } } /** * Truncates a table, platform aware * @param $table_name */ public function truncateTable($table_name) { $this->db->executeQuery($this->db->getDatabasePlatform()->getTruncateTableSQL($table_name)); } /** * Initializes the table with the corresponding dataset on the dumps dir * * @param $table_name */ public function setUpTable($table_name){ $table = $this->getTableDataset($table_name); $table_no_prefix = substr($table_name, 3); // Cleanup any data currently inside the table $this->truncateTable($table_name); // Fill the table with the data dumps for ($i = 0; $i < $table->getRowCount(); $i++) { $row = $table->getRow($i); $qb = $this->db->getQueryBuilder(); $qb->insert($table_no_prefix); foreach ($row as $key => $value){ if (is_null($value)) { $value = 'NULL'; } else if (!is_numeric($value)) { $value = "'{$value}'"; } $qb->setValue($key, $value); } $qb->execute(); $this->db->lastInsertId(); } } /** * The database dumps must be generated with this command: * mysqldump --xml -t -u db_username -p database table > table_name.xml * @param $table_name * @return PHPUnit_Extensions_Database_DataSet_ITable */ public function getTableDataset($table_name) { return $this->datasets[$table_name]->getTable($table_name); } /** * Finds a subset of rows from the dataset which field name matches * the specified value * @param $table_name The name of the table to search into * @param $field_name The field name * @param $value_match The value to match data against * @return array An array of rows */ public function findInDataset($table_name, $field_name, $value_match) { $table = $this->getTableDataset($table_name); $rows = $table->getRowCount(); $result = []; for ($i = 0; $i < $rows; $i++) { $row = $table->getRow($i); if ($row[$field_name] == $value_match){ $result[] = $row; } } return $result; } /** * Filters the given array * @param $dataset The data to filter * @param $field_name The array key to match against * @param $value_match The value to compare to */ public function filterDataset($dataset, $field_name, $value_match) { $ret = []; foreach ($dataset as $value){ if ($value[$field_name] == $value_match){ $ret[] = $value; } } return $ret; } /** * @coversNothing */ public function testTablesSetup() { $tables = $this->getTablesNames(); foreach ($tables as $table) { $table = substr($table, 3); $this->assertTrue($this->db->tableExists($table)); } } /** * DO NOT USE * * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection */ protected function getConnection() { return $this->getMockForAbstractClass(PHPUnit_Extensions_Database_DB_IDatabaseConnection::class); } /** * DO NOT USE * * @return PHPUnit_Extensions_Database_DataSet_IDataSet */ protected function getDataSet() { foreach ($this->datasets as $value) return $value; } }