Mentorat docstring sur les mocks

Introduction to Wagtail

Wagtail is a powerful, open-source content management system built on Django.

Installing Wagtail

What is Wagtail?

Follow the official documentation for easy installation and setup.

Wagtail Admin Interface

The admin interface is intuitive, making content management simple and efficient.

Creating Pages

Learn how to create and manage different page types in Wagtail.

Customizing Wagtail

Explore how to customize themes and templates for your Wagtail site.

Wagtail Community

Join the Wagtail community for support, resources, and collaboration.

Mentorat docstring sur les mocks

Exemple requests

import unittest
from unittest.mock import patch, Mock
from bs4 import BeautifulSoup

# Importer les fonctions à tester depuis le fichier original (à adapter selon l'organisation du projet)
# from your_module import extract_titles_from_html, get_next_page_url, get_all_titles

class TestScraperFunctions(unittest.TestCase):
    
    def setUp(self):
        # Exemple de contenu HTML d'une page avec des articles et une pagination
        self.sample_html_with_articles = '''
        <div class="colonneActu">
            <article class="col1">
                <a class="titre" href="/actu/123">Titre 1</a>
            </article>
            <article class="col2">
                <a class="titre" href="/actu/456">Titre 2</a>
            </article>
        </div>
        <div class="pagination">
            <a href="/page/2" title="Page suivante"><i class="fas fa-angle-right"></i></a>
        </div>
        '''
        
        self.sample_html_no_next_page = '''
        <div class="colonneActu">
            <article class="col1">
                <a class="titre" href="/actu/789">Titre 3</a>
            </article>
        </div>
        <div class="pagination">
            <!-- No next page -->
        </div>
        '''
        
        self.empty_html = '''
        <div class="colonneActu"></div>
        <div class="pagination"></div>
        '''
    
    def test_extract_titles_from_html(self):
        # Test pour s'assurer que les titres sont correctement extraits
        titles = extract_titles_from_html(self.sample_html_with_articles)
        self.assertEqual(titles, ["Titre 1", "Titre 2"])

        # Test avec du HTML vide (pas d'articles)
        titles = extract_titles_from_html(self.empty_html)
        self.assertEqual(titles, [])

    def test_get_next_page_url(self):
        # Test pour s'assurer que l'URL de la page suivante est correctement extraite
        next_page_url = get_next_page_url(self.sample_html_with_articles)
        self.assertEqual(next_page_url, "/page/2")

        # Test avec du HTML sans page suivante
        next_page_url = get_next_page_url(self.sample_html_no_next_page)
        self.assertIsNone(next_page_url)

    @patch('requests.get')
    def test_get_all_titles(self, mock_get):
        # Préparer une réponse fictive pour le premier appel
        mock_response_page_1 = Mock()
        mock_response_page_1.status_code = 200
        mock_response_page_1.content = self.sample_html_with_articles
        
        # Préparer une réponse fictive pour le deuxième appel (dernière page)
        mock_response_page_2 = Mock()
        mock_response_page_2.status_code = 200
        mock_response_page_2.content = self.sample_html_no_next_page
        
        # Mock la réponse de `requests.get` pour retourner ces objets
        mock_get.side_effect = [mock_response_page_1, mock_response_page_2]
        
        # Tester que la fonction récupère bien tous les titres sur plusieurs pages
        titles = get_all_titles()
        self.assertEqual(titles, ["Titre 1", "Titre 2", "Titre 3"])

    @patch('requests.get')
    def test_get_all_titles_with_network_error(self, mock_get):
        # Simuler une erreur de réseau
        mock_get.side_effect = RequestException("Network error")
        
        # Tester que la fonction gère correctement l'erreur réseau
        titles = get_all_titles()
        self.assertEqual(titles, [])  # La fonction doit retourner une liste vide en cas d'erreur

    @patch('requests.get')
    def test_get_all_titles_with_http_error(self, mock_get):
        # Simuler un code de réponse HTTP 500
        mock_response = Mock()
        mock_response.status_code = 500
        mock_get.return_value = mock_response
        
        # Tester que la fonction gère correctement une réponse HTTP non 200
        titles = get_all_titles()
        self.assertEqual(titles, [])  # La fonction doit retourner une liste vide en cas d'erreur HTTP


if __name__ == '__main__':
    unittest.main()