"""
:synopsis: Tests pour le module html

python -m unittest -v autotest.py
"""

import unittest
from html import Html

str_requete_1 = """GET /dossier/sousdossier/test.html HTTP/1.1
Host: localhost:80
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1000000
"""

str_requete_2 = """POST /dossier/sousdossier/test.html HTTP/1.1
Host: localhost:80
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

x=17&monttexte=blablabla
"""

# chargement du fichier index.html
f = open('www/index.html', 'r', encoding='utf8')
index_html = f.read()
f.close()

# chargement du fichier 404.html
f = open('www/404.html', 'r', encoding='utf8')
_404_html = f.read()
f.close()


class MyTest(unittest.TestCase):
    def test1(self):
        """
        Test d'un fichier inexistant
        """
        html = Html(filename = 'inexistant.html')
        self.assertEqual(html.error_code, 404)
        self.assertEqual(html.entete(), "HTTP/1.1 404 Not Found\r\nhost: le site local\r\nContent-Type: text/html\r\n\r\n")
        self.assertEqual(html.content, _404_html)

    def test2(self):
        """
        Test d'un fichier existant
        """
        html = Html(filename = 'index.html')
        self.assertEqual(html.error_code, 200)
        self.assertEqual(html.entete(), "HTTP/1.1 200 OK\r\nhost: le site local\r\nContent-Type: text/html\r\n\r\n")
        self.assertEqual(html.content, index_html)

    def test3(self):
        """
        Test avec une erreur
        """
        html = Html(error_code = 501)
        self.assertEqual(html.error_code, 501)
        self.assertEqual(html.entete(), "HTTP/1.1 501 Not Implemented\r\nhost: le site local\r\nContent-Type: text/html\r\n\r\n")
        # page par défaut
        self.assertEqual(html.content, "<!DOCTYPE html PUBLIC><html><head><meta charset="UTF-8"></head><body>Erreur 501 : Erreur sur le serveur.</body></html>")

    def test4(self):
        """
        Test avec un content
        """
        html = Html(content = 'tralala')
        self.assertEqual(html.error_code, 200)
        self.assertEqual(html.entete(), "HTTP/1.1 200 OK\r\nhost: le site local\r\nContent-Type: text/html\r\n\r\n")
        # page par défaut
        self.assertEqual(html.content, 'tralala')

    def test5(self):
        """
        Test de is_html
        """
        html = Html(filename = '') # peu importe ce que l'on met dedans, il faut juste une instance
        self.assertTrue(html.is_html('index.html'))
        self.assertFalse(html.is_html('image.jpg'))


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