# Tester une extension sur trois versions majeures de WooCommerce en CI

> Vos clients ne mettent pas tous à jour WooCommerce en même temps. Une matrice CI qui télécharge et installe plusieurs versions à la volée évite les mauvaises surprises.

- Auteur : Clément Hadrot
- Publié le : 2023-05-27
- Mis à jour le : 2023-05-27
- Catégorie : Tests
- URL : https://wpmoderne.dev.wordpress-developpement.fr/tests/tester-extension-trois-versions-woocommerce-ci/

## L’essentiel

- Télécharger plusieurs versions de WooCommerce à la volée dans le pipeline
- Isoler les tests spécifiques à une version dans des groupes dédiés
- Documenter la version minimale supportée dans l'en-tête du plugin

Une extension de gestion des retours produits que nous distribuons à plusieurs clients a cassé chez l'un d'entre eux resté volontairement sur une version de WooCommerce vieille de huit mois, le temps de finaliser une migration d'hébergement. La suite de tests du projet, exécutée uniquement contre la dernière version stable de WooCommerce, n'avait jamais détecté qu'une fonction interne utilisée par l'extension avait changé de signature entre-temps. Le client a découvert le problème en production, sur un parcours de remboursement.

Ce type d'incident se prévient en testant systématiquement l'extension contre plusieurs versions majeures de WooCommerce représentatives de la base installée réelle des clients, pas seulement contre la dernière version disponible au moment du développement.

## Choisir les versions à couvrir

Trois versions suffisent généralement à couvrir un risque raisonnable : la dernière version stable, une version intermédiaire sortie environ six mois plus tôt, et la version minimale annoncée comme supportée dans l'en-tête du plugin (`WC requires at least`). Couvrir davantage de versions allonge le temps de pipeline sans bénéfice proportionnel, sauf pour une extension très largement distribuée avec un support à très long terme.

## Télécharger WooCommerce à la volée dans le pipeline

Plutôt que de committer plusieurs copies de WooCommerce dans le dépôt, le pipeline télécharge chaque version testée depuis le dépôt SVN officiel des extensions WordPress, à l'aide de WP-CLI :

```
name: Compatibilite WooCommerce

on: [pull_request]

jobs:
  tester-matrice:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        woocommerce-version: ['8.0.0', '7.5.0', '6.9.0']
    steps:
      - uses: actions/checkout@v4
      - uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
      - run: composer install
      - name: Installer WordPress et WooCommerce ${{ matrix.woocommerce-version }}
        run: |
          bash bin/install-wp-tests.sh wordpress_test root '' localhost latest
          wp plugin install woocommerce --version=${{ matrix.woocommerce-version }} --force
      - run: phpunit
```

> L'essentiel à retenir : Télécharger plusieurs versions de WooCommerce à la volée dans le pipeline ; Isoler les tests spécifiques à une version dans des groupes dédiés ; Documenter la version minimale supportée dans l'en-tête du plugin

Le mot-clé `matrix` fait exécuter le job une fois par version listée, chacune isolée dans son propre environnement, avec un rapport distinct par version dans l'interface du pipeline.

## Isoler les tests spécifiques à une version

Certains comportements ne s'appliquent qu'à partir d'une version donnée — par exemple, l'API de blocs de paiement introduite progressivement dans WooCommerce. Ces tests doivent être explicitement ignorés sur les versions antérieures, plutôt que de faire échouer artificiellement la matrice sur une fonctionnalité qui n'existe pas encore :

```
public function test_bloc_paiement_personnalise_enregistre(): void {
    if (version_compare(WC()->version, '7.0.0', '
```

## Documenter la matrice testée, pas seulement l'appliquer

Une matrice de compatibilité qui existe uniquement dans la configuration du pipeline reste invisible pour un client ou un collègue qui consulte la documentation du plugin. La liste des versions réellement testées mérite d'être répercutée dans l'en-tête du plugin et dans son changelog, avec une cohérence stricte entre les deux :

```
/**
 * Plugin Name: Gestion des retours produits
 * Requires Plugins: woocommerce
 * WC requires at least: 6.9
 * WC tested up to: 8.0
 */
```

## Limites de cette approche

- Une matrice de versions WooCommerce ne couvre pas les combinaisons avec différentes versions de PHP ou de WordPress lui-même — un croisement plus large déjà traité séparément, à envisager uniquement si la base de clients le justifie réellement.
- Télécharger plusieurs versions à chaque exécution de pipeline allonge le temps total ; un cache des archives WooCommerce déjà téléchargées entre exécutions réduit sensiblement ce coût.
- Une version de WooCommerce sortie depuis plus de deux ans ne devrait généralement plus figurer dans la matrice active, sauf engagement contractuel explicite avec un client sur une version figée.

> Une extension d'agence vit rarement dans un seul environnement figé : elle vit chez plusieurs clients, à des rythmes de mise à jour différents, et la matrice de compatibilité est la seule façon honnête de garantir ce qu'on annonce vraiment supporter.

## En résumé

Tester contre une seule version de WooCommerce — la plus récente — donne une fausse impression de sécurité dès qu'une extension est distribuée à plusieurs clients aux rythmes de mise à jour hétérogènes. Une matrice de trois versions représentatives, alimentée par un téléchargement à la volée dans le pipeline, aurait intercepté l'incident du parcours de remboursement avant qu'il n'atteigne la production d'un client.
