From c1a092ecdafb57661f3a80374204f351e20c0c08 Mon Sep 17 00:00:00 2001
From: Antonio De Marco <antonio@nuvole.org>
Date: Sun, 26 Aug 2018 12:40:31 +0200
Subject: [PATCH] Update build process (#210)

---
 .gitignore                                    |  3 +-
 .travis.yml                                   | 37 +++++----
 behat.yml.dist                                |  2 +
 composer.json                                 | 22 +++---
 docker-compose.yml                            | 63 ---------------
 docker-compose.yml.dist                       | 78 +++++++++++++++++++
 tests/features/bootstrap/FeatureContext.php   |  4 +-
 .../Kernel/Plugin/Deriver/YamlDeriverTest.php |  2 +-
 tests/src/Kernel/Plugin/PatternBaseTest.php   |  2 +-
 .../TypedData/PatternDataDefinitionTest.php   |  2 +-
 tests/src/Kernel/UiPatternsManagerTest.php    |  2 +-
 .../Kernel/UiPatternsSourceManagerTest.php    |  9 +--
 .../Unit/Definition/PatternDefinitionTest.php | 39 +++++++---
 tests/src/Unit/Element/PatternPreviewTest.php |  2 +-
 14 files changed, 158 insertions(+), 109 deletions(-)
 delete mode 100644 docker-compose.yml
 create mode 100644 docker-compose.yml.dist

diff --git a/.gitignore b/.gitignore
index 0e9cb33bb..b9438a85c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,5 @@ composer.lock
 docs/_build
 build/
 phpunit.xml
-behat.yml
\ No newline at end of file
+behat.yml
+docker-compose.yml
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 854a802e7..f894eeecc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,36 +1,43 @@
 sudo: required
+language: php
+
+php:
+- 5.6
+- 7.1
+
+git:
+  depth: 1
 
 services:
-  - docker
-  - docker-compose
+- docker
 
 env:
   global:
-    - DOCKER_COMPOSE_VERSION=1.17.1
+  - DOCKER_COMPOSE_VERSION=1.17.1
   matrix:
-    - DRUPAL_VERSION=8.5.x-dev
-    - DRUPAL_VERSION=8.6.x-dev
+  - DRUPAL_VERSION=~8.5
+  - DRUPAL_VERSION=~8.6@rc
+  - DRUPAL_VERSION=8.7.x-dev
 
 matrix:
   allow_failures:
-    - env: DRUPAL_VERSION=8.6.x-dev
+  - env: DRUPAL_VERSION=8.7.x-dev
 
 before_install:
-  - docker-compose up -d
-  - docker ps
+- cp docker-compose.yml.dist docker-compose.yml
+- docker-compose up -d
 
 install:
-  - docker-compose exec -u root php composer require drupal/core:$DRUPAL_VERSION --dev --prefer-dist
+- docker-compose exec -u root php composer require webflo/drupal-core-require-dev:$DRUPAL_VERSION --dev
 
 before_script:
-  - docker-compose exec -u root php ./vendor/bin/run drupal:site-setup
-  - docker-compose exec -u root php ./vendor/bin/run drupal:site-install
-  - docker-compose exec -u root php chown -R www-data:www-data build
+- docker-compose exec -u root php ./vendor/bin/run drupal:site-install
+- docker-compose exec -u root php chown -R www-data:www-data build
 
 script:
-  - docker-compose exec -u root php ./vendor/bin/grumphp run
-  - docker-compose exec -u root php ./vendor/bin/phpunit
-  - docker-compose exec -u root php ./vendor/bin/behat
+- docker-compose exec -u root php ./vendor/bin/grumphp run
+- docker-compose exec -u root php ./vendor/bin/phpunit
+- docker-compose exec -u root php ./vendor/bin/behat
 
 notifications:
   email: false
\ No newline at end of file
diff --git a/behat.yml.dist b/behat.yml.dist
index d207f10df..8e4da865c 100644
--- a/behat.yml.dist
+++ b/behat.yml.dist
@@ -19,8 +19,10 @@ default:
   extensions:
     Behat\MinkExtension:
       goutte: ~
+      browser_name: chrome
       selenium2:
         wd_host: 'http://selenium:4444/wd/hub'
+        capabilities: { "browser": "chrome", "version": "*" }
       javascript_session: selenium2
       base_url: "${drupal.base_url}"
     NuvoleWeb\Drupal\DrupalExtension:
diff --git a/composer.json b/composer.json
index db58d06ce..9c4b113de 100644
--- a/composer.json
+++ b/composer.json
@@ -15,11 +15,10 @@
   "require-dev": {
     "cweagans/composer-patches": "~1.0",
     "drupal-composer/drupal-scaffold": "^2.2",
-    "drupal/config_installer": "1.3.0",
+    "drupal/config_installer": "~1",
     "drupal/console": "~1",
-    "drush/drush": "*",
-    "drupal/core": "8.5.x-dev",
-    "webflo/drupal-core-require-dev": "^8.5",
+    "drush/drush": "~9",
+    "webflo/drupal-core-require-dev": "~8.6@rc",
     "drupal/ds": "~3",
     "drupal/field_group": "~1",
     "drupal/coffee": "~1",
@@ -30,8 +29,7 @@
     "drupal/token": "~1",
     "drupal/bootstrap": "3.1",
     "nuvoleweb/drupal-behat": "~1.1.0",
-    "phpro/grumphp": "0.11.4",
-    "peridot-php/leo": "^1.6",
+    "phpro/grumphp": "~0.14",
     "openeuropa/task-runner": "^0.4"
   },
   "repositories": [
@@ -41,16 +39,19 @@
     }
   ],
   "autoload": {
-    "psr-4": {"Drupal\\ui_patterns\\": "src"
+    "psr-4": {
+      "Drupal\\ui_patterns\\": "./src"
     }
   },
   "autoload-dev": {
     "psr-4": {
-      "Drupal\\Tests\\ui_patterns\\": "tests/src"
+      "Drupal\\Tests\\ui_patterns\\": "./tests/src"
     }
   },
   "scripts": {
-    "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold"
+    "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold",
+    "post-install-cmd": "./vendor/bin/run drupal:site-setup",
+    "post-update-cmd": "./vendor/bin/run drupal:site-setup"
   },
   "extra": {
     "patches": {
@@ -64,5 +65,8 @@
       "build/profiles/contrib/{$name}": ["type:drupal-profile"],
       "build/themes/contrib/{$name}": ["type:drupal-theme"]
     }
+  },
+  "config": {
+    "sort-packages": true
   }
 }
diff --git a/docker-compose.yml b/docker-compose.yml
deleted file mode 100644
index f22ff5f55..000000000
--- a/docker-compose.yml
+++ /dev/null
@@ -1,63 +0,0 @@
-version: "2"
-
-services:
-  mariadb:
-    image: wodby/mariadb:10.1-2.3.5
-    environment:
-      MYSQL_ROOT_PASSWORD: password
-      MYSQL_DATABASE: drupal
-      MYSQL_USER: drupal
-      MYSQL_PASSWORD: drupal
-
-  php:
-    image: wodby/drupal-php:7.0-3.0.0
-    environment:
-      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
-      PHP_FPM_CLEAR_ENV: "no"
-      DB_HOST: mariadb
-      DB_USER: drupal
-      DB_PASSWORD: drupal
-      DB_NAME: drupal
-      DB_DRIVER: mysql
-      PHP_XDEBUG: 1
-      PHP_XDEBUG_DEFAULT_ENABLE: 1
-      PHP_XDEBUG_REMOTE_CONNECT_BACK: 1
-      PHP_XDEBUG_REMOTE_HOST: "10.254.254.254"
-      PHP_XDEBUG_IDEKEY: "PHPSTORM"
-      PHP_IDE_CONFIG: "serverName=ui_patterns"
-    volumes:
-      - ./:/var/www/html
-
-  nginx:
-    image: wodby/drupal-nginx:8-1.13-3.0.1
-    depends_on:
-      - php
-    environment:
-      NGINX_STATIC_CONTENT_OPEN_FILE_CACHE: "off"
-      NGINX_ERROR_LOG_LEVEL: debug
-      NGINX_BACKEND_HOST: php
-      NGINX_SERVER_ROOT: /var/www/html/build
-    volumes:
-      - ./:/var/www/html
-    labels:
-      - 'traefik.backend=nginx'
-      - 'traefik.port=80'
-      - 'traefik.frontend.rule=Host:ui_patterns.localhost'
-
-  traefik:
-    image: traefik
-    command: -c /dev/null --web --docker --logLevel=INFO
-    ports:
-      - '80:80'
-    volumes:
-      - /var/run/docker.sock:/var/run/docker.sock
-
-  selenium:
-    image: selenium/standalone-firefox-debug:2.53.1-beryllium
-    ports:
-      - "5900:5900"
-    expose:
-      - '4444'
-
-volumes:
-  codebase:
diff --git a/docker-compose.yml.dist b/docker-compose.yml.dist
new file mode 100644
index 000000000..fb5bc454e
--- /dev/null
+++ b/docker-compose.yml.dist
@@ -0,0 +1,78 @@
+version: "2"
+
+services:
+
+  mariadb:
+    image: wodby/mariadb:10.1-3.3.0
+    stop_grace_period: 30s
+    environment:
+      MYSQL_ROOT_PASSWORD: password
+      MYSQL_DATABASE: drupal
+      MYSQL_USER: drupal
+      MYSQL_PASSWORD: drupal
+
+  php:
+    image: wodby/drupal-php:${TRAVIS_PHP_VERSION}-4.6.3
+    environment:
+      PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailhog:1025
+      DB_HOST: mariadb
+      DB_USER: drupal
+      DB_PASSWORD: drupal
+      DB_NAME: drupal
+      DB_DRIVER: mysql
+      PHP_XDEBUG: 1
+      PHP_XDEBUG_DEFAULT_ENABLE: 1
+      PHP_XDEBUG_REMOTE_CONNECT_BACK: 1
+      PHP_XDEBUG_REMOTE_HOST: "10.254.254.254"
+      PHP_XDEBUG_IDEKEY: "PHPSTORM"
+      PHP_IDE_CONFIG: "serverName=ui_patterns"
+    volumes:
+    - ./:/var/www/html
+
+  nginx:
+    image: wodby/nginx:1.15-5.0.0
+    depends_on:
+    - php
+    environment:
+      NGINX_STATIC_OPEN_FILE_CACHE: "off"
+      NGINX_ERROR_LOG_LEVEL: debug
+      NGINX_BACKEND_HOST: php
+      NGINX_SERVER_ROOT: /var/www/html/build
+      NGINX_VHOST_PRESET: drupal8
+    volumes:
+    - ./:/var/www/html
+    labels:
+    - 'traefik.backend=nginx'
+    - 'traefik.port=80'
+    - 'traefik.frontend.rule=Host:ui_patterns.localhost'
+
+  traefik:
+    image: traefik
+    command: -c /dev/null --web --docker --logLevel=INFO
+    ports:
+    - '80:80'
+    volumes:
+    - /var/run/docker.sock:/var/run/docker.sock
+
+  # If you would like to see what is going on you can run the following on your host:
+  # docker run --rm -p 4444:4444 -p 5900:5900 --network="host" selenium/standalone-chrome-debug:latest
+  # Newer version of this image might run into this issue:
+  # @link https://github.com/elgalu/docker-selenium/issues/20
+  selenium:
+    image: selenium/standalone-chrome-debug:3.11
+    expose:
+    - '4444'
+    environment:
+    - DISPLAY=:99
+    - SE_OPTS=-debug
+    - SCREEN_WIDTH=1280
+    - SCREEN_HEIGHT=800
+    - VNC_NO_PASSWORD=1
+    ports:
+    - '4444:4444'
+    - "5900:5900"
+    volumes:
+    - /dev/shm:/dev/shm
+
+volumes:
+  codebase:
diff --git a/tests/features/bootstrap/FeatureContext.php b/tests/features/bootstrap/FeatureContext.php
index 0737faffb..7b16bbc2a 100644
--- a/tests/features/bootstrap/FeatureContext.php
+++ b/tests/features/bootstrap/FeatureContext.php
@@ -29,7 +29,9 @@ class FeatureContext extends RawDrupalContext {
   public function assertModulesEnabled(TableNode $table) {
     $rows = $table->getRows();
     foreach ($rows as $row) {
-      expect(\Drupal::moduleHandler()->moduleExists($row[0]))->to->be->true("Module '{$row[0]}' should be enabled but it is not.");
+      if (!\Drupal::moduleHandler()->moduleExists($row[0])) {
+        throw new \Exception("Module '{$row[0]}' should be enabled but it is not.");
+      }
     }
   }
 
diff --git a/tests/src/Kernel/Plugin/Deriver/YamlDeriverTest.php b/tests/src/Kernel/Plugin/Deriver/YamlDeriverTest.php
index 491f4b660..9e2523a91 100644
--- a/tests/src/Kernel/Plugin/Deriver/YamlDeriverTest.php
+++ b/tests/src/Kernel/Plugin/Deriver/YamlDeriverTest.php
@@ -19,7 +19,7 @@ class YamlDeriverTest extends AbstractUiPatternsTest {
    */
   public function testGetDerivativeDefinitions() {
     foreach (UiPatterns::getManager()->getDefinitions() as $definition) {
-      expect($definition)->to->have->keys(['id', 'provider', 'base path']);
+      $this->assertArrayHasKey(['id', 'provider', 'base path'], $definition);
     }
   }
 
diff --git a/tests/src/Kernel/Plugin/PatternBaseTest.php b/tests/src/Kernel/Plugin/PatternBaseTest.php
index 07ed30ac6..11988470b 100644
--- a/tests/src/Kernel/Plugin/PatternBaseTest.php
+++ b/tests/src/Kernel/Plugin/PatternBaseTest.php
@@ -26,7 +26,7 @@ class PatternBaseTest extends AbstractUiPatternsTest {
 
       /** @var \Drupal\ui_patterns\Plugin\PatternBase $pattern */
       $libraries = $pattern->getLibraryDefinitions();
-      expect($libraries)->to->loosely->equal($item['expected']);
+      $this->assertEquals($item['expected'], $libraries);
     }
   }
 
diff --git a/tests/src/Kernel/TypedData/PatternDataDefinitionTest.php b/tests/src/Kernel/TypedData/PatternDataDefinitionTest.php
index 8727590fc..e99e2f436 100644
--- a/tests/src/Kernel/TypedData/PatternDataDefinitionTest.php
+++ b/tests/src/Kernel/TypedData/PatternDataDefinitionTest.php
@@ -26,7 +26,7 @@ class PatternDataDefinitionTest extends AbstractUiPatternsTest {
     foreach ($violations as $violation) {
       $actual[] = $violation->getPropertyPath() . ': ' . $violation->getMessage();
     }
-    expect($actual)->to->equal($expected);
+    $this->assertEquals($expected, $actual);
   }
 
   /**
diff --git a/tests/src/Kernel/UiPatternsManagerTest.php b/tests/src/Kernel/UiPatternsManagerTest.php
index 0ce777ef6..093b28c56 100644
--- a/tests/src/Kernel/UiPatternsManagerTest.php
+++ b/tests/src/Kernel/UiPatternsManagerTest.php
@@ -21,7 +21,7 @@ class UiPatternsManagerTest extends AbstractUiPatternsTest {
     $definitions = $manager->getDefinitions();
 
     foreach ($manager->getPatterns() as $pattern) {
-      expect($pattern->getBaseId())->to->equal($definitions[$pattern->getPluginId()]->id());
+      $this->assertEquals($definitions[$pattern->getPluginId()]->id(), $pattern->getBaseId());
     }
   }
 
diff --git a/tests/src/Kernel/UiPatternsSourceManagerTest.php b/tests/src/Kernel/UiPatternsSourceManagerTest.php
index b8a6124a2..97d116156 100644
--- a/tests/src/Kernel/UiPatternsSourceManagerTest.php
+++ b/tests/src/Kernel/UiPatternsSourceManagerTest.php
@@ -19,9 +19,8 @@ class UiPatternsSourceManagerTest extends AbstractUiPatternsTest {
     $plugin_manager = \Drupal::service('plugin.manager.ui_patterns_source');
 
     $definitions = $plugin_manager->getDefinitions();
-    expect($definitions)
-      ->to->not->be->empty()
-      ->and->to->have->keys(['test_source']);
+    $this->assertNotEmpty($definitions);
+    $this->assertArrayHasKey('test_source', $definitions);
 
     $expected = [
       ['name' => 'field_1', 'label' => 'Field 1'],
@@ -34,8 +33,8 @@ class UiPatternsSourceManagerTest extends AbstractUiPatternsTest {
     /** @var \Drupal\ui_patterns\Plugin\PatternSourceBase $plugin */
     $plugin = $plugin_manager->createInstance('test_source');
     foreach ($plugin->getSourceFields() as $key => $field) {
-      expect($field->getFieldName())->to->equal($expected[$key]['name']);
-      expect($field->getFieldLabel())->to->equal($expected[$key]['label']);
+      $this->assertEquals($expected[$key]['name'], $field->getFieldName());
+      $this->assertEquals($expected[$key]['label'], $field->getFieldLabel());
     }
   }
 
diff --git a/tests/src/Unit/Definition/PatternDefinitionTest.php b/tests/src/Unit/Definition/PatternDefinitionTest.php
index 9942c0786..8abd236c7 100644
--- a/tests/src/Unit/Definition/PatternDefinitionTest.php
+++ b/tests/src/Unit/Definition/PatternDefinitionTest.php
@@ -20,7 +20,7 @@ class PatternDefinitionTest extends AbstractUiPatternsTest {
    */
   public function testGettersSetters($getter, $name, $value) {
     $pattern_definition = new PatternDefinition([$name => $value]);
-    expect($value)->to->equal(call_user_func([$pattern_definition, $getter]));
+    $this->assertEquals(call_user_func([$pattern_definition, $getter]), $value);
   }
 
   /**
@@ -37,18 +37,37 @@ class PatternDefinitionTest extends AbstractUiPatternsTest {
     ];
     $pattern_definition = new PatternDefinition();
     $pattern_definition->setFields($fields);
-    expect($pattern_definition->getField('name')->getLabel())->to->equal($fields['name']['label']);
-    expect($pattern_definition->getField('name')->getName())->to->equal($fields['name']['name']);
-    expect($pattern_definition->getField('name')->getType())->to->equal(NULL);
-    expect($pattern_definition->getField('name')->getDescription())->to->equal(NULL);
-    expect($pattern_definition->getField('name')->getPreview())->to->equal(NULL);
+    $this->assertEquals(
+      [
+        $fields['name']['label'],
+        $fields['name']['name'],
+        NULL,
+        NULL,
+        NULL,
+      ],
+      [
+        $pattern_definition->getField('name')->getLabel(),
+        $pattern_definition->getField('name')->getName(),
+        $pattern_definition->getField('name')->getType(),
+        $pattern_definition->getField('name')->getDescription(),
+        $pattern_definition->getField('name')->getPreview(),
+      ]);
 
     $pattern_definition->getField('name')->setType('type');
     $pattern_definition->getField('name')->setPreview('preview');
     $pattern_definition->getField('name')->setDescription('description');
-    expect($pattern_definition->getField('name')->getType())->to->equal('type');
-    expect($pattern_definition->getField('name')->getDescription())->to->equal('description');
-    expect($pattern_definition->getField('name')->getPreview())->to->equal('preview');
+
+    $this->assertEquals(
+      [
+        'type',
+        'description',
+        'preview',
+      ],
+      [
+        $pattern_definition->getField('name')->getType(),
+        $pattern_definition->getField('name')->getDescription(),
+        $pattern_definition->getField('name')->getPreview(),
+      ]);
   }
 
   /**
@@ -59,7 +78,7 @@ class PatternDefinitionTest extends AbstractUiPatternsTest {
   public function testFieldsProcessing($actual, $expected) {
     $pattern_definition = new PatternDefinition();
     $data = $pattern_definition->setFields($actual)->toArray();
-    expect($data['fields'])->to->be->loosely->equal($expected);
+    $this->assertEquals($expected, $data['fields']);
   }
 
   /**
diff --git a/tests/src/Unit/Element/PatternPreviewTest.php b/tests/src/Unit/Element/PatternPreviewTest.php
index bad88b799..3bd41623b 100644
--- a/tests/src/Unit/Element/PatternPreviewTest.php
+++ b/tests/src/Unit/Element/PatternPreviewTest.php
@@ -22,7 +22,7 @@ class PatternPreviewTest extends AbstractUiPatternsTest {
     $assertions = Yaml::decode(file_get_contents($this->getFixturePath() . '/preview_markup.yml'));
     foreach ($assertions as $assertion) {
       $result = PatternPreview::getPreviewMarkup($assertion['actual']);
-      expect($assertion['expected'])->to->equal($result);
+      $this->assertEquals($assertion['expected'], $result);
     }
   }
 
-- 
GitLab