3 namespace Drupal\KernelTests\Core\Database;
5 use Drupal\Core\Database\Query\NoFieldsException;
8 * Tests the Insert query builder with default values.
12 class InsertDefaultsTest extends DatabaseTestBase {
15 * Tests that we can run a query that uses default values for everything.
17 public function testDefaultInsert() {
18 $query = db_insert('test')->useDefaults(['job']);
19 $id = $query->execute();
21 $schema = drupal_get_module_schema('database_test', 'test');
23 $job = db_query('SELECT job FROM {test} WHERE id = :id', [':id' => $id])->fetchField();
24 $this->assertEqual($job, $schema['fields']['job']['default'], 'Default field value is set.');
28 * Tests that no action will be preformed if no fields are specified.
30 public function testDefaultEmptyInsert() {
31 $num_records_before = (int) db_query('SELECT COUNT(*) FROM {test}')->fetchField();
34 db_insert('test')->execute();
35 // This is only executed if no exception has been thrown.
36 $this->fail('Expected exception NoFieldsException has not been thrown.');
38 catch (NoFieldsException $e) {
39 $this->pass('Expected exception NoFieldsException has been thrown.');
42 $num_records_after = (int) db_query('SELECT COUNT(*) FROM {test}')->fetchField();
43 $this->assertIdentical($num_records_before, $num_records_after, 'Do nothing as no fields are specified.');
47 * Tests that we can insert fields with values and defaults in the same query.
49 public function testDefaultInsertWithFields() {
50 $query = db_insert('test')
51 ->fields(['name' => 'Bob'])
52 ->useDefaults(['job']);
53 $id = $query->execute();
55 $schema = drupal_get_module_schema('database_test', 'test');
57 $job = db_query('SELECT job FROM {test} WHERE id = :id', [':id' => $id])->fetchField();
58 $this->assertEqual($job, $schema['fields']['job']['default'], 'Default field value is set.');