From d136cb05cd06959d01bfb60eecbe3d8313346cc1 Mon Sep 17 00:00:00 2001
From: Perreal Guillaume <guillaume.perreal@irstea.fr>
Date: Wed, 10 Apr 2019 11:32:28 +0200
Subject: [PATCH] =?UTF-8?q?Installation=20et=20pr=C3=A9configuration=20de?=
 =?UTF-8?q?=20l'outillage.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitignore            |  2 ++
 .php_cs.dist          | 12 ++++++++++++
 composer.json         | 27 ++++++++++++++++++---------
 phpmd-ruleset.xml     |  9 +++++++++
 phpstan.neon          |  5 +++++
 phpunit.xml           | 22 ++++++++++++++++++++++
 src/.gitkeep          |  0
 src/MyClass.php       | 20 ++++++++++++++++++++
 tests/.gitkeep        |  0
 tests/MyClassTest.php | 22 ++++++++++++++++++++++
 10 files changed, 110 insertions(+), 9 deletions(-)
 create mode 100644 .php_cs.dist
 create mode 100644 phpmd-ruleset.xml
 create mode 100644 phpstan.neon
 create mode 100644 phpunit.xml
 delete mode 100644 src/.gitkeep
 create mode 100644 src/MyClass.php
 delete mode 100644 tests/.gitkeep
 create mode 100644 tests/MyClassTest.php

diff --git a/.gitignore b/.gitignore
index cac762f..408b1a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 /vendor/
 /.idea/
+/.php_cs*cache
+.phpunit.result.cache
diff --git a/.php_cs.dist b/.php_cs.dist
new file mode 100644
index 0000000..1cc83a0
--- /dev/null
+++ b/.php_cs.dist
@@ -0,0 +1,12 @@
+<?php
+
+$finder = PhpCsFixer\Finder::create()
+    ->exclude('vendor')
+    ->files()
+    ->name('*.php')
+    ->in('.');
+
+return Irstea\CS\Config::create()
+    ->setIndent('    ')
+    ->setLineEnding("\n")
+    ->setFinder($finder);
diff --git a/composer.json b/composer.json
index dd63782..2a023a4 100644
--- a/composer.json
+++ b/composer.json
@@ -33,12 +33,12 @@
     },
     "autoload": {
         "psr-4": {
-            "\\Irstea\\MyProject\\": "src/"
+            "Irstea\\MyProject\\": "src/"
         }
     },
     "autoload-dev": {
         "psr-4": {
-            "\\Irstea\\MyProject\\": "tests/"
+            "Irstea\\MyProject\\Tests\\": "tests/"
         }
     },
     "scripts": {
@@ -52,9 +52,10 @@
             "@test:phpcpd",
             "@test:phpmd",
             "@test:phpstan",
+            "@test:phpunit",
+            "@test:composer-validate",
             "@test:composer-require",
-            "@test:security",
-            "@test:phpunit"
+            "@test:security"
         ],
         "phploc": [
             "vendor/bin/phploc src tests"
@@ -70,10 +71,16 @@
             "vendor/bin/phpcpd --fuzzy src tests"
         ],
         "test:phpmd": [
-            "vendor/bin/phpmd src,tests text vendor/irstea/phpmd-config/strict.xml"
+            "vendor/bin/phpmd src,tests text ./phpmd-ruleset.xml"
         ],
         "test:phpstan": [
-            "vendor/bin/phpstan analyse"
+            "vendor/bin/phpstan analyse --ansi --no-progress src tests"
+        ],
+        "test:phpunit": [
+            "vendor/bin/phpunit"
+        ],
+        "test:composer-validate": [
+            "composer validate"
         ],
         "test:composer-require": [
             "vendor/bin/composer-require-checker check"
@@ -83,14 +90,16 @@
         ]
     },
     "scripts-descriptions": {
-        "test": "Exécute tous les tests en série.",
         "fix-cs": "Applique les corrections automatiques de style.",
         "phploc": "Calcule des stats sur les sources.",
+        "test": "Exécute tous les tests en série.",
         "test:lint": "Vérifie la syntaxe et le style des sources.",
         "test:phpcpd": "Détecte les blocs de code similaires.",
-        "test:phpmd": "Détecte des défauts de ",
+        "test:phpmd": "Détecte des défauts de codage.",
         "test:phpstan": "Détecte des erreurs de programmation grâce au typage.",
+        "test:phpunit": "Exécute les tests dynamiques.",
+        "test:composer-validate": "Vérifie la validité du composer.json.",
         "test:composer-require": "Vérifie que les sources n'utilise que des librairies listés dans les dépendances directes.",
-        "test:security": "Vérifie qu'aucun paquet utilisé n'ait de faille de sécurité signalée."
+        "test:securit": "Vérifie qu'aucun paquet utilisé n'ait de faille de sécurité signalée."
     }
 }
diff --git a/phpmd-ruleset.xml b/phpmd-ruleset.xml
new file mode 100644
index 0000000..96ca0fa
--- /dev/null
+++ b/phpmd-ruleset.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<ruleset name="SYGADE PHPMD rule set"
+         xmlns="http://pmd.sf.net/ruleset/1.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
+         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
+
+    <rule ref="vendor/irstea/phpmd-config/strict.xml"/>
+</ruleset>
diff --git a/phpstan.neon b/phpstan.neon
new file mode 100644
index 0000000..d1a1435
--- /dev/null
+++ b/phpstan.neon
@@ -0,0 +1,5 @@
+includes:
+    - vendor/irstea/phpstan-config/strict.neon
+    - vendor/irstea/phpstan-config/phpunit.neon
+
+
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 0000000..3f2207a
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/8.1/phpunit.xsd"
+         bootstrap="vendor/autoload.php"
+         executionOrder="depends,defects"
+         forceCoversAnnotation="true"
+         beStrictAboutCoversAnnotation="true"
+         beStrictAboutOutputDuringTests="true"
+         beStrictAboutTodoAnnotatedTests="true"
+         verbose="true">
+    <testsuites>
+        <testsuite name="default">
+            <directory suffix="Test.php">tests</directory>
+        </testsuite>
+    </testsuites>
+
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">src</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/src/.gitkeep b/src/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/src/MyClass.php b/src/MyClass.php
new file mode 100644
index 0000000..a6f6323
--- /dev/null
+++ b/src/MyClass.php
@@ -0,0 +1,20 @@
+<?php declare(strict_types=1);
+/*
+ * Create and customize a file named .docheader at the root of the project to change this message.
+ */
+
+namespace Irstea\MyProject;
+
+/**
+ * La classe MyClass.
+ */
+class MyClass
+{
+    /**
+     * @return int
+     */
+    public function getResponse(): int
+    {
+        return 42;
+    }
+}
diff --git a/tests/.gitkeep b/tests/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/tests/MyClassTest.php b/tests/MyClassTest.php
new file mode 100644
index 0000000..4b222ee
--- /dev/null
+++ b/tests/MyClassTest.php
@@ -0,0 +1,22 @@
+<?php declare(strict_types=1);
+/*
+ * Create and customize a file named .docheader at the root of the project to change this message.
+ */
+
+namespace Irstea\MyProject\Tests;
+
+use Irstea\MyProject\MyClass;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * Les tests de la classe MyClass.
+ */
+class MyClassTest extends TestCase
+{
+    public function testGetResponse(): void
+    {
+        $subject = new MyClass();
+
+        self::assertEquals(42, $subject->getResponse());
+    }
+}
-- 
GitLab