Mercurial > hg > isophonics-drupal-site
comparison core/tests/Drupal/FunctionalTests/Installer/InstallerExistingConfigTestBase.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\FunctionalTests\Installer; | |
4 | |
5 use Drupal\Component\Serialization\Yaml; | |
6 use Drupal\Core\Archiver\ArchiveTar; | |
7 use Drupal\Core\Installer\Form\SelectProfileForm; | |
8 | |
9 /** | |
10 * Provides a base class for testing installing from existing configuration. | |
11 */ | |
12 abstract class InstallerExistingConfigTestBase extends InstallerTestBase { | |
13 | |
14 /** | |
15 * This is set by the profile in the core.extension extracted. | |
16 */ | |
17 protected $profile = NULL; | |
18 | |
19 /** | |
20 * @todo | |
21 */ | |
22 protected $existingSyncDirectory = FALSE; | |
23 | |
24 /** | |
25 * {@inheritdoc} | |
26 */ | |
27 protected function prepareEnvironment() { | |
28 parent::prepareEnvironment(); | |
29 $archiver = new ArchiveTar($this->getConfigTarball(), 'gz'); | |
30 | |
31 if ($this->profile === NULL) { | |
32 $core_extension = Yaml::decode($archiver->extractInString('core.extension.yml')); | |
33 $this->profile = $core_extension['profile']; | |
34 } | |
35 | |
36 // Create a profile for testing. | |
37 $info = [ | |
38 'type' => 'profile', | |
39 'core' => \Drupal::CORE_COMPATIBILITY, | |
40 'name' => 'Configuration installation test profile (' . $this->profile . ')', | |
41 ]; | |
42 | |
43 // File API functions are not available yet. | |
44 $path = $this->siteDirectory . '/profiles/' . $this->profile; | |
45 if ($this->existingSyncDirectory) { | |
46 $config_sync_directory = $this->siteDirectory . '/config/sync'; | |
47 $this->settings['config_directories'][CONFIG_SYNC_DIRECTORY] = (object) [ | |
48 'value' => $config_sync_directory, | |
49 'required' => TRUE, | |
50 ]; | |
51 } | |
52 else { | |
53 // Put the sync directory inside the profile. | |
54 $config_sync_directory = $path . '/config/sync'; | |
55 } | |
56 | |
57 mkdir($path, 0777, TRUE); | |
58 file_put_contents("$path/{$this->profile}.info.yml", Yaml::encode($info)); | |
59 | |
60 // Create config/sync directory and extract tarball contents to it. | |
61 mkdir($config_sync_directory, 0777, TRUE); | |
62 $files = []; | |
63 $list = $archiver->listContent(); | |
64 if (is_array($list)) { | |
65 /** @var array $list */ | |
66 foreach ($list as $file) { | |
67 $files[] = $file['filename']; | |
68 } | |
69 $archiver->extractList($files, $config_sync_directory); | |
70 } | |
71 } | |
72 | |
73 /** | |
74 * Gets the filepath to the configuration tarball. | |
75 * | |
76 * The tarball will be extracted to the install profile's config/sync | |
77 * directory for testing. | |
78 * | |
79 * @return string | |
80 * The filepath to the configuration tarball. | |
81 */ | |
82 abstract protected function getConfigTarball(); | |
83 | |
84 /** | |
85 * {@inheritdoc} | |
86 */ | |
87 protected function installParameters() { | |
88 $parameters = parent::installParameters(); | |
89 | |
90 // The options that change configuration are disabled when installing from | |
91 // existing configuration. | |
92 unset($parameters['forms']['install_configure_form']['site_name']); | |
93 unset($parameters['forms']['install_configure_form']['site_mail']); | |
94 unset($parameters['forms']['install_configure_form']['update_status_module']); | |
95 | |
96 return $parameters; | |
97 } | |
98 | |
99 /** | |
100 * Confirms that the installation installed the configuration correctly. | |
101 */ | |
102 public function testConfigSync() { | |
103 // After installation there is no snapshot and nothing to import. | |
104 $change_list = $this->configImporter()->getStorageComparer()->getChangelist(); | |
105 $expected = [ | |
106 'create' => [], | |
107 // The system.mail is changed configuration because the test system | |
108 // changes it to ensure that mails are not sent. | |
109 'update' => ['system.mail'], | |
110 'delete' => [], | |
111 'rename' => [], | |
112 ]; | |
113 $this->assertEqual($expected, $change_list); | |
114 } | |
115 | |
116 /** | |
117 * Installer step: Select installation profile. | |
118 */ | |
119 protected function setUpProfile() { | |
120 if ($this->existingSyncDirectory) { | |
121 $edit = [ | |
122 'profile' => SelectProfileForm::CONFIG_INSTALL_PROFILE_KEY, | |
123 ]; | |
124 $this->drupalPostForm(NULL, $edit, $this->translations['Save and continue']); | |
125 } | |
126 else { | |
127 parent::setUpProfile(); | |
128 } | |
129 } | |
130 | |
131 } |