danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2 /**
|
danielebarchiesi@4
|
3 * @file
|
danielebarchiesi@4
|
4 * Tests for bundle_inherit module.
|
danielebarchiesi@4
|
5 */
|
danielebarchiesi@4
|
6
|
danielebarchiesi@4
|
7 class BundleInherit extends DrupalWebTestCase {
|
danielebarchiesi@4
|
8 protected $parentType, $childType, $customFields, $extraField;
|
danielebarchiesi@4
|
9
|
danielebarchiesi@4
|
10 public static function getInfo() {
|
danielebarchiesi@4
|
11 return array(
|
danielebarchiesi@4
|
12 'name' => 'Bundle Inherit',
|
danielebarchiesi@4
|
13 'description' => 'Ensure that the Bundle Inherit module works properly',
|
danielebarchiesi@4
|
14 'group' => 'Bundle Inherit'
|
danielebarchiesi@4
|
15 );
|
danielebarchiesi@4
|
16 }
|
danielebarchiesi@4
|
17
|
danielebarchiesi@4
|
18 public function setUp($modules = array()) {
|
danielebarchiesi@4
|
19 $modules += array('bundle_inherit', 'node');
|
danielebarchiesi@4
|
20 parent::setUp($modules);
|
danielebarchiesi@4
|
21
|
danielebarchiesi@4
|
22 // Add new content type (for example we'll create node type, but generaly,
|
danielebarchiesi@4
|
23 // kind of the entity type does not matter here)
|
danielebarchiesi@4
|
24 $this->parentType = $this->drupalCreateContentType();
|
danielebarchiesi@4
|
25 $this->childType = $this->drupalCreateContentType();
|
danielebarchiesi@4
|
26 // Create custom field
|
danielebarchiesi@4
|
27 do {
|
danielebarchiesi@4
|
28 $field_name = drupal_strtolower($this->randomName());
|
danielebarchiesi@4
|
29 } while (field_info_field($field_name));
|
danielebarchiesi@4
|
30 // Add 5 custom fields
|
danielebarchiesi@4
|
31 for ($i = 0; $i < 5; $i++) {
|
danielebarchiesi@4
|
32 do {
|
danielebarchiesi@4
|
33 $field_name = drupal_strtolower($this->randomName());
|
danielebarchiesi@4
|
34 } while (field_info_field($field_name));
|
danielebarchiesi@4
|
35 $this->customFields[$field_name]['field'] = field_create_field(array(
|
danielebarchiesi@4
|
36 'field_name' => $field_name,
|
danielebarchiesi@4
|
37 'type' => 'text'
|
danielebarchiesi@4
|
38 ));
|
danielebarchiesi@4
|
39 field_create_instance(array(
|
danielebarchiesi@4
|
40 'field_name' => $field_name,
|
danielebarchiesi@4
|
41 'entity_type' => 'node',
|
danielebarchiesi@4
|
42 'bundle' => $this->parentType->type
|
danielebarchiesi@4
|
43 ));
|
danielebarchiesi@4
|
44 $this->customFields[$field_name]['instance'] = field_info_instance('node', $field_name, $this->parentType->type);
|
danielebarchiesi@4
|
45 }
|
danielebarchiesi@4
|
46 do {
|
danielebarchiesi@4
|
47 $field_name = drupal_strtolower($this->randomName());
|
danielebarchiesi@4
|
48 } while (field_info_field($field_name));
|
danielebarchiesi@4
|
49 $this->extraField['field'] = field_create_field(array(
|
danielebarchiesi@4
|
50 'field_name' => $field_name,
|
danielebarchiesi@4
|
51 'type' => 'text'
|
danielebarchiesi@4
|
52 ));
|
danielebarchiesi@4
|
53 }
|
danielebarchiesi@4
|
54
|
danielebarchiesi@4
|
55 public function inheritPerform() {
|
danielebarchiesi@4
|
56 // When implementing inheritance on node entity type we should delete body
|
danielebarchiesi@4
|
57 // field first.
|
danielebarchiesi@4
|
58 if ($body_field_instance = field_info_instance('node', 'body', $this->childType->type)) {
|
danielebarchiesi@4
|
59 field_delete_instance($body_field_instance);
|
danielebarchiesi@4
|
60 }
|
danielebarchiesi@4
|
61
|
danielebarchiesi@4
|
62 // Perform inherit operations
|
danielebarchiesi@4
|
63 bundle_inherit_perform('node', $this->childType->type, $this->parentType->type, TRUE);
|
danielebarchiesi@4
|
64
|
danielebarchiesi@4
|
65 $type_inherited = db_query('SELECT 1 FROM {bundle_hierarchy} WHERE entity_type = :entity_type AND bundle = :bundle AND bundle_parent = :bundle_parent', array(':entity_type' => 'node', ':bundle' => $this->childType->type, ':bundle_parent' => $this->parentType->type))->fetchField();
|
danielebarchiesi@4
|
66 $this->assertTrue($type_inherited, t('Type was inherited.'));
|
danielebarchiesi@4
|
67
|
danielebarchiesi@4
|
68 // Check if fields instances was succesfuly inherited
|
danielebarchiesi@4
|
69 $n = 1;
|
danielebarchiesi@4
|
70 foreach ($this->customFields as $field_name => $field) {
|
danielebarchiesi@4
|
71 $parent_type_field_instance = $this->customFields[$field_name]['instance'];
|
danielebarchiesi@4
|
72 $child_type_field_instance = field_info_instance('node', $field_name, $this->childType->type);
|
danielebarchiesi@4
|
73 $this->assertTrue($this->compareInstances($parent_type_field_instance, $child_type_field_instance), t('Child field instance %n is equal to the parent one', array('%n' => $n++)));
|
danielebarchiesi@4
|
74 }
|
danielebarchiesi@4
|
75 }
|
danielebarchiesi@4
|
76
|
danielebarchiesi@4
|
77 public function fieldInstanceCreate() {
|
danielebarchiesi@4
|
78 field_create_instance(array(
|
danielebarchiesi@4
|
79 'field_name' => $this->extraField['field']['field_name'],
|
danielebarchiesi@4
|
80 'entity_type' => 'node',
|
danielebarchiesi@4
|
81 'bundle' => $this->parentType->type
|
danielebarchiesi@4
|
82 ));
|
danielebarchiesi@4
|
83 $this->extraField['instance'] = field_info_instance('node', $this->extraField['field']['field_name'], $this->parentType->type);
|
danielebarchiesi@4
|
84 $parent_type_field_instance = $this->extraField['instance']; $child_type_field_instance = field_info_instance('node', $this->extraField['field']['field_name'], $this->childType->type);
|
danielebarchiesi@4
|
85 $this->assertTrue($this->compareInstances($parent_type_field_instance, $child_type_field_instance), t('The field instance attached to the parent type was succesfuly attached to the child type and equal to the parent one.'));
|
danielebarchiesi@4
|
86 }
|
danielebarchiesi@4
|
87
|
danielebarchiesi@4
|
88 public function fieldInstanceUpdate() {
|
danielebarchiesi@4
|
89 $this->extraField['instance']['label'] = $this->randomString();
|
danielebarchiesi@4
|
90 $this->extraField['instance']['required'] = TRUE;
|
danielebarchiesi@4
|
91 field_update_instance($this->extraField['instance']);
|
danielebarchiesi@4
|
92 $child_type_field_instance = field_info_instance('node', $this->extraField['field']['field_name'], $this->childType->type);
|
danielebarchiesi@4
|
93 $this->assertTrue($this->compareInstances($this->extraField['instance'], $child_type_field_instance), t('Child type field instance is equal to the parent one after updating.'));
|
danielebarchiesi@4
|
94 }
|
danielebarchiesi@4
|
95
|
danielebarchiesi@4
|
96 public function fieldInstanceDelete() {
|
danielebarchiesi@4
|
97 field_delete_instance($this->extraField['instance']);
|
danielebarchiesi@4
|
98 $child_type_field_instance = field_info_instance('node', $this->extraField['field']['field_name'], $this->childType->type);
|
danielebarchiesi@4
|
99 $this->assertTrue($child_type_field_instance['locked'] == FALSE, t('Child type field instance was succesfuly deleted when the parent type one was deleted.'));
|
danielebarchiesi@4
|
100 }
|
danielebarchiesi@4
|
101
|
danielebarchiesi@4
|
102 /**
|
danielebarchiesi@4
|
103 * Run complex CRUD test based on node entity type.
|
danielebarchiesi@4
|
104 */
|
danielebarchiesi@4
|
105 public function testCRUD() {
|
danielebarchiesi@4
|
106 $this->inheritPerform();
|
danielebarchiesi@4
|
107 $this->fieldInstanceCreate();
|
danielebarchiesi@4
|
108 $this->fieldInstanceUpdate();
|
danielebarchiesi@4
|
109 $this->fieldInstanceDelete();
|
danielebarchiesi@4
|
110 }
|
danielebarchiesi@4
|
111
|
danielebarchiesi@4
|
112 /**
|
danielebarchiesi@4
|
113 * Helper function to compare two instances indeferent of their 'id',
|
danielebarchiesi@4
|
114 * 'bundle'and 'locked' fields.
|
danielebarchiesi@4
|
115 * @param $a
|
danielebarchiesi@4
|
116 * First instance.
|
danielebarchiesi@4
|
117 * @param $b
|
danielebarchiesi@4
|
118 * Second instance.
|
danielebarchiesi@4
|
119 * @return
|
danielebarchiesi@4
|
120 * TRUE if $a and $b are equal.
|
danielebarchiesi@4
|
121 */
|
danielebarchiesi@4
|
122 private function compareInstances($a, $b) {
|
danielebarchiesi@4
|
123 unset($a['id'], $a['bundle'], $a['locked']);
|
danielebarchiesi@4
|
124 unset($b['id'], $b['bundle'], $b['locked']);
|
danielebarchiesi@4
|
125 return $a == $b;
|
danielebarchiesi@4
|
126 }
|
danielebarchiesi@4
|
127 }
|