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
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()
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
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
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
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
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)
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), }
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