Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
/**
* @file
* Contains \Drupal\config\Tests\ConfigDiffTest.
*/
namespace Drupal\config\Tests;
use Drupal\simpletest\DrupalUnitTestBase;
/**
* Tests config snapshot creation and updating.
*/
class ConfigDiffTest extends DrupalUnitTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('config_test', 'system');
public static function getInfo() {
return array(
'name' => 'Diff functionality',
'description' => 'Calculating the difference between two sets of configuration.',
'group' => 'Configuration',
);
}
/**
* Tests calculating the difference between two sets of configuration.
*/
function testDiff() {
$active = $this->container->get('config.storage');
$staging = $this->container->get('config.storage.staging');
$config_name = 'config_test.system';
$change_key = 'foo';
$remove_key = '404';
$add_key = 'biff';
$add_data = 'bangpow';
$change_data = 'foobar';
$original_data = array(
'foo' => 'bar',
'404' => 'herp',
);
// Install the default config.
config_install_default_config('module', 'config_test');
// Change a configuration value in staging.
$staging_data = $original_data;
$staging_data[$change_key] = $change_data;
$staging_data[$add_key] = $add_data;
$staging->write($config_name, $staging_data);
// Verify that the diff reflects a change.
$diff = config_diff($active, $staging, $config_name);
$this->assertEqual($diff->edits[0]->type, 'change', 'The first item in the diff is a change.');
$this->assertEqual($diff->edits[0]->orig[0], $change_key . ': ' . $original_data[$change_key], format_string("The active value for key '%change_key' is '%original_data'.", array('%change_key' => $change_key, '%original_data' => $original_data[$change_key])));
$this->assertEqual($diff->edits[0]->closing[0], $change_key . ': ' . $change_data, format_string("The staging value for key '%change_key' is '%change_data'.", array('%change_key' => $change_key, '%change_data' => $change_data)));
// Reset data back to original, and remove a key
$staging_data = $original_data;
unset($staging_data[$remove_key]);
$staging->write($config_name, $staging_data);
// Verify that the diff reflects a removed key.
$diff = config_diff($active, $staging, $config_name);
$this->assertEqual($diff->edits[0]->type, 'copy', 'The first item in the diff is a copy.');
$this->assertEqual($diff->edits[1]->type, 'delete', 'The second item in the diff is a delete.');
$this->assertEqual($diff->edits[1]->orig[0], $remove_key . ': ' . $original_data[$remove_key], format_string("The active value for key '%remove_key' is '%original_data'.", array('%remove_key' => $remove_key, '%original_data' => $original_data[$remove_key])));
$this->assertFalse($diff->edits[1]->closing, format_string("The key '%remove_key' does not exist in staging.", array('%remove_key' => $remove_key)));
// Reset data back to original and add a key
$staging_data = $original_data;
$staging_data[$add_key] = $add_data;
$staging->write($config_name, $staging_data);
// Verify that the diff reflects an added key.
$diff = config_diff($active, $staging, $config_name);
$this->assertEqual($diff->edits[0]->type, 'copy', 'The first item in the diff is a copy.');
$this->assertEqual($diff->edits[1]->type, 'add', 'The second item in the diff is an add.');
$this->assertFalse($diff->edits[1]->orig, format_string("The key '%add_key' does not exist in active.", array('%add_key' => $add_key)));
$this->assertEqual($diff->edits[1]->closing[0], $add_key . ': ' . $add_data, format_string("The staging value for key '%add_key' is '%add_data'.", array('%add_key' => $add_key, '%add_data' => $add_data)));
}
}