Le WordPress d'aujourd'hui, décodé pour les développeurs

Tests

Tester un mur payant de média : quota d’articles gratuits et exceptions

Vérifier par des tests automatisés le comptage d'articles gratuits par visiteur anonyme et le contournement correct pour un abonné identifié.

Par WordPress Développement • 1 mai 2024 • 4 min de lecture • Aucun commentaire
Tester un mur payant de média : quota d'articles gratuits et exceptions

Trois articles gratuits par mois, puis un mur payant : ce modèle économique simple pour un site de presse régionale cache en réalité une mécanique de comptage plus subtile qu’il n’y paraît, et donc une bonne source de bugs si elle n’est pas couverte par des tests dédiés.

Le comptage repose sur un cookie de session plutôt que sur un compte utilisateur, puisque la grande majorité des visiteurs anonymes ne créent jamais de compte avant d’être bloqués par le mur payant. Cette contrainte technique impose une suite de tests qui simule des visiteurs anonymes successifs plutôt que de se contenter de tester avec un utilisateur WordPress classique.

Simuler un visiteur anonyme qui consulte plusieurs articles

Le test de base consomme le quota gratuit en simulant trois requêtes successives vers trois articles différents, avec le même cookie de session conservé entre chaque appel, puis vérifie qu’une quatrième requête déclenche l’affichage du mur payant plutôt que le contenu complet de l’article.

$cookie_jar = array();

foreach ( array( $article_1, $article_2, $article_3 ) as $article ) {
    $response = $this->simulate_request( $article, $cookie_jar );
    $cookie_jar = $response->get_cookies();
    $this->assertStringNotContainsString( 'mur-payant', $response->get_body() );
}

$response_bloquee = $this->simulate_request( $article_4, $cookie_jar );
$this->assertStringContainsString( 'mur-payant', $response_bloquee->get_body() );

Ce test paraît simple mais a révélé un premier bug lors de sa mise en place : le compteur ne se décrémentait pas correctement si l’article consulté était déjà en cache de page complète, un cas fréquent sur les articles les plus populaires du site.

Vérifier le contournement pour un abonné identifié

L'essentiel à retenir : Compter les vues par cookie sans dépendre d'un compte utilisateur ; Vérifier le contournement pour un abonné identifié ; Couvrir les cas limites de navigation privée

Un abonné connecté avec un rôle WordPress spécifique (abonne_premium) doit contourner totalement le comptage, quel que soit le nombre d’articles déjà consultés en tant que visiteur anonyme sur le même navigateur. Le test vérifie ce cas en connectant un utilisateur du bon rôle après avoir déjà consommé le quota gratuit anonyme, puis en confirmant l’accès complet à un cinquième article.

  • Un abonné premium accède à un article même après épuisement du quota anonyme
  • Un utilisateur du rôle redacteur (interne à la rédaction) accède toujours sans compteur
  • Un abonné dont l’abonnement a expiré retombe dans le comptage classique

Ce dernier cas, l’abonnement expiré, s’est révélé être le plus fragile en pratique : la vérification du statut d’abonnement dépendait d’une métadonnée utilisateur synchronisée avec le prestataire de paiement, et un délai de synchronisation pouvait laisser un accès premium actif quelques minutes après l’expiration réelle.

Le cas de la navigation privée

La navigation privée supprime les cookies à la fermeture de la fenêtre, ce qui permet en théorie à un visiteur de contourner le quota en ouvrant une nouvelle fenêtre privée à chaque article. Ce comportement, techniquement impossible à empêcher uniquement par cookie, a été accepté comme limite connue plutôt que combattu à grand coût technique : la suite de tests documente ce cas comme non couvert plutôt que de prétendre le résoudre.

Couvrir le cas des robots d’indexation

Un mur payant mal configuré peut bloquer aussi les robots des moteurs de recherche, ce qui nuit gravement au référencement du site. Le test vérifie que les user-agents connus de Googlebot et Bingbot ne déclenchent jamais le mur payant, conformément aux recommandations de Google sur le contenu réservé aux abonnés (balisage isAccessibleForFree en JSON-LD).

$this->assertStringNotContainsString(
    'mur-payant',
    $this->simulate_request_as_bot( $article_4, 'Googlebot' )->get_body()
);

Automatiser la reprogrammation du quota mensuel

Le quota se réinitialise le premier jour de chaque mois civil, un comportement testé en manipulant explicitement la date système avec la bibliothèque uopz plutôt qu’en attendant réellement le changement de mois pour valider ce comportement en environnement de test continu.

Un mur payant qui bloque un robot d’indexation ou un abonné légitime coûte bien plus cher, en trafic ou en image, qu’un visiteur anonyme qui contourne le quota par navigation privée.

En résumé

Cette suite de tests ne couvre volontairement pas l’intégration Stripe des abonnements elle-même, gérée par une suite distincte côté paiement. Elle se concentre sur la logique de comptage et de contournement, qui reste le cœur métier du mur payant et la source la plus fréquente de bugs silencieux constatés sur ce type de projet éditorial.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi