From 96d8b3da5e9b676f90978b9a31dfdfbd8adb467c Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bjaskulski@protonmail.com>
Date: Thu, 21 Sep 2023 22:43:42 +0200
Subject: [PATCH] tests: improve tests organization

Move all tests to one directory as no integration tests are
executed. Modernize packages used. Simplify configuration.

Signed-off-by: Bart Jaskulski <bjaskulski@protonmail.com>
---
 composer.json                                 | 26 ++++++-------
 phpcs.xml.dist                                | 37 +++++++++++++++++++
 phpunit.xml.dist                              |  7 ++++
 .../Renderer/TestSimplePhpRenderer.php        |  0
 .../Renderer/templates/some_template.php      |  0
 .../{unit => }/Resolver/TestChainResolver.php |  4 +-
 tests/{unit => }/Resolver/TestDirResolver.php |  4 +-
 .../Resolver/TestWpThemeResolver.php          |  4 +-
 .../Resolver/templates/some_template.php      |  0
 tests/{unit => }/TestPluginViewBuilder.php    |  4 +-
 tests/integration/bootstrap.php               | 28 --------------
 tests/{unit => }/stub/template/file.php       |  0
 tests/unit/bootstrap.php                      |  6 ---
 13 files changed, 64 insertions(+), 56 deletions(-)
 create mode 100644 phpcs.xml.dist
 create mode 100644 phpunit.xml.dist
 rename tests/{unit => }/Renderer/TestSimplePhpRenderer.php (100%)
 rename tests/{unit => }/Renderer/templates/some_template.php (100%)
 rename tests/{unit => }/Resolver/TestChainResolver.php (95%)
 rename tests/{unit => }/Resolver/TestDirResolver.php (93%)
 rename tests/{unit => }/Resolver/TestWpThemeResolver.php (96%)
 rename tests/{unit => }/Resolver/templates/some_template.php (100%)
 rename tests/{unit => }/TestPluginViewBuilder.php (93%)
 delete mode 100644 tests/integration/bootstrap.php
 rename tests/{unit => }/stub/template/file.php (100%)
 delete mode 100644 tests/unit/bootstrap.php

diff --git a/composer.json b/composer.json
index 9aabcbf..79afa9c 100644
--- a/composer.json
+++ b/composer.json
@@ -8,26 +8,24 @@
         }
     ],
     "require": {
-        "php": ">=7.0"
+        "php": ">=7.1 | ^8"
     },
     "require-dev": {
-        "phpunit/phpunit": "<7",
-        "wp-coding-standards/wpcs": "^0.14.1",
-        "squizlabs/php_codesniffer": "^3.0.2",
-        "mockery/mockery": "*",
-        "10up/wp_mock": "*",
-        "wimg/php-compatibility": "^8"
+        "phpunit/phpunit": "^7 | ^8 | ^9",
+        "wpdesk/wp-code-sniffer": "^1",
+        "mockery/mockery": "^1",
+        "10up/wp_mock": "^1"
     },
     "autoload": {
         "psr-4": {"WPDesk\\View\\": "src/"}
     },
-    "autoload-dev": {
-    },
     "scripts": {
-        "phpcs": "phpcs",
-        "phpunit-unit": "phpunit --configuration phpunit-unit.xml --coverage-text --colors=never",
-        "phpunit-unit-fast": "phpunit --configuration phpunit-unit.xml --no-coverage",
-        "phpunit-integration": "phpunit --configuration phpunit-integration.xml --coverage-text --colors=never",
-        "phpunit-integration-fast": "phpunit --configuration phpunit-integration.xml --no-coverage"
+        "test": "phpunit",
+        "phpcs": "phpcs"
+    },
+    "config": {
+        "allow-plugins": {
+            "dealerdirect/phpcodesniffer-composer-installer": true
+        }
     }
 }
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
new file mode 100644
index 0000000..ba9325b
--- /dev/null
+++ b/phpcs.xml.dist
@@ -0,0 +1,37 @@
+<?xml version="1.0"?>
+<ruleset name="WordPress Coding Standards for WP Desk Plugin">
+
+	<!--
+	#############################################################################
+	COMMAND LINE ARGUMENTS
+	https://github.com/squizlabs/PHP_CodeSniffer/wiki/Annotated-ruleset.xml
+	#############################################################################
+	-->
+
+	<!-- Only check PHP files. -->
+	<arg name="extensions" value="php"/>
+
+	<!-- Show progress, show the error codes for each message (source). -->
+	<arg value="sp"/>
+
+	<!-- Check up to 8 files simultaneously. -->
+	<arg name="parallel" value="8"/>
+
+	<!-- Cache outcomes for better performance. Remember to add the file to .gitignore. -->
+	<arg name="cache" value="./.phpcs-cache"/>
+
+	<!--
+	#############################################################################
+	USE THE WPDeskCS RULESET
+	#############################################################################
+	-->
+
+	<!-- This value should be aligned with WordPress support version declared in plugin header -->
+	<config name="minimum_supported_wp_version" value="6.0"/>
+
+	<!-- Set value aligned with supported PHP Version for PHPCompatibilityWP check. -->
+	<config name="testVersion" value="7.1-"/>
+
+	<rule ref="WPDeskPlugin"/>
+
+</ruleset>
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100644
index 0000000..1a6fcff
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,7 @@
+<phpunit bootstrap="vendor/autoload.php">
+    <testsuites>
+        <testsuite name="Unit Tests">
+            <directory prefix="Test" suffix=".php">./tests/</directory>
+        </testsuite>
+    </testsuites>
+</phpunit>
diff --git a/tests/unit/Renderer/TestSimplePhpRenderer.php b/tests/Renderer/TestSimplePhpRenderer.php
similarity index 100%
rename from tests/unit/Renderer/TestSimplePhpRenderer.php
rename to tests/Renderer/TestSimplePhpRenderer.php
diff --git a/tests/unit/Renderer/templates/some_template.php b/tests/Renderer/templates/some_template.php
similarity index 100%
rename from tests/unit/Renderer/templates/some_template.php
rename to tests/Renderer/templates/some_template.php
diff --git a/tests/unit/Resolver/TestChainResolver.php b/tests/Resolver/TestChainResolver.php
similarity index 95%
rename from tests/unit/Resolver/TestChainResolver.php
rename to tests/Resolver/TestChainResolver.php
index 3d5d510..0e32b1f 100644
--- a/tests/unit/Resolver/TestChainResolver.php
+++ b/tests/Resolver/TestChainResolver.php
@@ -10,12 +10,12 @@ class TestChainResolver extends \PHPUnit\Framework\TestCase
 
     const RESOLVE_METHOD_NAME = 'resolve';
 
-    public function setUp()
+    public function setUp(): void
     {
         \WP_Mock::setUp();
     }
 
-    public function tearDown()
+    public function tearDown(): void
     {
         \WP_Mock::tearDown();
     }
diff --git a/tests/unit/Resolver/TestDirResolver.php b/tests/Resolver/TestDirResolver.php
similarity index 93%
rename from tests/unit/Resolver/TestDirResolver.php
rename to tests/Resolver/TestDirResolver.php
index c8c79f3..088bc09 100644
--- a/tests/unit/Resolver/TestDirResolver.php
+++ b/tests/Resolver/TestDirResolver.php
@@ -9,12 +9,12 @@ class TestDirResolver extends \PHPUnit\Framework\TestCase
     const TEMPLATE_FILE = 'some_template.php';
     const TEMPLATE_SUBDIR = 'templates';
 
-	public function setUp()
+	public function setUp(): void
 	{
 		\WP_Mock::setUp();
 	}
 
-	public function tearDown()
+	public function tearDown(): void
 	{
 		\WP_Mock::tearDown();
 	}
diff --git a/tests/unit/Resolver/TestWpThemeResolver.php b/tests/Resolver/TestWpThemeResolver.php
similarity index 96%
rename from tests/unit/Resolver/TestWpThemeResolver.php
rename to tests/Resolver/TestWpThemeResolver.php
index 635aeeb..ab400a5 100644
--- a/tests/unit/Resolver/TestWpThemeResolver.php
+++ b/tests/Resolver/TestWpThemeResolver.php
@@ -9,7 +9,7 @@ class TestThemeResolver extends \PHPUnit\Framework\TestCase
     const TEMPLATE_FILE = 'some_template.php';
     const TEMPLATE_SUBDIR = 'templates';
 
-    public function setUp()
+    public function setUp(): void
     {
         \WP_Mock::setUp();
 
@@ -43,7 +43,7 @@ class TestThemeResolver extends \PHPUnit\Framework\TestCase
         ]);
     }
 
-    public function tearDown()
+    public function tearDown(): void
     {
         \WP_Mock::tearDown();
     }
diff --git a/tests/unit/Resolver/templates/some_template.php b/tests/Resolver/templates/some_template.php
similarity index 100%
rename from tests/unit/Resolver/templates/some_template.php
rename to tests/Resolver/templates/some_template.php
diff --git a/tests/unit/TestPluginViewBuilder.php b/tests/TestPluginViewBuilder.php
similarity index 93%
rename from tests/unit/TestPluginViewBuilder.php
rename to tests/TestPluginViewBuilder.php
index fcefdb7..6c25585 100644
--- a/tests/unit/TestPluginViewBuilder.php
+++ b/tests/TestPluginViewBuilder.php
@@ -4,7 +4,7 @@
 use WPDesk\View\PluginViewBuilder;
 
 class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase {
-	public function setUp() {
+	public function setUp(): void {
 		\WP_Mock::setUp();
 
 		\WP_Mock::userFunction('trailingslashit', [
@@ -14,7 +14,7 @@ class TestPluginViewBuilder extends \PHPUnit\Framework\TestCase {
 		]);
 	}
 
-	public function tearDown()
+	public function tearDown(): void
 	{
 		\WP_Mock::tearDown();
 	}
diff --git a/tests/integration/bootstrap.php b/tests/integration/bootstrap.php
deleted file mode 100644
index a422fd9..0000000
--- a/tests/integration/bootstrap.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-ini_set('error_reporting', E_ALL); // or error_reporting(E_ALL);
-ini_set('display_errors', '1');
-ini_set('display_startup_errors', '1');
-
-require_once __DIR__ . '/../../vendor/autoload.php';
-
-// disable xdebug backtrace
-if ( function_exists( 'xdebug_disable' ) ) {
-	xdebug_disable();
-}
-
-if ( getenv( 'PLUGIN_PATH' ) !== false ) {
-	define( 'PLUGIN_PATH', getenv( 'PLUGIN_PATH' ) );
-} else {
-	define( 'PLUGIN_PATH', __DIR__ . DIRECTORY_SEPARATOR . DIRECTORY_SEPARATOR );
-}
-
-require_once( getenv( 'WP_DEVELOP_DIR' ) . '/tests/phpunit/includes/functions.php' );
-
-tests_add_filter( 'muplugins_loaded', function () {
-}, 100 );
-
-putenv('WP_TESTS_DIR=' . getenv( 'WP_DEVELOP_DIR' ) . '/tests/phpunit');
-require_once( getenv( 'WC_DEVELOP_DIR' ) . '/tests/bootstrap.php' );
-
-do_action('plugins_loaded');
\ No newline at end of file
diff --git a/tests/unit/stub/template/file.php b/tests/stub/template/file.php
similarity index 100%
rename from tests/unit/stub/template/file.php
rename to tests/stub/template/file.php
diff --git a/tests/unit/bootstrap.php b/tests/unit/bootstrap.php
deleted file mode 100644
index 575b33b..0000000
--- a/tests/unit/bootstrap.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-/**
- * PHPUnit bootstrap file
- */
-
-require_once __DIR__ . '/../../vendor/autoload.php';
-- 
GitLab