Skip to content

Commit e7da635

Browse files
committed
Re-run tests
1 parent a9ed690 commit e7da635

File tree

13 files changed

+402
-352
lines changed

13 files changed

+402
-352
lines changed

.github/workflows/phpunit.yaml

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
name: Tests
2+
3+
on:
4+
push:
5+
pull_request:
6+
branches:
7+
- 'master'
8+
- 'beta'
9+
- 'alpha'
10+
11+
permissions:
12+
contents: read
13+
14+
jobs:
15+
phpunit:
16+
name: PHP Unit
17+
runs-on: ubuntu-latest
18+
strategy:
19+
matrix:
20+
php-version: ['7.4', '8.2']
21+
services:
22+
mariadb:
23+
image: mariadb:10.6
24+
env:
25+
MYSQL_ROOT_PASSWORD: root
26+
ports:
27+
- 3306:3306
28+
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
29+
steps:
30+
- uses: actions/checkout@v4
31+
- name: Setup PHP
32+
uses: shivammathur/setup-php@v2
33+
with:
34+
php-version: '${{ matrix.php-version }}'
35+
extensions: json pdo_mysql curl gd imap xml opcache soap xml zip ssh2 mbstring ldap yaml snmp pcov
36+
coverage: none
37+
38+
- name: Install dependencies
39+
run: composer install --prefer-dist --no-progress --optimize-autoloader
40+
41+
# Download PHPUnit
42+
- name: Download PHPUnit
43+
run: wget -O phpunit.phar https://phar.phpunit.de/phpunit-9.phar && chmod +x phpunit.phar
44+
45+
# Setup cache directory
46+
- name: Setup cache directory
47+
run: |
48+
mkdir -p /tmp/jeedom/cache
49+
chmod 774 /tmp/jeedom
50+
chmod 774 /tmp/jeedom/cache
51+
52+
# Initialize configuration
53+
- name: Initialize configuration
54+
run: |
55+
cp core/config/common.config.sample.php core/config/common.config.php
56+
sed -i 's/#HOST#/127.0.0.1/g' core/config/common.config.php
57+
sed -i 's/#PORT#/3306/g' core/config/common.config.php
58+
sed -i 's/#DBNAME#/jeedom/g' core/config/common.config.php
59+
sed -i 's/#USERNAME#/root/g' core/config/common.config.php
60+
sed -i 's/#PASSWORD#/root/g' core/config/common.config.php
61+
62+
# Run Legacy test suite
63+
- name: Run legacy test suite
64+
env:
65+
DATABASE_DSN: mysql://root:root@localhost:3306/jeedom_test
66+
run: ./phpunit.phar --coverage-text --colors=never --testsuite "Legacy tests"

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,6 @@ tmp/*
4747
.env
4848
.phpstan.cache
4949
phpstan.phar
50+
51+
phpunit.phar
52+
.phpunit.result.cache

docs/fr_FR/unit-tests/phpunit.md

Lines changed: 247 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,247 @@
1+
# Tests unitaires avec PHPUnit
2+
3+
## Installation
4+
5+
### Pré-requis
6+
7+
- PHP 7.4 ou supérieur
8+
- MySQL/MariaDB configuré et fonctionnel
9+
- Composer installé
10+
11+
### 1. Télécharger PHPUnit
12+
13+
```bash
14+
wget -O phpunit.phar https://phar.phpunit.de/phpunit-9.phar
15+
chmod +x phpunit.phar
16+
```
17+
18+
### 2. Mettre à jour les dépendances
19+
20+
```bash
21+
composer update --ignore-platform-reqs
22+
```
23+
24+
### 3. Configuration
25+
26+
Copier le fichier de configuration d'exemple et l'adapter :
27+
28+
```bash
29+
cp core/config/common.config.sample.php core/config/common.config.php
30+
```
31+
32+
Modifier le fichier `core/config/common.config.php` avec vos paramètres de base de données :
33+
34+
```php
35+
<?php
36+
define('DEBUG', 1);
37+
38+
global $CONFIG;
39+
$CONFIG = [
40+
'db' => [
41+
'host' => '127.0.0.1',
42+
'port' => '3306',
43+
'dbname' => 'jeedom', // Le bootstrap ajoutera '_test'
44+
'username' => 'root',
45+
'password' => 'root',
46+
],
47+
];
48+
```
49+
50+
### 4. Configuration du cache (optionnel)
51+
52+
Pour éviter les problèmes de permissions avec le FileCache, créer le répertoire de cache :
53+
54+
```bash
55+
sudo mkdir -p /tmp/jeedom/cache
56+
sudo chmod 774 /tmp/jeedom
57+
sudo chmod 774 /tmp/jeedom/cache
58+
sudo chown -R $USER:$USER /tmp/jeedom
59+
```
60+
61+
**Note :** Le fichier `tests/bootstrap.php` se charge automatiquement de :
62+
- Ajouter le suffixe `_test` au nom de la base de données
63+
- Créer/recréer la base de données de test
64+
- Initialiser le schéma de base de données
65+
- Créer un utilisateur admin par défaut
66+
67+
## Utilisation
68+
69+
### Exécuter tous les tests
70+
71+
```bash
72+
# Exécuter tous les tests
73+
./phpunit.phar
74+
75+
# Ou avec plus de détails
76+
./phpunit.phar --coverage-text --colors=never
77+
```
78+
79+
### Exécuter une suite de tests spécifique
80+
81+
```bash
82+
# Exécuter seulement les tests legacy
83+
./phpunit.phar --testsuite "Legacy tests"
84+
```
85+
86+
### Exécuter un test spécifique
87+
88+
```bash
89+
# Exécuter un fichier de test particulier
90+
./phpunit.phar tests/configTest.php
91+
92+
# Exécuter une méthode de test spécifique
93+
./phpunit.phar tests/configTest.php::testMethod
94+
```
95+
96+
### Exécuter les tests d'un dossier
97+
98+
```bash
99+
# Tests des classes
100+
./phpunit.phar tests/class/
101+
102+
# Tests des utilitaires PHP
103+
./phpunit.phar tests/php/
104+
```
105+
106+
## Structure des tests
107+
108+
Les tests sont organisés comme suit :
109+
110+
```
111+
tests/
112+
├── bootstrap.php # Configuration d'amorçage des tests
113+
├── cacheTest.php # Tests du système de cache
114+
├── configTest.php # Tests de configuration
115+
├── cronTest.php # Tests des tâches cron
116+
├── logTest.php # Tests des logs
117+
├── pluginTest.php # Tests des plugins
118+
├── scenarioExpressionTest.php # Tests des expressions de scénarios
119+
├── userTest.php # Tests des utilisateurs
120+
├── class/ # Tests des classes principales
121+
│ ├── ajaxTest.php
122+
│ └── scenarioTest.php
123+
├── com/ # Tests des communications
124+
│ └── shellTest.php
125+
└── php/ # Tests des utilitaires PHP
126+
└── utilsTest.php
127+
```
128+
129+
## Configuration PHPUnit
130+
131+
Le fichier `phpunit.xml.dist` contient la configuration des tests :
132+
133+
```xml
134+
<phpunit bootstrap="./tests/bootstrap.php" colors="true">
135+
<testsuites>
136+
<testsuite name="Legacy tests">
137+
<directory suffix="Test.php">./tests</directory>
138+
</testsuite>
139+
</testsuites>
140+
141+
<coverage processUncoveredFiles="true">
142+
<include>
143+
<directory suffix=".php">core/class</directory>
144+
</include>
145+
</coverage>
146+
</phpunit>
147+
```
148+
149+
## Conseils de développement
150+
151+
### Créer un nouveau test
152+
153+
1. Créer un fichier `*Test.php` dans le dossier approprié
154+
2. Étendre la classe `PHPUnit\Framework\TestCase`
155+
3. Nommer les méthodes de test avec le préfixe `test`
156+
157+
Exemple :
158+
159+
```php
160+
<?php
161+
162+
use PHPUnit\Framework\TestCase;
163+
164+
class MonNouveauTest extends TestCase
165+
{
166+
public function testMonTest()
167+
{
168+
$this->assertTrue(true);
169+
}
170+
}
171+
```
172+
173+
### Debugging
174+
175+
Pour déboguer vos tests :
176+
177+
```bash
178+
# Afficher plus de détails
179+
./phpunit.phar --verbose
180+
181+
# Arrêter au premier échec
182+
./phpunit.phar --stop-on-failure
183+
```
184+
185+
### Couverture de code
186+
187+
Pour générer un rapport de couverture de code :
188+
189+
```bash
190+
# Rapport texte
191+
./phpunit.phar --coverage-text
192+
193+
# Rapport HTML (nécessite l'extension xdebug ou pcov)
194+
./phpunit.phar --coverage-html coverage/
195+
```
196+
197+
## GitHub Actions
198+
199+
Les tests sont automatiquement exécutés via GitHub Actions sur :
200+
- Push sur toutes les branches
201+
- Pull requests vers `master`, `beta`, et `alpha`
202+
- Matrice de tests : PHP 7.4 et 8.2
203+
204+
Le workflow télécharge automatiquement PHPUnit, initialise la configuration et configure les répertoires de cache nécessaires.
205+
206+
## Informations techniques
207+
208+
### Bootstrap des tests
209+
210+
Le fichier `tests/bootstrap.php` effectue automatiquement :
211+
212+
1. **Configuration de la base de données** :
213+
- Ajout du suffixe `_test` au nom de la base
214+
- Suppression/recréation de la base de test
215+
- Attribution des privilèges
216+
217+
2. **Initialisation du schéma** :
218+
- Exécution du script `install/database.php`
219+
- Création des tables nécessaires
220+
221+
3. **Utilisateur par défaut** :
222+
- Création d'un utilisateur admin (login: `admin`, mot de passe: `admin`)
223+
224+
4. **Configuration système** :
225+
- Génération d'une clé API
226+
- Chargement des classes core
227+
228+
### Système de cache
229+
230+
Jeedom utilise un système de cache FileCache qui stocke les données dans `/tmp/jeedom/cache`. Si vous rencontrez des erreurs liées au cache, assurez-vous que :
231+
232+
- Le répertoire `/tmp/jeedom/cache` existe
233+
- L'utilisateur a les permissions d'écriture (774 recommandé)
234+
- Le répertoire parent `/tmp/jeedom` est accessible
235+
236+
### Résolution des problèmes courants
237+
238+
**Erreur de connexion à la base de données :**
239+
- Vérifiez que MySQL/MariaDB est démarré
240+
- Vérifiez les paramètres dans `core/config/common.config.php`
241+
242+
**Erreur de cache :**
243+
- Créez le répertoire de cache avec les bonnes permissions (voir section 4)
244+
245+
**Tests qui échouent :**
246+
- Exécutez avec `--verbose` pour plus de détails
247+
- Vérifiez les logs dans le répertoire `log/`

phpunit.xml.dist

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
1-
<phpunit bootstrap="./tests/bootstrap.php" colors="true">
2-
<testsuite>
3-
<directory suffix="Test.php">./tests</directory>
4-
</testsuite>
1+
<phpunit
2+
bootstrap="./tests/bootstrap.php"
3+
colors="true"
4+
>
5+
<testsuites>
6+
<testsuite name="Legacy tests">
7+
<directory suffix="Test.php">./tests</directory>
8+
</testsuite>
9+
</testsuites>
10+
11+
<coverage processUncoveredFiles="true">
12+
<include>
13+
<directory suffix=".php">core/class</directory>
14+
</include>
15+
</coverage>
516
</phpunit>

tests/bootstrap.php

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,36 @@
11
<?php
2-
require_once __DIR__ . "/../core/php/core.inc.php";
3-
echo "\nCommence le test Jeedom\n";
4-
?>
2+
3+
require_once dirname(__DIR__) . '/core/config/common.config.php';
4+
global $CONFIG;
5+
6+
$CONFIG['db']['dbname'] .= '_test';
7+
8+
$connection = new PDO(sprintf('mysql:host=%s;port=%u;charset=utf8', $CONFIG['db']['host'], $CONFIG['db']['port']), $CONFIG['db']['username'], $CONFIG['db']['password']);
9+
$connection->query('DROP DATABASE IF EXISTS ' . $CONFIG['db']['dbname']);
10+
$connection->query('CREATE DATABASE '.$CONFIG['db']['dbname']);
11+
$connection->query('GRANT ALL PRIVILEGES ON '.$CONFIG['db']['dbname'].'.* TO "'.$CONFIG['db']['username'].'"@"%" IDENTIFIED BY "'.$CONFIG['db']['password'].'"');
12+
$connection->query('FLUSH PRIVILEGES');
13+
14+
ob_start();
15+
require_once dirname(__DIR__).'/install/database.php';
16+
17+
require_once dirname(__DIR__).'/core/class/config.class.php';
18+
config::save('api', config::genKey());
19+
20+
$user = new user();
21+
$user->setLogin('admin');
22+
$user->setPassword(sha512('admin'));
23+
$user->setProfils('admin');
24+
$user->save();
25+
26+
ob_end_clean();
27+
28+
require_once dirname(__DIR__).'/core/php/core.inc.php';
29+
30+
function dd(...$vars)
31+
{
32+
foreach ($vars as $var) {
33+
var_dump($var);
34+
}
35+
exit;
36+
}

0 commit comments

Comments
 (0)