From 065f06b19d42fc737469efad1a5abdac36db4557 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ph=C3=A9na=20Proxima?= <adam@phenaproxima.net>
Date: Mon, 1 Nov 2021 18:16:06 -0400
Subject: [PATCH] Add tests

---
 .../ExcludedPathsSubscriber.php               | 20 +----
 .../fixtures/fake_site/private/ignore.txt     |  1 +
 .../fake_site/sites/default/services.yml      |  1 +
 .../sites/default/settings.local.php          |  6 ++
 .../fake_site/sites/default/settings.php      |  6 ++
 .../sites/example.com/files/ignore.txt        |  1 +
 .../fake_site/sites/example.com/services.yml  |  1 +
 .../sites/example.com/settings.local.php      |  6 ++
 .../fake_site/sites/example.com/settings.php  |  6 ++
 .../fake_site/sites/simpletest/ignore.txt     |  1 +
 .../fixtures/fake_site/vendor/web.config      |  1 +
 .../src/Functional/ExcludedPathsTest.php      | 84 +++++++++++++++++++
 12 files changed, 118 insertions(+), 16 deletions(-)
 create mode 100644 package_manager/tests/fixtures/fake_site/private/ignore.txt
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/default/services.yml
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/default/settings.local.php
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/default/settings.php
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/example.com/files/ignore.txt
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/example.com/services.yml
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/example.com/settings.local.php
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/example.com/settings.php
 create mode 100644 package_manager/tests/fixtures/fake_site/sites/simpletest/ignore.txt
 create mode 100644 package_manager/tests/fixtures/fake_site/vendor/web.config
 create mode 100644 package_manager/tests/src/Functional/ExcludedPathsTest.php

diff --git a/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php b/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php
index 9141e9d196..a9921a3cda 100644
--- a/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php
+++ b/package_manager/src/EventSubscriber/ExcludedPathsSubscriber.php
@@ -123,23 +123,11 @@ class ExcludedPathsSubscriber implements EventSubscriberInterface {
       'settings.local.php',
       'services.yml',
     ];
+    $default_site = 'sites' . DIRECTORY_SEPARATOR . 'default';
+
     foreach ($settings_files as $settings_file) {
-      $file_path = implode(DIRECTORY_SEPARATOR, [
-        $this->appRoot,
-        $this->sitePath,
-        $settings_file,
-      ]);
-      $file_path = $this->fileSystem->realpath($file_path);
-      if (file_exists($file_path)) {
-        $event->excludePath($file_path);
-      }
-
-      $default_file_path = implode(DIRECTORY_SEPARATOR, [
-        'sites',
-        'default',
-        $settings_file,
-      ]);
-      $event->excludePath($default_file_path);
+      $event->excludePath($this->sitePath . DIRECTORY_SEPARATOR . $settings_file);
+      $event->excludePath($default_site . DIRECTORY_SEPARATOR . $settings_file);
     }
   }
 
diff --git a/package_manager/tests/fixtures/fake_site/private/ignore.txt b/package_manager/tests/fixtures/fake_site/private/ignore.txt
new file mode 100644
index 0000000000..08874eba8b
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/private/ignore.txt
@@ -0,0 +1 @@
+This file should never be staged.
diff --git a/package_manager/tests/fixtures/fake_site/sites/default/services.yml b/package_manager/tests/fixtures/fake_site/sites/default/services.yml
new file mode 100644
index 0000000000..e11552b41d
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/default/services.yml
@@ -0,0 +1 @@
+# This file should never be staged.
diff --git a/package_manager/tests/fixtures/fake_site/sites/default/settings.local.php b/package_manager/tests/fixtures/fake_site/sites/default/settings.local.php
new file mode 100644
index 0000000000..15b43d2812
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/default/settings.local.php
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * This file should never be staged.
+ */
diff --git a/package_manager/tests/fixtures/fake_site/sites/default/settings.php b/package_manager/tests/fixtures/fake_site/sites/default/settings.php
new file mode 100644
index 0000000000..15b43d2812
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/default/settings.php
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * This file should never be staged.
+ */
diff --git a/package_manager/tests/fixtures/fake_site/sites/example.com/files/ignore.txt b/package_manager/tests/fixtures/fake_site/sites/example.com/files/ignore.txt
new file mode 100644
index 0000000000..08874eba8b
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/example.com/files/ignore.txt
@@ -0,0 +1 @@
+This file should never be staged.
diff --git a/package_manager/tests/fixtures/fake_site/sites/example.com/services.yml b/package_manager/tests/fixtures/fake_site/sites/example.com/services.yml
new file mode 100644
index 0000000000..e11552b41d
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/example.com/services.yml
@@ -0,0 +1 @@
+# This file should never be staged.
diff --git a/package_manager/tests/fixtures/fake_site/sites/example.com/settings.local.php b/package_manager/tests/fixtures/fake_site/sites/example.com/settings.local.php
new file mode 100644
index 0000000000..15b43d2812
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/example.com/settings.local.php
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * This file should never be staged.
+ */
diff --git a/package_manager/tests/fixtures/fake_site/sites/example.com/settings.php b/package_manager/tests/fixtures/fake_site/sites/example.com/settings.php
new file mode 100644
index 0000000000..15b43d2812
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/example.com/settings.php
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * This file should never be staged.
+ */
diff --git a/package_manager/tests/fixtures/fake_site/sites/simpletest/ignore.txt b/package_manager/tests/fixtures/fake_site/sites/simpletest/ignore.txt
new file mode 100644
index 0000000000..08874eba8b
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/sites/simpletest/ignore.txt
@@ -0,0 +1 @@
+This file should never be staged.
diff --git a/package_manager/tests/fixtures/fake_site/vendor/web.config b/package_manager/tests/fixtures/fake_site/vendor/web.config
new file mode 100644
index 0000000000..08874eba8b
--- /dev/null
+++ b/package_manager/tests/fixtures/fake_site/vendor/web.config
@@ -0,0 +1 @@
+This file should never be staged.
diff --git a/package_manager/tests/src/Functional/ExcludedPathsTest.php b/package_manager/tests/src/Functional/ExcludedPathsTest.php
new file mode 100644
index 0000000000..442ed640d8
--- /dev/null
+++ b/package_manager/tests/src/Functional/ExcludedPathsTest.php
@@ -0,0 +1,84 @@
+<?php
+
+namespace Drupal\Tests\package_manager\Functional;
+
+use Drupal\Core\Site\Settings;
+use Drupal\package_manager\PathLocator;
+use Drupal\package_manager\Stage;
+use Drupal\Tests\BrowserTestBase;
+
+/**
+ * @covers \Drupal\package_manager\EventSubscriber\ExcludedPathsSubscriber
+ *
+ * @group package_manager
+ */
+class ExcludedPathsTest extends BrowserTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['package_manager'];
+
+  public function testExcludedPaths(): void {
+    $active_dir = __DIR__ . '/../../fixtures/fake_site';
+    $stage_dir = $this->siteDirectory . '/stage';
+
+    $path_locator = $this->prophesize(PathLocator::class);
+    $path_locator->getActiveDirectory()->willReturn($active_dir);
+    $path_locator->getStageDirectory()->willReturn($stage_dir);
+
+    $settings = Settings::getAll();
+    $settings['file_public_path'] = 'sites/example.com/files';
+    $settings['file_private_path'] = 'private';
+    new Settings($settings);
+
+    /** @var \Drupal\package_manager\EventSubscriber\ExcludedPathsSubscriber $subscriber */
+    $subscriber = $this->container->get('package_manager.excluded_paths_subscriber');
+    $reflector = new \ReflectionObject($subscriber);
+    $property = $reflector->getProperty('sitePath');
+    $property->setAccessible(TRUE);
+    $property->setValue($subscriber, 'sites/example.com');
+
+    $stage = new Stage(
+      $path_locator->reveal(),
+      $this->container->get('package_manager.beginner'),
+      $this->container->get('package_manager.stager'),
+      $this->container->get('package_manager.committer'),
+      $this->container->get('package_manager.cleaner'),
+      $this->container->get('event_dispatcher')
+    );
+    $stage->create();
+
+    $this->assertDirectoryExists($stage_dir);
+    $this->assertDirectoryNotExists("$stage_dir/sites/simpletest");
+    $this->assertFileNotExists("$stage_dir/vendor/web.config");
+    $this->assertDirectoryNotExists("$stage_dir/sites/example.com/files");
+    $this->assertDirectoryNotExists("$stage_dir/private");
+    $this->assertFileNotExists("$stage_dir/sites/example.com/settings.php");
+    $this->assertFileNotExists("$stage_dir/sites/example.com/settings.local.php");
+    $this->assertFileNotExists("$stage_dir/sites/example.com/services.yml");
+    $this->assertFileNotExists("$stage_dir/sites/default/settings.php");
+    $this->assertFileNotExists("$stage_dir/sites/default/settings.local.php");
+    $this->assertFileNotExists("$stage_dir/sites/default/services.yml");
+
+    $files = [
+      'sites/default/no-copy.txt',
+      'web.config',
+    ];
+    foreach ($files as $file) {
+      $file = "$stage_dir/$file";
+      touch($file);
+      $this->assertFileExists($file);
+    }
+    $stage->apply();
+    foreach ($files as $file) {
+      $this->assertFileNotExists("$active_dir/$file");
+    }
+  }
+
+}
-- 
GitLab