IIC2233 / Syllabus-2024-1

79 stars 10 forks source link

Test privados AC05 erroneos #623

Open waknaudt opened 2 months ago

waknaudt commented 2 months ago

Hola, al ejecutar test_AC05.py me sale el siguiente error:
import api_privado ModuleNotFoundError: No module named 'api_privado'

cataconi commented 2 months ago

Holaa, mil disculpas, se nos pasó agregar ese archivo, pero ya esta todo subido✨.

cataconi commented 2 months ago

Link: https://drive.google.com/file/d/1Hzl94Npn9JLvwiJZg4yA0NDK0nqyPTgk/view?usp=drive_link

waknaudt commented 2 months ago

Hola, despues de revisar los tests privados creo que estos siguen teniendo errores. En api_privado.py, se ve lo siguiente en lineas desde 173 a 221:

@endpoint("/update", "POST")
    def update_signo_post(self, params, body, *args, **kwargs):
        response = {"result": ""}
        if "signo" not in body or "mensaje" not in body:
            response["result"] = "Falta información en la consulta"
            return response, BAD

        # Recardar que siempre el "valor" del diccionario será una lista
        # aunque sea de 1 elemento.
        mensaje = body["mensaje"][0]
        signo = body["signo"][0]

        if len(mensaje) < 5:
            response["result"] = "El mensaje debe tener más de 4 caracteres"
            return response, BAD

        if signo not in self.database:
            self.database[signo] = mensaje
            response["signos"] = list(self.database.keys())
            response["result"] = "Información agregada con éxito"
            return response, OK

        response["result"] = "El signo ya existe, no puedes modificarlo"
        return response, BAD

    @endpoint("/update", "PUT")
    def update_signo_put(self, params, body, *args, **kwargs):
        response = {"result": ""}

        if "signo" not in body or "mensaje" not in body:
            response["result"] = "Falta información en la consulta"
            return response, BAD

        # Recardar que siempre el "valor" del diccionario será una lista
        # aunque sea de 1 elemento.
        mensaje = body["mensaje"][0]
        signo = body["signo"][0]

        if len(mensaje) < 5:
            response["result"] = "El mensaje debe tener más de 4 caracteres"
            return response, BAD

        if signo not in self.database:
            response["result"] = "El signo no existe."
            return response, BAD

        self.database[signo] = mensaje
        response["result"] = "Información actualizada con éxito"
        return response, OK

Como se puede ver en los @endpoint, estos solo aceptan POST o PUT en /update. Sin embargo, en el enunciado dice lo siguiente:

def actualizar_horoscopo(self, signo: str, mensaje: str, access_token: str) -> str: Recibe un signo del horóscopo, un mensaje y token de acceso de YolandAPI. Con estos datos, deberás realizar una request de tipo PATCH a la ruta f"{self.base}/update", para modificar el mensaje asociado a un signo en la base de datos de YolandAPI...

Es decir, el enunciado dice que la request debe ser tipo PATCH, no POST ni PUT. Los test privados esperan requests del tipo POST o PUT, contradiciendo el enunciado. Si se cambia @endpoint("/update", "PUT") por @endpoint("/update", "PATCH") en api_privado.py, los 3 errores que me enviaron en el feedback desaparecen y corre todo sin errores.