"""
:synopsis: Tests pour le module requete

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

import unittest
from requete import Requete

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
"""



class MyTest(unittest.TestCase):
    def test1(self):
        """
        Test de la méthode url
        """
        req1 = Requete(str_requete_1)
        url1 = req1.url()
        self.assertEqual(url1, "/dossier/sousdossier/test.html")
        req2 = Requete(str_requete_2)
        url2 = req1.url()
        self.assertEqual(url2, "/dossier/sousdossier/test.html")

    def test2(self):
        """
        Test de la méthode is_GET
        """
        req1 = Requete(str_requete_1)
        self.assertTrue(req1.is_GET())
        req2 = Requete(str_requete_2)
        self.assertFalse(req2.is_GET())

    def test3(self):
        """
        Test de la méthode is_POST
        """
        req1 = Requete(str_requete_1)
        self.assertFalse(req1.is_POST())
        req2 = Requete(str_requete_2)
        self.assertTrue(req2.is_POST())

    def test4(self):
        """
        Test de la méthode post_params avec GET
        """
        req1 = Requete(str_requete_1)
        with self.assertRaises(AssertionError) as cm:
            req1.post_params()
        the_exception = cm.exception
        self.assertEqual(str(the_exception), "La méthode nécessite une requête POST")

    def test5(self):
        """
        Test de la méthode post_params
        """
        req2 = Requete(str_requete_2)
        p = req2.post_params()
        self.assertDictEqual(p, {"x":"17", "monttexte":"blablabla"})

    def test6(self):
        """
        Test du pattern %nom%.html sur req1
        """
        req1 = Requete(str_requete_1)
        pattern = "<nom>.html"
        m = req1.match(pattern)
        self.assertDictEqual(m, {"nom":"/dossier/sousdossier/test"})

    def test7(self):
        """
        Test du pattern %nom%.jpg sur req1
        """
        req1 = Requete(str_requete_1)
        pattern = "<nom>.jpg"
        m = req1.match(pattern)
        self.assertEqual(m, None)



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