Пример #1
0
def test_controller_get_valid_mesociclo(db, client, token):
    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)

    # Act
    mesociclo = client.get(
        f"/api/usuarios/{1}/mesociclos?activo=False",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    # Assert
    assert mesociclo[0]["idMesociclo"] == 1
    assert mesociclo[0]["usuario"]["username"] == "usuarioprueba"
    assert mesociclo[0]["estado"]["descripcion"] == "Activo"
    assert mesociclo[0]["objetivo"][
        "descripcion"] == "Acondicionamiento General"
    assert mesociclo[0]["organizacion"]["idOrganizacion"] == 1
    assert mesociclo[0]["principalTrenInferior"][
        "nombre"] == "Bulgarian Squats"
    assert mesociclo[0]["semanasPorMesociclo"] == 4
    assert len(mesociclo[0]["sesiones"]) == 2
Пример #2
0
def test_controller_update_ejercicio(db, client, token):
    create_usuario_db(db)
    # Arrange
    id_ejercicio_a_updatear = 1
    ejercicio_body = {
        "idEjercicio": id_ejercicio_a_updatear,
        "nombre": "Prueba Push Ups",
        "patron": {
            "idPatron": 3
        },  ## Cambio patron a Zona Media
        "urlVideo": "https://prueba.com/prueba",
        "pesoInicial": 15,
        "esTemporal": 1,
    }

    # Act
    rv = client.put(
        f"/api/ejercicios/{str(id_ejercicio_a_updatear)}",
        json=ejercicio_body,
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    ejercicio = Ejercicio.query.get(1)

    # Assert
    assert ejercicio.nombre == "Prueba Push Ups"
    assert ejercicio.patron.nombre == "Zona Media"
    assert ejercicio.url_video == "https://prueba.com/prueba"
    assert ejercicio.peso_inicial == 15
    assert ejercicio.es_temporal == 1
def test_controller_update_valid_mesociclo(db, client, token):
    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)

    id_mesociclo = 1

    mesociclo_data = {
        "idMesociclo": 1,
        "usuario": {"idUsuario": 1},
        "estado": {"idEstadoMesociclo": 3, "descripcion":""},  ## Cambio estado de pendiente a terminado
        "objetivo": {"idObjetivo": 3},  ## Cambio objetivo de Acondicionamiento a Fuerza
        "principalTrenSuperior": {"idEjercicio": 2},
        "principalTrenInferior": {"idEjercicio": 5},
        "fechaFinReal": str(datetime.utcnow()),
        "aumentoMotivacion": "True",
        "masCercaObjetivos": "False",
        "sentimiento": 2,
        "durmiendo": 3,
        "alimentado": 4,
    }

    # Act
    response = client.put(
        f"/api/mesociclos/{id_mesociclo}",
        json=mesociclo_data,
        follow_redirects=True,
        headers={"Authorization": f"Bearer {token}"},
    ).get_json()

    # Assert
    mesociclo = Mesociclo.query.first()

    assert mesociclo.id_mesociclo == 1
    assert mesociclo.usuario.username == "usuarioprueba"
    assert mesociclo.estado.descripcion == "Cancelado"
    assert mesociclo.objetivo.descripcion == "Fuerza"
    assert mesociclo.organizacion.descripcion == "Full Body"
    assert mesociclo.principal_tren_superior.nombre == "Diamond Push-ups"
    assert mesociclo.principal_tren_inferior.nombre == "Bulgarian Squats"
    assert mesociclo.semanas_por_mesociclo == 4
    assert len(mesociclo.sesiones) == 2
    assert len(mesociclo.sesiones[0].bloques) == 2
    assert len(mesociclo.sesiones[0].bloques[0].ejercicios) == 3
    assert (
        mesociclo.sesiones[0].bloques[0].ejercicios[0].ejercicio.patron.nombre
        == "Tren Superior"
    )
    assert mesociclo.fecha_fin_real != None
    assert mesociclo.sentimiento == 2
    assert mesociclo.aumento_motivacion
    assert not mesociclo.mas_cerca_objetivos
    assert mesociclo.alimentado == 4
    assert mesociclo.actualizado_en.date() == datetime.utcnow().date()
Пример #4
0
def test_controller_delete_sesion(db, client, token):
    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)
    id_sesion = 1

    # Act
    rv = client.delete(
        f"/api/sesiones/{id_sesion}",
        follow_redirects=True,
        headers={"Authorization": f"Bearer {token}"},
    ).get_json()

    # Assert
    sesion = Sesion.query.get(id_sesion)

    assert sesion == None
Пример #5
0
def test_get_sesion_hoy_usuario(db, client):
    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)

    usuario = Usuario.query.get(1)

    # Act
    response = client.get(
        f"/api/usuarios/{usuario.id_usuario}/mesociclos/sesionHoy",
        follow_redirects=True,
    ).get_json()

    # Assert
    assert response != None
    assert parser.parse(
        response["fechaEmpezado"]).date() == datetime.utcnow().date()
    assert len(response["bloques"]) == 2
Пример #6
0
def test_crear_bloque_valido(db, token, client):

    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)

    bloque_update_body = {
        "idBloque":
        1,
        "numBloque":
        3,  # el num_bloque pasaria de 1 a 3
        "series":
        5,  # las series deberian pasar de 4 a 5
        "ejercicios": [{
            "idEjerciciosxbloque": 1,  # Cambio el primer ejercicio
            "repeticiones": 20,  # Paso de 10 reps a 20
            "carga": 150,  # paso de 30kg a 150kg
            "ejercicio": {
                "idEjercicio":
                5,  # Paso de Traditional Push-ups a Bulgarian Squats
            },
        }],
    }

    # Act

    bloque_response = client.put(
        "/api/bloques",
        json=bloque_update_body,
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    # Assert
    bloque = Bloque.query.filter_by(id_bloque=1).first()

    assert bloque_response != None
    assert bloque.id_bloque == 1
    assert bloque.num_bloque == 3
    assert bloque.series == 5
    assert bloque.ejercicios[0].repeticiones == 20
Пример #7
0
def test_controller_create_sesion(db, client, token):
    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)
    sesion_body = {
        "idMesociclo": 1,
        "fechaEmpezado": str(datetime.utcnow()),
        "numSesion": 3,
        "bloques": [
            {
                "numBloque": 1,
                "series": 4,
                "ejercicios": [
                    {
                        "ejercicio": {"idEjercicio": 1},
                        "numEjercicio": 1,
                        "repeticiones": 10,
                        "carga": 20.1,
                    }
                ],
            }
        ],
    }

    # Act
    rv = client.post(
        "/api/sesiones",
        json=sesion_body,
        follow_redirects=True,
        headers={"Authorization": f"Bearer {token}"},
    ).get_json()

    # Assert
    mesociclo = Mesociclo.query.first()

    assert len(mesociclo.sesiones) == 3
    sesion = sorted(mesociclo.sesiones, key=lambda s: s.id_sesion)[2]
    assert len(sesion.bloques[0].ejercicios) == 1
    assert sesion.bloques[0].ejercicios[0].ejercicio.patron.nombre == "Tren Superior"
def test_crear_mesociclo_valido(db):
    # Arrange
    create_usuario_db(db)

    ej_x_bloque = EjercicioXBloque(
        ejercicio=Ejercicio("Traditional Push-ups"), repeticiones=10, carga=20.1
    )

    bloque = Bloque(ejercicios=[ej_x_bloque], num_bloque=1, series=4)

    sesion = Sesion(
        fecha_empezado=str(datetime.utcnow()),
        fecha_finalizado=str(datetime.utcnow() + timedelta(hours=1)),
        bloques=[bloque],
    )

    mesociclo = Mesociclo(
        usuario=Usuario.query.first(),
        nivel=Nivel.query.first(),
        objetivo=Objetivo.query.first(),
        organizacion=2,
        principal_tren_inferior=5,
        principal_tren_superior=2,
        semanas_por_mesociclo=4,
        sesiones_por_semana=3,
        sesiones=[sesion],
    )

    # Act
    mesociclo = MesocicloService.create_mesociclo(mesociclo)

    # Assert
    assert mesociclo.usuario.username == "usuarioprueba"
    assert mesociclo.objetivo.descripcion == "Hipertrofia"
    assert mesociclo.organizacion.descripcion == "Full Body"
    assert mesociclo.principal_tren_superior.nombre == "Traditional Push-ups"
    assert mesociclo.semanas_por_mesociclo == 4
    assert len(mesociclo.sesiones) == 1
Пример #9
0
def test_actualizar_usuario(db, client, token):

    create_usuario_db(db)
    _user_uid = "Oueo4BZj6iZPFyXFV04o8n7rVc83"  ## uuid del usuario

    # Arrange
    usuario_body = {
        "username": "******",  ## cambio username de usuarioprueba a usertest
        "email":
        "*****@*****.**",  ## cambio email de [email protected] a [email protected]
        "nombre": "User",  ## cambio nombre de Usuario a User
        "apellido": "Test",  ## cambio apellido de Prueba a Test
        "altura": 2.01,
        "nivel": {
            "idNivel": 2
        },  ## cambio nivel de Principiante a Intermedio
    }

    # Act
    response = client.put(
        f"/api/usuarios/{_user_uid}",
        json=usuario_body,
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    # Assert
    usuario = Usuario.query.filter_by(username="******").first()

    assert response != None
    assert usuario.email == "*****@*****.**"
    assert usuario.nombre == "User"
    assert usuario.altura == 2.01
    assert usuario.nivel.descripcion == "Intermedio"
def test_crear_mesociclo_invalido(db):
    # Arrange
    create_usuario_db(db)
    sesion_data = {
        "empezado": str(datetime.utcnow()),
        "finalizado": str(datetime.utcnow() + timedelta(hours=1)),
        "bloques": [
            {
                "series": 10,
                "numBloque": 1,
                "ejercicios": [
                    {
                        "ejercicio": {"nombre": "Pull-ups"},
                        "repeticiones": 10,
                        "carga": 20.1,
                    }
                ],
            }
        ],
    }

    mesociclo_data = {
        "usuario": "usuarioprueba",  # Usuario inválido
        "nivel": "Intermedio",  # Nivel inválido
        "objetivo": "Hipertrofia",  # Objetivo inválido
        "organizacion": "Full Body",  # Organizacion inválida
        "principal_tren_superior": "Traditional Push-ups",  # Ejercicio TS inválido
        "principal_tren_inferior": "Bulgarian Squats",  # Ejercicio TI inválido
        "semanas_por_mesociclo": 4,
        "sesiones_por_semana": 3,
        "sesiones": [sesion_data],  # Sesiones vacias
    }

    # Act
    with pytest.raises(ValidationError) as excinfo:
        mesociclo = MesocicloService.create_mesociclo(mesociclo_data)
Пример #11
0
def test_get_usuarios_search(db, client, token):
    ## This will test a couple of cases, correct and incorrect. This is not ideal, but I decided that the test is so simple that is
    ## unnecesary to recreate db and request new tokens for each case, and putting them all together was better.

    # Arrange
    create_usuario_db(db)
    search_good_nombre = "Usua"  # Partial name of the user created in create_usuario_db
    search_bad_nombre = "User"  # This name shouldn't exist on db

    # Act
    response_good_nombre = client.get(
        f"/api/usuarios?search={search_good_nombre}",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()
    response_bad_nombre = client.get(
        f"/api/usuarios?search={search_bad_nombre}",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    search_good_apellido = (
        "Prue"  # Partial surname of the user created in create_usuario_db
    )
    search_bad_apellido = "Prun"  # This apellido shouldn't exist on db

    # Act
    response_good_apellido = client.get(
        f"/api/usuarios?search={search_good_apellido}",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()
    response_bad_apellido = client.get(
        f"/api/usuarios?search={search_bad_apellido}",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    search_good_email = (
        "rio@pr"  # Partial email of the user created in create_usuario_db
    )
    search_bad_email = "fafa"  # This email shouldn't exist on db

    # Act
    response_good_email = client.get(
        f"/api/usuarios?search={search_good_email}",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()
    response_bad_email = client.get(
        f"/api/usuarios?search={search_bad_email}",
        follow_redirects=True,
        headers={
            "Authorization": f"Bearer {token}"
        },
    ).get_json()

    # Assert
    assert None not in (
        response_good_nombre,
        response_good_apellido,
        response_good_email,
    )
    assert 1 in {
        len(response_good_nombre),
        len(response_good_apellido),
        len(response_good_email),
    }
    assert "Usuario" in {
        response_good_nombre[0]["nombre"],
        response_good_apellido[0]["nombre"],
        response_good_email[0]["nombre"],
    }

    assert None not in (response_bad_nombre, response_bad_apellido,
                        response_bad_email)
    assert 0 in {
        len(response_bad_nombre),
        len(response_bad_apellido),
        len(response_bad_email),
    }
Пример #12
0
def test_controller_update_sesion(db, client, token):
    # Arrange
    create_usuario_db(db)
    create_mesociclo_db(db)
    id_sesion = 1

    sesion_body = {
        "idMesociclo": 1,
        "idSesion": 1,
        "fechaFinalizado": str(datetime.utcnow() + timedelta(hours=1)),
        "fechaEmpezado": str(datetime(2020, 11, 1)),
        "bloques": [
            {
                "idBloque": 1,
                "numBloque": 1,
                "series": 5,
                "ejercicios": [
                    {
                        "idEjerciciosxbloque": 1,
                        "numEjercicio": 5,
                        "ejercicio": {"idEjercicio": 2},
                        "repeticiones": 16,
                        "carga": 20.1,
                    },
                    {"idEjerciciosxbloque": 2},
                    {"idEjerciciosxbloque": 3},
                    # Agrego un ej
                    {
                        "ejercicio": {"idEjercicio": 2},
                        "numEjercicio": 4,
                        "repeticiones": 20,
                        "carga": 22,
                    },
                ],
            },
            ## {"idBloque": 2},  No mando el bloque2 ("eliminado")
            ## Agrego un nuevo bloque
            {
                "numBloque": 2,
                "series": 6,
                "ejercicios": [
                    {
                        "ejercicio": {"idEjercicio": 2},
                        "numEjercicio": 1,
                        "repeticiones": 20,
                        "carga": 22,
                    },
                    {
                        "ejercicio": {"idEjercicio": 1},
                        "numEjercicio": 2,
                        "repeticiones": 21,
                        "carga": 23,
                    },
                    {
                        "ejercicio": {"idEjercicio": 3},
                        "numEjercicio": 3,
                        "repeticiones": 22,
                        "carga": 24,
                    },
                ],
            },
        ],
    }

    # Act
    rv = client.put(
        f"/api/sesiones/{str(id_sesion)}",
        json=sesion_body,
        follow_redirects=True,
        headers={"Authorization": f"Bearer {token}"},
    ).get_json()

    sesion = Sesion.query.get(1)

    # Assert
    assert sesion.fecha_finalizado != None
    assert sesion.fecha_empezado.date() == datetime(2020, 11, 1).date()
    assert len(sesion.bloques) == 2
    assert len(sesion.bloques[0].ejercicios) == 4
    bloques = sorted(sesion.bloques, key=lambda k: k.id_bloque)
    bloque1_ejercicios = sorted(
        bloques[0].ejercicios, key=lambda k: k.id_ejerciciosxbloque
    )
    bloque2_ejercicios = sorted(
        bloques[1].ejercicios, key=lambda k: k.id_ejerciciosxbloque
    )
    assert bloque1_ejercicios[0].repeticiones == 16
    assert bloque1_ejercicios[0].carga == 20.1
    assert bloque1_ejercicios[0].num_ejercicio == 5
    assert bloque1_ejercicios[0].ejercicio.nombre == "Diamond Push-ups"
    assert bloque1_ejercicios[0].ejercicio.patron.nombre == "Tren Superior"
    assert bloque2_ejercicios[0].carga == 22
    assert bloque2_ejercicios[0].ejercicio.nombre == "Diamond Push-ups"
    assert bloque2_ejercicios[0].ejercicio.patron.nombre == "Tren Superior"
    assert bloque2_ejercicios[0].repeticiones == 20
def test_controller_create_valid_mesociclo(db, client, token):
    # Arrange
    create_usuario_db(db)
    sesion_data = {
        "idSesion": None,
        "numSesion": 3,
        "fechaFinalizado": None,
        "fechaEmpezado": str(datetime.utcnow()),
        "bloques": [
            {
                "idBloque": None,
                "series": 10,
                "numBloque": 1,
                "ejercicios": [
                    {
                        "numEjercicio": 1,
                        "ejercicio": {"nombre": "Pull-ups"},
                        "repeticiones": 10,
                        "carga": 20.1,
                    }
                ],
            }
        ],
    }

    mesociclo_data = {
        "idMesociclo": None,
        "usuario": {"idUsuario": 1},
        "nivel": {"idNivel": 2},
        "objetivo": {"idObjetivo": 3},
        "organizacion": {"idOrganizacion": 3},
        "principalTrenSuperior": {"idEjercicio": 2},
        "principalTrenInferior": {"idEjercicio": 5},
        "semanasPorMesociclo": 4,
        "sesionesPorSemana": 3,
        "sesiones": [sesion_data],
    }
    # Act
    response = client.post(
        "/api/mesociclos",
        json=mesociclo_data,
        follow_redirects=True,
        headers={"Authorization": f"Bearer {token}"},
    ).get_json()

    # Assert
    mesociclo = Mesociclo.query.first()

    assert mesociclo.usuario.username == "usuarioprueba"
    assert mesociclo.objetivo.descripcion == "Fuerza"
    assert mesociclo.organizacion.descripcion == "Combinado"
    assert mesociclo.principal_tren_superior.nombre == "Diamond Push-ups"
    assert mesociclo.principal_tren_inferior.nombre == "Bulgarian Squats"
    assert mesociclo.estado.descripcion == "Activo"
    assert mesociclo.semanas_por_mesociclo == 4
    assert len(mesociclo.sesiones) == 1
    assert len(mesociclo.sesiones[0].bloques) == 1
    assert len(mesociclo.sesiones[0].bloques[0].ejercicios) == 1
    assert (
        mesociclo.sesiones[0].bloques[0].ejercicios[0].ejercicio.patron.nombre
        == "Tren Superior"
    )
    assert mesociclo.fecha_fin_real == None
    assert mesociclo.sentimiento == None