diff --git a/scripts/provision-10-enable-dev-modules.sh b/scripts/provision-10-enable-dev-modules.sh index 40d3e4db..b94512a5 100755 --- a/scripts/provision-10-enable-dev-modules.sh +++ b/scripts/provision-10-enable-dev-modules.sh @@ -53,6 +53,10 @@ task "Installing Testmode module." drush pm:install testmode pass "Installed Testmode module." +task "Installing Reroute Email module." +drush pm:install reroute_email +pass "Installed Reroute Email module." + task "Installing Generated content module." if [ "${DRUPAL_GENERATED_CONTENT_SKIP}" = "1" ]; then note "Content generation skipped. DRUPAL_GENERATED_CONTENT_SKIP is set to 1." diff --git a/tests/phpunit/Drupal/EnvironmentSettingsTest.php b/tests/phpunit/Drupal/EnvironmentSettingsTest.php index d241ee8a..53acf9da 100644 --- a/tests/phpunit/Drupal/EnvironmentSettingsTest.php +++ b/tests/phpunit/Drupal/EnvironmentSettingsTest.php @@ -266,7 +266,7 @@ public function testEnvironmentNoOverrides(): void { $this->assertConfig($config); $settings['auto_create_htaccess'] = FALSE; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['entity_update_batch_size'] = 50; $settings['environment'] = self::ENVIRONMENT_SUT; @@ -345,7 +345,7 @@ public function testEnvironmentOverrides(): void { // Verify settings overrides. $settings['auto_create_htaccess'] = FALSE; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['config_sync_directory'] = 'custom_config'; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['entity_update_batch_size'] = 50; @@ -432,7 +432,7 @@ public function testEnvironmentLocal(): void { $this->assertConfig($config); $settings['auto_create_htaccess'] = FALSE; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['disable_captcha'] = TRUE; $settings['entity_update_batch_size'] = 50; @@ -490,7 +490,7 @@ public function testEnvironmentLocalContainer(): void { $this->assertConfig($config); $settings['auto_create_htaccess'] = FALSE; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['disable_captcha'] = TRUE; $settings['entity_update_batch_size'] = 50; @@ -571,7 +571,7 @@ public function testEnvironmentGha(): void { $this->assertConfig($config); $settings['auto_create_htaccess'] = FALSE; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['disable_captcha'] = TRUE; $settings['entity_update_batch_size'] = 50; @@ -647,7 +647,7 @@ public function testEnvironmentLagoonPreview(): void { $settings['auto_create_htaccess'] = FALSE; $settings['cache_prefix']['default'] = 'test_project_test_branch'; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['config_sync_directory'] = '../config/default'; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['entity_update_batch_size'] = 50; @@ -707,7 +707,7 @@ public function testEnvironmentLagoonDev(): void { $settings['auto_create_htaccess'] = FALSE; $settings['cache_prefix']['default'] = 'test_project_develop'; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['config_sync_directory'] = '../config/default'; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['entity_update_batch_size'] = 50; @@ -760,14 +760,14 @@ public function testEnvironmentLagoonTest(): void { $config['shield.settings']['shield_enable'] = TRUE; $config['system.performance']['cache']['page']['max_age'] = 900; $config['testmode.settings']['views_node'] = ['content', 'civictheme_automated_list']; - $config['reroute_email.settings']['enable'] = FALSE; + $config['reroute_email.settings']['enable'] = TRUE; $config['reroute_email.settings']['address'] = 'webmaster@drevops.com'; $config['reroute_email.settings']['allowed'] = '*@drevops.com'; $this->assertConfig($config); $settings['auto_create_htaccess'] = FALSE; $settings['cache_prefix']['default'] = 'test_project_master'; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['config_sync_directory'] = '../config/default'; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['entity_update_batch_size'] = 50; @@ -827,7 +827,7 @@ public function testEnvironmentLagoonProd(): void { $settings['auto_create_htaccess'] = FALSE; $settings['cache_prefix']['default'] = 'test_project_production'; - $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'sdc_devel', 'testmode']; + $settings['config_exclude_modules'] = ['devel', 'do_generated_content', 'generated_content', 'purge_control', 'reroute_email', 'sdc_devel', 'testmode']; $settings['config_sync_directory'] = '../config/default'; $settings['container_yamls'][0] = $this->app_root . '/' . $this->site_path . '/services.yml'; $settings['entity_update_batch_size'] = 50; diff --git a/tests/phpunit/Drupal/SwitchableSettingsTest.php b/tests/phpunit/Drupal/SwitchableSettingsTest.php index b628adac..ef071697 100644 --- a/tests/phpunit/Drupal/SwitchableSettingsTest.php +++ b/tests/phpunit/Drupal/SwitchableSettingsTest.php @@ -717,12 +717,12 @@ public static function dataProviderRerouteEmail(): \Iterator { ], ]; - // Stage: disabled by default. + // Stage: enabled by default. yield [ self::ENVIRONMENT_STAGE, [], [ - 'reroute_email.settings' => ['enable' => FALSE, 'address' => 'webmaster@drevops.com', 'allowed' => '*@drevops.com'], + 'reroute_email.settings' => ['enable' => TRUE, 'address' => 'webmaster@drevops.com', 'allowed' => '*@drevops.com'], ], ]; @@ -757,6 +757,17 @@ public static function dataProviderRerouteEmail(): \Iterator { ], ]; + // Stage with DRUPAL_REROUTE_EMAIL_DISABLED: forced off. + yield [ + self::ENVIRONMENT_STAGE, + [ + 'DRUPAL_REROUTE_EMAIL_DISABLED' => 1, + ], + [ + 'reroute_email.settings' => ['enable' => FALSE], + ], + ]; + // Custom address and allowed list. yield [ self::ENVIRONMENT_DEV, @@ -980,7 +991,7 @@ public static function dataProviderMailCollector(): \Iterator { ], ]; - // Stage: delivered to the original recipients. + // Stage: rerouted, then delivered to the rerouting address. yield [ self::ENVIRONMENT_STAGE, [], diff --git a/web/sites/default/includes/modules/settings.reroute_email.php b/web/sites/default/includes/modules/settings.reroute_email.php index 1c44d2f5..1822eb1c 100644 --- a/web/sites/default/includes/modules/settings.reroute_email.php +++ b/web/sites/default/includes/modules/settings.reroute_email.php @@ -7,18 +7,21 @@ declare(strict_types=1); +$settings['config_exclude_modules'][] = 'reroute_email'; + $config['reroute_email.settings']['address'] = getenv('DRUPAL_REROUTE_EMAIL_ADDRESS') ?: 'webmaster@drevops.com'; $config['reroute_email.settings']['allowed'] = getenv('DRUPAL_REROUTE_EMAIL_ALLOWED') ?: '*@drevops.com'; -if (!in_array($settings['environment'], [ENVIRONMENT_LOCAL, ENVIRONMENT_CI, ENVIRONMENT_STAGE, ENVIRONMENT_PROD], TRUE)) { +if (in_array($settings['environment'], [ENVIRONMENT_LOCAL, ENVIRONMENT_CI, ENVIRONMENT_PROD], TRUE)) { + // Deliver every message to its intended recipient. Local and CI capture + // outgoing mail by other means, and production sends to real recipients. + $config['reroute_email.settings']['enable'] = FALSE; +} +else { // Send every outgoing message to the address above instead of to its // intended recipient, unless that recipient matches the allowed list. $config['reroute_email.settings']['enable'] = TRUE; } -else { - // Deliver every message to its intended recipient. - $config['reroute_email.settings']['enable'] = FALSE; -} // Allow an environment to opt out of the rerouting set above. if (!empty(getenv('DRUPAL_REROUTE_EMAIL_DISABLED'))) {