"""
:synopsis: Tests pour le module requete

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

import unittest
from requete import Requete
from routeur import Routeur

str_requete = """GET /index.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_avec_params = """GET /livre:45-truc:machin 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
"""

req = Requete(str_requete)
req_avec_params = Requete(str_requete_avec_params)

def action1(req, data):
    return "id : {id} ; chose : {chose}".format(**data)

def action2(req, data):
    return "Test action2"

def default_action_test(req):
    return "Test default"

class MyTest(unittest.TestCase):
    def test1(self):
        """
        Test de la méthode trigger sur url reconnue
        """
        route = {"pattern":"/index.html", "action":action2}
        r = Routeur([route], default_action_test)
        result = r.trigger(req)
        self.assertEqual(result, "Test action2")

    def test2(self):
        """
        Test de la méthode trigger sur url pas reconnue
        """
        route = {"pattern":"/gloups.html", "action":action2}
        r = Routeur([route], default_action_test)
        result = r.trigger(req)
        self.assertEqual(result, "Test default")

    def test3(self):
        """
        Test de la méthode trigger après addroute
        """
        route = {"pattern":"/index.html", "action":action2}
        r = Routeur([], default_action_test)
        r.addRoute(route)
        result = r.trigger(req)
        self.assertEqual(result, "Test action2")

    def test4(self):
        """
        Test de la méthode trigger sur url avec params
        """
        route = {"pattern":"/livre:<id>-truc:<chose>", "action":action1}
        r = Routeur([route], default_action_test)
        result = r.trigger(req_avec_params)
        self.assertEqual(result, "id : 45 ; chose : machin")



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