def proyecto(usuario, gerente, rol_de_proyecto): proyecto = Proyecto(nombre='Proyecto Prueba', descripcion='Descripcion de prueba', fecha_de_creacion=timezone.now(), creador=usuario, gerente=gerente) proyecto.save() fase = Fase(nombre='Analisis', proyecto=proyecto, fase_cerrada=False, puede_cerrarse=False) fase.save() fase = Fase(nombre='Desarrollo', proyecto=proyecto, fase_cerrada=False, puede_cerrarse=False) fase.save() fase = Fase(nombre='Pruebas', proyecto=proyecto, fase_cerrada=False, puede_cerrarse=False) fase.save() participante = Participante.objects.create(proyecto=proyecto, usuario=gerente) participante.save() participante = Participante.objects.create(proyecto=proyecto, usuario=usuario) participante.save() return proyecto
def proyecto(usuario, gerente, rol_de_proyecto): proyecto = Proyecto(nombre='Proyecto Prueba', descripcion='Descripcion de prueba', fecha_de_creacion=timezone.now(), gerente=gerente, creador=usuario, estado=EstadoDeProyecto.CONFIGURACION) proyecto.save() participante_gerente = Participante.objects.create(proyecto=proyecto, usuario=gerente) participante_gerente.save() fase1 = Fase(nombre='Analisis', proyecto=proyecto, fase_cerrada=False, puede_cerrarse=False) fase1.save() fase2 = Fase(nombre='Desarrollo', proyecto=proyecto, fase_anterior=fase1, fase_cerrada=False, puede_cerrarse=False) fase2.save() fase3 = Fase(nombre='Pruebas', proyecto=proyecto, fase_anterior=fase2, fase_cerrada=False, puede_cerrarse=False) fase3.save() participante = Participante.objects.create(proyecto=proyecto, usuario=usuario) participante.asignar_rol_de_proyecto(rol_de_proyecto) participante.save() return proyecto
def test_iniciar_proyecto_en_configuracion_sin_fases( self, usuario, rol_de_proyecto): """ Prueba unitaria para verificar que al momento de iniciar un proyecto sin fases con un estado "En Configuracion", este no cambie su estado. Se espera: Que el proyecto no cambie de estado. Mensaje de error: No se puede Iniciar el Proyecto sin fases. """ proyecto_prueba = Proyecto(nombre='IS2', descripcion='Descripcion', fecha_de_creacion=timezone.now(), creador=usuario, estado=EstadoDeProyecto.CONFIGURACION) comite = Comite(proyecto=proyecto_prueba) proyecto_prueba.save() comite.save() try: proyecto_prueba.iniciar() except: pass assert proyecto_prueba.estado == EstadoDeProyecto.CONFIGURACION, 'No se puede Iniciar el Proyecto sin fases'
def test_iniciar_proyecto_en_configuracion(self, usuario, rol_de_proyecto): """ Prueba unitaria para verificar que al momento de iniciar un proyecto con al menos una fase y un comite de cambios, este cambie de estado "En Configuracion", a "Iniciado". Se espera: Que el proyecto cambie a estado "Iniciado". Mensaje de error: No se puede iniciar el Proyecto. """ proyecto_prueba = Proyecto(nombre='IS2', descripcion='Descripcion', fecha_de_creacion=timezone.now(), creador=usuario, estado=EstadoDeProyecto.CONFIGURACION) proyecto_prueba.save() user1 = User(username='******', email='*****@*****.**') user1.set_password('password123') user1.save() user2 = User(username='******', email='*****@*****.**') user2.set_password('password123') user2.save() user3 = User(username='******', email='*****@*****.**') user3.set_password('password123') user3.save() participante1 = Participante(proyecto=proyecto_prueba, usuario=user1) participante1.save() participante2 = Participante(proyecto=proyecto_prueba, usuario=user2) participante2.save() participante3 = Participante(proyecto=proyecto_prueba, usuario=user3) participante3.save() comite = Comite(proyecto=proyecto_prueba) comite.save() comite.miembros.add(participante1, participante2, participante3) comite.save() fase_1 = Fase(nombre='Analisis', proyecto=proyecto_prueba, fase_cerrada=False, puede_cerrarse=False) fase_1.fase_anterior = None fase_1.save() proyecto_prueba.iniciar() assert proyecto_prueba.estado == EstadoDeProyecto.INICIADO, 'No se puede iniciar el Proyecto'
def test_cancelar_proyecto_iniciado(self, usuario, rol_de_proyecto): """ Prueba unitaria para verificar que al momento de cancelar un proyecto con estado "Iniciado", este quede con estado "Cancelado". Se espera: Que el proyecto quede en estado "Cancelado". Mensaje de error: No se pudo Cancelar el Proyecto. """ proyecto_prueba = Proyecto(nombre='IS2', descripcion='Descripcion', fecha_de_creacion=timezone.now(), creador=usuario, estado=EstadoDeProyecto.INICIADO) proyecto_prueba.save() proyecto_prueba.cancelar() assert proyecto_prueba.estado == EstadoDeProyecto.CANCELADO, "No se pudo Cancelar el Proyecto"
def test_cancelar_proyecto_finalizado(self, usuario, rol_de_proyecto): """ Prueba unitaria para verificar que al momento de cancelar un proyecto con estado "Finalizadp", este no le permita cambiar su estado. Se espera: Que el proyecto siga con el estado "Finalizado". Mensaje de error: No se pudo Cancelar un Proyecto con estado "Finalizado". """ proyecto_prueba = Proyecto(nombre='IS2', descripcion='Descripcion', fecha_de_creacion=timezone.now(), creador=usuario, estado=EstadoDeProyecto.FINALIZADO) proyecto_prueba.save() proyecto_prueba.cancelar() assert proyecto_prueba.estado == EstadoDeProyecto.FINALIZADO, "No se puede cambiar el estado de un " \ "proyecto con estado Finalizado"
def trazar_item(proyecto: Proyecto, item: Item): """ | Funcion utilitaria que toma un item de un proyecto y construye una representación | del grafo conformado por el item, sus antecesores y padres, directos e indirectos. | Este grafo es presentado en un formato JSON. Argumentos: - proyecto: Proyecto - item: Item Retorna: - JSON """ items = [item] items_visitados = set() queue = [] for padre in item.get_padres(): queue.append([ padre, { 'sucesores': False, 'antecesores': True, 'hijos': False, 'padres': True } ]) for antecesor in item.get_antecesores(): queue.append([ antecesor, { 'sucesores': False, 'antecesores': True, 'hijos': False, 'padres': True } ]) for hijo in item.get_hijos(): queue.append([ hijo, { 'sucesores': True, 'antecesores': False, 'hijos': True, 'padres': False } ]) for sucesor in item.get_sucesores(): queue.append([ sucesor, { 'sucesores': True, 'antecesores': False, 'hijos': True, 'padres': False } ]) items_visitados.add(item.id) while len(queue) > 0: [item, dependencias] = queue.pop() if item.id in items_visitados: continue items_visitados.add(item.id) items.append(item) if dependencias['padres']: for padre in item.get_padres(): if padre.id not in items_visitados: queue.append([padre, dependencias]) if dependencias['antecesores']: for antecesor in item.get_antecesores(): if antecesor.id not in items_visitados: queue.append([antecesor, dependencias]) if dependencias['hijos']: for hijo in item.get_hijos(): if hijo.id not in items_visitados: queue.append([hijo, dependencias]) if dependencias['sucesores']: for sucesor in item.get_sucesores(): if sucesor.id not in items_visitados: queue.append([sucesor, dependencias]) return json.dumps([{ "fase": fase.nombre, "items": [{ "codigo": item.codigo, "data": { "nombre": str(item), "tipoDeItem": item.tipo_de_item.nombre, "peso": item.get_peso(), "estado": item.estado }, "hijos": [ hijo.codigo for hijo in item.get_hijos() if hijo.id in items_visitados ], "sucesores": [ sucesor.codigo for sucesor in item.get_sucesores() if sucesor.id in items_visitados ] } for item in items if item.get_fase().id == fase.id] } for fase in proyecto.get_fases()], sort_keys=True)