Example #1
0
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
Example #2
0
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
Example #3
0
    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'
Example #4
0
    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'
Example #5
0
    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"
Example #6
0
    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"
Example #7
0
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)