Skip to content

Conversation

@wassimaarab
Copy link
Contributor

@wassimaarab wassimaarab commented Mar 23, 2025

Écrire les tests pour assurer le bon fonctionnement de spam_detector

Fix #6720

Contrôle qualité

  1. Créer un fichier spamdata.json contenant quelque bibliographies de spam.
  2. Lancer python3 manage.py test zds.utils.tests.tests_antispam

@wassimaarab wassimaarab changed the title Tests for spam detector Tests pour le spam_detector Mar 23, 2025
Copy link
Member

@philippemilink philippemilink left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cette PR contient les commits de la PR #6720 et ajoute des tests. Il faudrait plutôt ajouter les tests directement dans la PR initiale #6720.

Ce serait bien d'ajouter un fichier spamdata.json qui contienne les données nécessaires au fonctionnement des tests.

Comment on lines 7 to 29
"""class SpamDetectorTestCase(TestCase):

@patch('zds.utils.spam_detector.SpamDetector.send_alert') #To avoid sending the actual alert
def test_check_profile_no_bio(self, mock_send_alert):
# Create a user profile
self.user = User.objects.create_user(username="testuser1", password="password")
self.profile = Profile.objects.create(user=self.user)

self.spam_detector = SpamDetector()
#User without a biography
self.profile.biography = ""

# Appeler la méthode qui devrait vérifier la biographie de l'utilisateur
self.spam_detector.check_profile(self.profile)

# Vérifier que l'alerte n'a pas été envoyée
mock_send_alert.assert_not_called()

# Vérifier le message de log
with self.assertLogs(self.spam_detector.logger, level='INFO') as log:
self.spam_detector.check_profile(self.profile)
self.assertIn("∅ testuser has no biography", log.output)
"""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Que faire de ce code ?

Comment on lines +49 to +53
@patch("zds.utils.spam_detector.SpamDetector.send_alert")
def test_check_profile_no_bio(self, mock_send_alert):
"""User with no biography should not trigger an alert."""
self.spam_detector.check_profile(self.profile1)
mock_send_alert.assert_not_called()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dans les tests de zds-site, on utilise @patch() pour s'assurer que les signaux ont bien été émis, par exemple :

@patch("zds.tutorialv2.signals.contributors_management")

Pour tester ça, on ferait plutôt :

self.spam_detector.check_profile(self.profile1)
self.assertEqual(Alert.objects.all().count(), 0)

Copy link
Member

@philippemilink philippemilink left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comme je le disais plus haut :

Cette PR contient les commits de la PR #6720 et ajoute des tests. Il faudrait plutôt ajouter les tests directement dans la PR initiale #6720.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce qu'on a dit lors de notre dernière réunion, c'est que pour les tests il ne devrait pas y avoir besoin d'un fichier JSON avec des données, mais qu'on peut générer des fixtures avec du contenu qui est du spam, par exemple :

  1. Créer 10 profils avec une biographie qui contient du spam (phrase avec un préfixe, par exemple : factory.fuzzy.FuzzyText(prefix="spam")). Bannir ces profils
  2. Créer 10 profils avec une biographique qui ne contient pas de spam (factory.fuzzy.FuzzyText(prefix="correct"))
  3. Entraîner le modèle
  4. Créer un profil avec une biographie et spammeur et un autre profile non spammeur et tester que la prédiction du modèle est correcte.

@github-project-automation github-project-automation bot moved this to Modification demandée in Suivi des PR Dec 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Modification demandée

Development

Successfully merging this pull request may close these issues.

3 participants