From a810e4d9be7d51505bbcb156bd35ef9da403e81d Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Sat, 22 Dec 2018 21:13:59 +0100
Subject: [PATCH] #32 Add support for BackstopJS

---
 src/Handler.php                        | 15 +++++++--
 templates/tests/backstop/backstop.json | 44 ++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)
 create mode 100644 templates/tests/backstop/backstop.json

diff --git a/src/Handler.php b/src/Handler.php
index d16de1b..a58b0ac 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -87,7 +87,7 @@ class Handler extends BaseHandler {
       $filename = $twig->render($template, $options);
       $file = $def['dest'] . '/' . $filename;
       if ($overwrite || !$fs->exists($file)) {
-        $twig_loader->setTemplate($filename, file_get_contents($pluginRoot . '/templates/' . $template . '.twig'));
+        $twig_loader->setTemplate($filename, file_get_contents($pluginRoot . '/templates/' . ($def['source'] ?? '') . $template . '.twig'));
         $rendered = $twig->render($filename, $options);
         if (!empty($def['add2yaml']) && isset($options[$filename])) {
           $yaml = Yaml::parse($rendered);
@@ -109,7 +109,7 @@ class Handler extends BaseHandler {
             $orig_ignored = TRUE;
           }
         }
-        else {
+        else if (empty($def['add2git'])) {
           $this->git('ignore ' . $filename);
         }
         file_put_contents($file, $rendered);
@@ -134,6 +134,11 @@ class Handler extends BaseHandler {
       }
     }
 
+    // Setup BackstopJS.
+    $this->git('ignore tests/backstop/backstop_data/bitmaps_test');
+    $this->git('ignore tests/backstop/backstop_data/html_report');
+    $this->git('lfs track tests/backstop/**/*.png');
+
     $traefik = new Traefik($options['projectname']);
     $traefik->update();
 
@@ -181,6 +186,12 @@ class Handler extends BaseHandler {
       ],
       'wkhtmltox.sh' => [
         'dest' => $projectRoot . '/.docker-init',
+      ],
+      'backstop.json' => [
+        'source' => 'tests/backstop/',
+        'dest' => $projectRoot . '/tests/backstop',
+        'add2yaml' => TRUE,
+        'add2git' => TRUE,
       ]
     ];
   }
diff --git a/templates/tests/backstop/backstop.json b/templates/tests/backstop/backstop.json
new file mode 100644
index 0000000..2c374b3
--- /dev/null
+++ b/templates/tests/backstop/backstop.json
@@ -0,0 +1,44 @@
+{
+  "id": "backstop_{{ projectname }}",
+  "viewports": [
+    {
+      "label": "phone",
+      "width": 320,
+      "height": 480
+    },
+    {
+      "label": "tablet",
+      "width": 768,
+      "height": 1024
+    },
+    {
+      "label": "desktop",
+      "width": 1960,
+      "height": 1280
+    }
+  ],
+  "onBeforeScript": "puppet/onBefore.js",
+  "onReadyScript": "puppet/onReady.js",
+  "scenarios": [
+    {
+      "label": "{{ projectname }}",
+      "url": "http://{{ webserver.type }}"
+    }
+  ],
+  "paths": {
+    "bitmaps_reference": "backstop_data/bitmaps_reference",
+    "bitmaps_test": "backstop_data/bitmaps_test",
+    "engine_scripts": "backstop_data/engine_scripts",
+    "html_report": "backstop_data/html_report",
+    "ci_report": "backstop_data/ci_report"
+  },
+  "report": ["browser"],
+  "engine": "puppeteer",
+  "engineOptions": {
+    "args": ["--no-sandbox"]
+  },
+  "asyncCaptureLimit": 5,
+  "asyncCompareLimit": 50,
+  "debug": false,
+  "debugWindow": false
+}
-- 
GitLab