public function DataTestCaseAPI::testAPIFunctions in Data 8
Same name and namespace in other branches
- 6 tests/data.test \DataTestCaseAPI::testAPIFunctions()
- 7 tests/data.test \DataTestCaseAPI::testAPIFunctions()
Test API functions of DataTable and TableFactory.
File
- tests/
data.test, line 99
Class
- DataTestCaseAPI
- Test basic Data API functionality.
Code
public function testAPIFunctions() {
// Test data_create_table() API function.
$tablename = data_name($this
->randomName(5, 'apifunc'));
$table = data_create_table($tablename, $this
->testSchema());
$num_of_tables = db_result(db_query("SELECT COUNT(*) FROM {data_tables}"));
$this
->assertTrue($num_of_tables == 1, "{data_create_table}: Exactly one table is created");
$db_tablename = db_result(db_query("SELECT name FROM {data_tables}"));
$result = db_query("SELECT * FROM {%s}", $db_tablename);
$this
->assertTrue($result != FALSE, "{data_create_table}: The table exists in the database");
// Test data_get_table() API function.
$this
->assertFalse(data_get_table(''), "{data_get_table}: Empty named table does not exist");
$this
->assertFalse(data_get_table($tablename . $this
->randomName(5, 'apifunc')), "{data_get_table}: Non-existing named table does not exist");
$table = data_get_table($tablename);
$this
->assertTrue($table instanceof DataTable, "{data_get_table}: A DataTable object is returned by getting an existing table.");
/* Test data_drop_table() API function
data_drop_table('');
data_drop_table('%');
data_drop_table('.');
data_drop_table('\%');*/
$num_of_tables = db_result(db_query("SELECT COUNT(*) FROM {data_tables}"));
$this
->assertTrue($num_of_tables == 1, "{data_drop_table}: It's not possible to delete tables with special (non-existing) table names.");
data_drop_table($tablename);
$num_of_tables = db_result(db_query("SELECT COUNT(*) FROM {data_tables}"));
$this
->assertTrue($num_of_tables == 0, "{data_drop_table}: The table is destroyed.");
$this
->assertFalse(db_table_exists($db_tablename), "{data_drop_table}: The table does not exist in the database");
// Test data_get_all_tables() API function.
$start = count(data_get_all_tables(TRUE));
for ($i = 0; $i < 5; $i++) {
$name = data_name($this
->randomName(20, 'apifunc'));
if (!data_create_table($name, $this
->testSchema())) {
$this
->fail('Could not create table.');
}
}
$tables = data_get_all_tables(TRUE);
$this
->assertTrue(count($tables) == $start + $i, "{data_get_all_tables}: Proper number of table entries are returned.");
// Test data_export() API function.
if (module_exists('ctools')) {
$table = array_pop(data_get_all_tables());
$exported = data_export($table
->get('name'));
$this
->assertTrue(strstr($exported, 'array'), "{data_export}: The schema has been exported");
}
else {
$msg = data_export('foo');
$this
->assertEqual($msg, 'Export requires CTools http://drupal.org/project/ctools', 'Notification message is appeared');
}
// Test DataTable::get().
$table = array_pop(data_get_all_tables());
$result = $table
->get('nonexistingproperty');
$this
->assertTrue(empty($result), "DataTable::get(): Non-existing property does not return anything.");
$result = $table
->get('name');
$this
->assertTrue(!empty($result), "DataTable::get(): Existing property returns non-empty value.");
// Test DataTable::addField().
// Note: this test causes a notice if views is enabled on the system that
// runs the test.
$name = 'newfield';
// See data.test.inc and the testSchema(). It's safe to use hard-coded field name.
$spec = array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
);
$return = $table
->addField($name, $spec);
$this
->assertEqual($name, $return, "DataTable::addField(): Returned correct field name.");
$result = db_query("SELECT %s FROM {%s}", $name, $table
->get('name'));
$this
->assertTrue($result != FALSE, "DataTable::addField(): The new column exists in the database");
$table
->dropField($name);
// This query will cause an error, suppress it.
@($result = db_query("SELECT %s FROM {%s}", $name, $table
->get('name')));
$this
->assertFalse($result, "DataTable::dropField(): The column is dropped");
// Test TableFactory::save(), TableFactory::truncate() and TableFactory::delete().
$test_data = $this
->testData();
$table
->handler()
->save($test_data[0], array(
'id',
));
$num_of_rows_before = db_result(db_query("SELECT COUNT(*) FROM {%s}", $table
->get('name')));
$table
->handler()
->truncate();
$num_of_rows_after = db_result(db_query("SELECT COUNT(*) FROM {%s}", $table
->get('name')));
$this
->assertEqual($num_of_rows_before, 1, "DataTable::truncate(): One row is in the table before executing it");
$this
->assertEqual($num_of_rows_after, 0, "DataTable::truncate(): The table is empty after executing it.");
$test_data = $this
->testData();
$table
->handler()
->save($test_data[0], array(
'id',
));
$table
->handler()
->save($test_data[1], array(
'id',
));
$table
->handler()
->delete(array(
'id' => $test_data[0]['id'],
));
$count = db_result(db_query("SELECT COUNT(*) FROM {%s} WHERE id = '%d'", $table
->get('name'), $test_data[0]['id']));
$this
->assertEqual($count, 0, 'The given entry is deleted');
$count = db_result(db_query("SELECT COUNT(*) FROM {%s} WHERE id = '%d'", $table
->get('name'), $test_data[1]['id']));
$this
->assertEqual($count, 1, 'The other entry is still there.');
// Test DataTable::link().
// @todo: test removing/adding a link.
$meta_before = $table
->get('meta');
$table
->link('node', 'nid');
$meta_after = $table
->get('meta');
$this
->assertTrue(empty($meta_before), "DataTable::link(): The meta is empty before executing it");
$this
->assertTrue(!empty($meta_after), "DataTable::link(): The meta is not empty after executing it");
}