Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Database / InsertDefaultsTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\Database;
4
5 use Drupal\Core\Database\Query\NoFieldsException;
6
7 /**
8  * Tests the Insert query builder with default values.
9  *
10  * @group Database
11  */
12 class InsertDefaultsTest extends DatabaseTestBase {
13
14   /**
15    * Tests that we can run a query that uses default values for everything.
16    */
17   public function testDefaultInsert() {
18     $query = db_insert('test')->useDefaults(['job']);
19     $id = $query->execute();
20
21     $schema = drupal_get_module_schema('database_test', 'test');
22
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.');
25   }
26
27   /**
28    * Tests that no action will be preformed if no fields are specified.
29    */
30   public function testDefaultEmptyInsert() {
31     $num_records_before = (int) db_query('SELECT COUNT(*) FROM {test}')->fetchField();
32
33     try {
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.');
37     }
38     catch (NoFieldsException $e) {
39       $this->pass('Expected exception NoFieldsException has been thrown.');
40     }
41
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.');
44   }
45
46   /**
47    * Tests that we can insert fields with values and defaults in the same query.
48    */
49   public function testDefaultInsertWithFields() {
50     $query = db_insert('test')
51       ->fields(['name' => 'Bob'])
52       ->useDefaults(['job']);
53     $id = $query->execute();
54
55     $schema = drupal_get_module_schema('database_test', 'test');
56
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.');
59   }
60
61 }