Beispiel #1
0
	def test_crear_tabla_kanban(self):

		tabla = Flujo(Nombre='flujo_prueba', Estado = 'activo', Descripcion = 'AAAAAAAAA')
		tabla.save()

		actividad_1 = Actividad(Nombre = 'actividad 1', Orden = 1, idTabla = tabla.id)
		actividad_1.save()
		actividad_2 = Actividad(Nombre = 'actividad 2', Orden = 2, idTabla = tabla.id)
		actividad_2.save()
		actividad_3 = Actividad(Nombre = 'actividad 3', Orden = 3, idTabla = tabla.id)
		actividad_3.save()

		tabla.Actividades.add(actividad_1)
		tabla.Actividades.add(actividad_2)
		tabla.Actividades.add(actividad_3)
		tabla.save()

		tabla_prueba = Flujo.objects.get(Nombre='flujo_prueba')
		
		# Comprueba si se creo la tabla correcatamente
		self.assertTrue( len(Flujo.objects.all())  == 1)

		# Comprueba que las actividades se crearon y agregaron correcatamente
		self.assertTrue( len( tabla_prueba.Actividades.all() ) == 3 )
		actividad_prueba = tabla_prueba.Actividades.get(Nombre = 'actividad 1')
		self.assertTrue( actividad_prueba.Orden == 1 )
		actividad_prueba = tabla_prueba.Actividades.get(Nombre = 'actividad 2')
		self.assertTrue( actividad_prueba.Orden == 2 )
		actividad_prueba = tabla_prueba.Actividades.get(Nombre = 'actividad 3')
		self.assertTrue( actividad_prueba.Orden == 3 )
Beispiel #2
0
    def test_view_aprobar_user_story(self):
        """
        Funcion que realiza el test sobre la vista aprobar_user_story que aprueba
        un user story finalizado
        """
        # se loguea el usuario testuser
        user = self.client.login(username='******', password='******')
        self.assertTrue(user)

        user4 = User.objects.create_user(username='******',
                                         email='*****@*****.**',
                                         password='******')
        # se crea un usuario
        proyecto = Proyecto.objects.create(codigo='codi',
                                           nombre_corto='test',
                                           nombre_largo='test',
                                           cancelado=False,
                                           scrum_master=user4)

        proyecto.save()

        sprint = Sprint.objects.create(nombre='sprint',
                                       duracion=15,
                                       proyecto=proyecto)
        sprint.save()

        user_story = UserStory.objects.create(nombre='us',
                                              descripcion='desc',
                                              valor_negocio=20,
                                              proyecto=proyecto,
                                              sprint=sprint,
                                              usuario=user4)
        user_story.save()

        actividad = Actividad(nombre='actividad')
        actividad.save()

        estado = Estado(nombre='estado')
        estado.save()

        flujo = Flujo(nombre='flujo')
        flujo.save()

        tarea = Tarea.objects.create(user_story=user_story,
                                     descripcion='Una descripcion',
                                     horas_de_trabajo=20,
                                     actividad=actividad,
                                     estado=estado,
                                     sprint=sprint,
                                     flujo=flujo)
        tarea.save()

        user_story.estado = 'Aprobado'
        user_story.save()

        self.assertEqual(user_story.estado, 'Aprobado')

        print 'Test de aprobar_user_story realizado exitosamente'
Beispiel #3
0
def importar_flujo(request, id_flujo,id_proyecto):
    """
        Vista para importar los datos de un flujo, dado en <id_flujo> . Se utiliza para crear un flujo nueva a partir de otra
        ya existente. Realiza las comprobaciones necesarias con respecto a la fecha de inicio y orden de flujo.
        @param request: objeto HttpRequest que representa la metadata de la solicitud HTTP
        @param id_flujo: referencia a ala flujo en la base de datos
        @param id_proyecto: referencia al proyecto de la base de datos
        @return HttpResponseRedirect('flujos/registrar_flujos.html') con sus diferentes variaciones de acuerdo al caso
    """

    flujo= Flujo.objects.get(id=id_flujo)
    if request.method=='POST':
        proyecto = Proyecto.objects.get(id=id_proyecto)
        formulario = CrearFlujoForm(request.POST)
        if formulario.is_valid():
            if len(str(request.POST["fInicio"])) != 10 :
                mensaje=0
                return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':mensaje,'id':id_proyecto}, context_instance=RequestContext(request))

            else:
                fecha=datetime.strptime(str(request.POST["fInicio"]),'%d/%m/%Y')
                fecha=fecha.strftime('%Y-%m-%d')
                fecha1=datetime.strptime(fecha,'%Y-%m-%d')
                newFlujo = Flujo(nombre = request.POST["nombre"],descripcion = request.POST["descripcion"],maxItems = request.POST["maxItems"],fInicio = fecha, estado = "PEN",
                               proyecto_id = id_proyecto)
                aux=0
                orden=Flujo.objects.filter(proyecto_id=id_proyecto)
                if aux>0:
                    messages.add_message(request, settings.DELETE_MESSAGE, "Er: No hacemos nada")
                else:
                    proyecto=Proyecto.objects.get(id=id_proyecto)
                    cantidad = orden.count()
                    if cantidad>0:
                       anterior = Flujo.objects.get(orden=cantidad, proyecto_id=id_proyecto)
                       if fecha1<datetime.strptime(str(anterior.fInicio),'%Y-%m-%d'):
                            mensaje=1
                            return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':mensaje,'id':id_proyecto, 'proyecto':proyecto},
                                                      context_instance=RequestContext(request))

                       else:
                            if datetime.strptime(str(proyecto.fecha_ini),'%Y-%m-%d')>=fecha1 or datetime.strptime(str(proyecto.fecha_fin),'%Y-%m-%d')<=fecha1:
                                mensaje=2
                                return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':mensaje,'id':id_proyecto, 'proyecto':proyecto},
                                                          context_instance=RequestContext(request))

                            else:

                                newFlujo.orden=orden.count()+1
                                newFlujo.save()

                                return render_to_response('flujos/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
                    else:
                                newFlujo.orden=1
                                newFlujo.save()
                                return render_to_response('flujos/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
    else:
        formulario = CrearFlujoForm(initial={'descripcion':flujo.descripcion, 'maxItems':flujo.maxItems, 'fInicio':flujo.fInicio, 'orden':flujo.orden}) #'fInicio':datetime.strptime(str(flujo.fInicio),'%Y-%m-%d').strftime('%d/%m/%y')
    return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':1000,'id':id_proyecto}, context_instance=RequestContext(request))
Beispiel #4
0
    def test_view_revertir_estado(self):
        """
        Funcion que realiza el test sobre la vista revertir estado que cambia
        el estado al user story a un estado anterior
        """
        # se loguea el usuario testuser
        user = self.client.login(username='******', password='******')
        self.assertTrue(user)

        user4 = User.objects.create_user(username='******', email='*****@*****.**', password='******')
        # se crea un usuario
        proyecto = Proyecto.objects.create(codigo='codi', nombre_corto='test',
                                           nombre_largo='test', cancelado=False, scrum_master=user4)

        proyecto.save()

        sprint = Sprint.objects.create(nombre='sprint', duracion=15, proyecto=proyecto)
        sprint.save()

        user_story = UserStory.objects.create(nombre='us', descripcion='desc',
                                              valor_negocio=20, proyecto=proyecto, sprint=sprint, usuario=user4)
        user_story.save()

        actividad = Actividad(nombre='actividad')
        actividad.save()

        estado = Estado(nombre='estado')
        estado.save()

        flujo = Flujo(nombre='flujo')
        flujo.save()

        tarea = Tarea.objects.create(user_story=user_story, descripcion='Una descripcion', horas_de_trabajo=20,
                                     actividad=actividad, estado=estado, sprint=sprint, flujo=flujo)
        tarea.save()

        actividad2 = Actividad(nombre='actividad2')
        actividad2.save()

        estado2 = Estado(nombre='estado2')
        estado2.save()

        detalle = UserStoryDetalle(user_story=user_story, actividad=actividad, estado=estado)
        detalle.save()

        detalle.actividad = actividad2
        detalle.estado = estado2
        detalle.save()

        detalle.actividad = actividad
        detalle.estado = estado
        detalle.save()

        self.assertEqual(detalle.actividad, actividad)
        self.assertEqual(detalle.estado, estado)

        print 'Test de revertir_estado realizado exitosamente'
Beispiel #5
0
def registrar_flujo(request, id_proyecto):
    """
    Vista para registrar un nuevo flujo dentro de proyecto
    @param request: objeto HttpRequest que representa la metadata de la solicitud HTTP
    @return HttpResponseRedirect('/flujos/register/success') si el rol fue correctamente asignado o
    render_to_response('proyectos/registrar_proyecto.html',{'formulario':formulario}, context_instance=RequestContext(request)) al formulario
    """
    mensaje=100
    proyecto = Proyecto.objects.get(id=id_proyecto)
    if request.method=='POST':
        proyecto = Proyecto.objects.get(id=id_proyecto)
        formulario = CrearFlujoForm(request.POST)
        if formulario.is_valid():
            if len(str(request.POST["fInicio"])) != 10 : #Comprobacion de formato de fecha
                mensaje=0
                return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':mensaje,'id':id_proyecto}, context_instance=RequestContext(request))
            else:
                fecha=datetime.strptime(str(request.POST["fInicio"]),'%d/%m/%Y')
                fecha=fecha.strftime('%Y-%m-%d')
                fecha1=datetime.strptime(fecha,'%Y-%m-%d')
                newFlujo = Flujo(nombre = request.POST["nombre"],descripcion = request.POST["descripcion"],
                               fInicio = fecha,estado = "PEN", proyecto_id = id_proyecto, sprim = request.POST["sprim"])
                aux=0
                orden=Flujo.objects.filter(proyecto_id=id_proyecto)

                if aux>0:
                    aux=1
                else:
                    proyecto=Proyecto.objects.get(id=id_proyecto)
                    cantidad = orden.count()
                    if cantidad>0:#comprobaciones de fecha
                       anterior = Flujo.objects.get(orden=cantidad, proyecto_id=id_proyecto)
                       if fecha1<datetime.strptime(str(anterior.fInicio),'%Y-%m-%d'):
                           #Fecha de inicio no concuerda con flujo anterior
                           return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':1,'id':id_proyecto,'proyecto':proyecto},
                                                     context_instance=RequestContext(request))
                       else:
                            if datetime.strptime(str(proyecto.fecha_ini),'%Y-%m-%d')>=fecha1 or datetime.strptime(str(proyecto.fecha_fin),'%Y-%m-%d')<=fecha1:
                                #Fecha de inicio no concuerda con proyecto
                                print(fecha1)
                                print(datetime.strptime(str(proyecto.fecha_ini),'%Y-%m-%d'))
                                print (datetime.strptime(str(proyecto.fecha_fin),'%Y-%m-%d'))
                                return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'mensaje':2,'id':id_proyecto,'proyecto':proyecto},
                                                          context_instance=RequestContext(request))
                            else:
                                newFlujo.orden=orden.count()+1 #Calculo del orden del flujo a crear
                                newFlujo.save()
                                return render_to_response('flujos/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
                    else:
                        newFlujo.orden=1
                        newFlujo.save()
                        return render_to_response('flujos/creacion_correcta.html',{'id_proyecto':id_proyecto}, context_instance=RequestContext(request))
    else:
        formulario = CrearFlujoForm() #formulario inicial
    return render_to_response('flujos/registrar_flujos.html',{'formulario':formulario,'id':id_proyecto, 'proyecto':proyecto, 'mensaje':mensaje},
                              context_instance=RequestContext(request))
Beispiel #6
0
	def test_eliminar_tabla_kanban(self):
		tabla = Flujo(Nombre='flujo_prueba', Estado = 'activo', Descripcion = 'AAAAAAAAA')
		tabla.save()

		# Comprueba si se creo la tabla correcatamente
		self.assertTrue( len( Flujo.objects.all() ) == 1 )


		tabla_prueba = Flujo.objects.get(Nombre='flujo_prueba')
		tabla_prueba.delete()

		self.assertTrue( len( Flujo.objects.all() ) == 0 )
Beispiel #7
0
    def test_view_AgregarNota(self):
        """
        Funcion que realiza el test sobre la vista AgregarNota que registra
        una nota al user story
        """
        # se loguea el usuario testuser
        user = self.client.login(username='******', password='******')
        self.assertTrue(user)

        user4 = User.objects.create_user(username='******',
                                         email='*****@*****.**',
                                         password='******')
        # se crea un usuario
        proyecto = Proyecto.objects.create(codigo='codi',
                                           nombre_corto='test',
                                           nombre_largo='test',
                                           cancelado=False,
                                           scrum_master=user4)

        proyecto.save()

        sprint = Sprint.objects.create(nombre='sprint',
                                       duracion=15,
                                       proyecto=proyecto)
        sprint.save()

        user_story = UserStory.objects.create(nombre='us',
                                              descripcion='desc',
                                              valor_negocio=20,
                                              proyecto=proyecto,
                                              sprint=sprint,
                                              usuario=user4)
        user_story.save()

        actividad = Actividad(nombre='actividad')
        actividad.save()

        estado = Estado(nombre='estado')
        estado.save()

        flujo = Flujo(nombre='flujo')
        flujo.save()

        nota = Nota.objects.create(user_story=user_story,
                                   texto='texto',
                                   usuario=user4)
        nota.save()

        self.assertEqual(nota.user_story, user_story)
        self.assertEqual(nota.texto, 'texto')
        self.assertEqual(nota.usuario, user4)

        print 'Test de AgregarNota realizado exitosamente'
Beispiel #8
0
	def test_modificar_tabla_kanban(self):
		tabla = Flujo(Nombre='flujo_prueba', Estado = 'activo', Descripcion = 'AAAAAAAAA')
		tabla.save()


		# Comprueba si se creo la tabla correcatamente
		self.assertTrue( len( Flujo.objects.all() ) == 1 )

		tabla = Flujo.objects.get(Nombre = 'flujo_prueba')

		tabla.Nombre = 'nombre_modificado'
		tabla.save()

		tabla = Flujo.objects.get(Nombre = 'nombre_modificado')
		self.assertTrue( tabla.Nombre == 'nombre_modificado' )
Beispiel #9
0
    def test_view_RegistarTarea(self):
        """
        Funcion que realiza el test sobre la vista RegistrarTarea que registra
        una tarea al user story
        """
        # se loguea el usuario testuser
        user = self.client.login(username='******', password='******')
        self.assertTrue(user)

        user4 = User.objects.create_user(username='******', email='*****@*****.**', password='******')
        # se crea un usuario
        proyecto = Proyecto.objects.create(codigo='codi', nombre_corto='test',
                                           nombre_largo='test', cancelado=False, scrum_master=user4)

        proyecto.save()

        sprint = Sprint.objects.create(nombre='sprint', duracion=15, proyecto=proyecto)
        sprint.save()

        user_story = UserStory.objects.create(nombre='us', descripcion='desc',
                                              valor_negocio=20, proyecto=proyecto, sprint=sprint, usuario=user4)
        user_story.save()

        actividad = Actividad(nombre='actividad')
        actividad.save()

        estado = Estado(nombre='estado')
        estado.save()

        flujo = Flujo(nombre='flujo')
        flujo.save()

        tarea = Tarea.objects.create(user_story=user_story, descripcion='Una descripcion', horas_de_trabajo=20,
                                     actividad=actividad, estado=estado, sprint=sprint, flujo=flujo)
        tarea.save()

        self.assertEqual(tarea.user_story, user_story)
        self.assertEqual(tarea.descripcion, 'Una descripcion')
        self.assertEqual(tarea.horas_de_trabajo, 20)

        print 'Test de RegistrarTarea realizado exitosamente'
Beispiel #10
0
def importar_flujo(request, id_flujo, id_proyecto):
    """
        Vista para importar los datos de un flujo, dado en <id_flujo> . Se utiliza para crear un flujo nueva a partir de otra
        ya existente. Realiza las comprobaciones necesarias con respecto a la fecha de inicio y orden de flujo.
        @param request: objeto HttpRequest que representa la metadata de la solicitud HTTP
        @param id_flujo: referencia a ala flujo en la base de datos
        @param id_proyecto: referencia al proyecto de la base de datos
        @return HttpResponseRedirect('flujos/registrar_flujos.html') con sus diferentes variaciones de acuerdo al caso
    """

    flujo = Flujo.objects.get(id=id_flujo)
    if request.method == 'POST':
        proyecto = Proyecto.objects.get(id=id_proyecto)
        formulario = CrearFlujoForm(request.POST)
        if formulario.is_valid():
            if len(str(request.POST["fInicio"])) != 10:
                mensaje = 0
                return render_to_response(
                    'flujos/registrar_flujos.html', {
                        'formulario': formulario,
                        'mensaje': mensaje,
                        'id': id_proyecto
                    },
                    context_instance=RequestContext(request))

            else:
                fecha = datetime.strptime(str(request.POST["fInicio"]),
                                          '%d/%m/%Y')
                fecha = fecha.strftime('%Y-%m-%d')
                fecha1 = datetime.strptime(fecha, '%Y-%m-%d')
                newFlujo = Flujo(nombre=request.POST["nombre"],
                                 descripcion=request.POST["descripcion"],
                                 maxItems=request.POST["maxItems"],
                                 fInicio=fecha,
                                 estado="PEN",
                                 proyecto_id=id_proyecto)
                aux = 0
                orden = Flujo.objects.filter(proyecto_id=id_proyecto)
                if aux > 0:
                    messages.add_message(request, settings.DELETE_MESSAGE,
                                         "Er: No hacemos nada")
                else:
                    proyecto = Proyecto.objects.get(id=id_proyecto)
                    cantidad = orden.count()
                    if cantidad > 0:
                        anterior = Flujo.objects.get(orden=cantidad,
                                                     proyecto_id=id_proyecto)
                        if fecha1 < datetime.strptime(str(anterior.fInicio),
                                                      '%Y-%m-%d'):
                            mensaje = 1
                            return render_to_response(
                                'flujos/registrar_flujos.html', {
                                    'formulario': formulario,
                                    'mensaje': mensaje,
                                    'id': id_proyecto,
                                    'proyecto': proyecto
                                },
                                context_instance=RequestContext(request))

                        else:
                            if datetime.strptime(
                                    str(proyecto.fecha_ini),
                                    '%Y-%m-%d') >= fecha1 or datetime.strptime(
                                        str(proyecto.fecha_fin),
                                        '%Y-%m-%d') <= fecha1:
                                mensaje = 2
                                return render_to_response(
                                    'flujos/registrar_flujos.html', {
                                        'formulario': formulario,
                                        'mensaje': mensaje,
                                        'id': id_proyecto,
                                        'proyecto': proyecto
                                    },
                                    context_instance=RequestContext(request))

                            else:

                                newFlujo.orden = orden.count() + 1
                                newFlujo.save()

                                return render_to_response(
                                    'flujos/creacion_correcta.html',
                                    {'id_proyecto': id_proyecto},
                                    context_instance=RequestContext(request))
                    else:
                        newFlujo.orden = 1
                        newFlujo.save()
                        return render_to_response(
                            'flujos/creacion_correcta.html',
                            {'id_proyecto': id_proyecto},
                            context_instance=RequestContext(request))
    else:
        formulario = CrearFlujoForm(
            initial={
                'descripcion': flujo.descripcion,
                'maxItems': flujo.maxItems,
                'fInicio': flujo.fInicio,
                'orden': flujo.orden
            }
        )  #'fInicio':datetime.strptime(str(flujo.fInicio),'%Y-%m-%d').strftime('%d/%m/%y')
    return render_to_response('flujos/registrar_flujos.html', {
        'formulario': formulario,
        'mensaje': 1000,
        'id': id_proyecto
    },
                              context_instance=RequestContext(request))
Beispiel #11
0
def registrar_flujo(request, id_proyecto):
    """
    Vista para registrar un nuevo flujo dentro de proyecto
    @param request: objeto HttpRequest que representa la metadata de la solicitud HTTP
    @return HttpResponseRedirect('/flujos/register/success') si el rol fue correctamente asignado o
    render_to_response('proyectos/registrar_proyecto.html',{'formulario':formulario}, context_instance=RequestContext(request)) al formulario
    """
    mensaje = 100
    proyecto = Proyecto.objects.get(id=id_proyecto)
    if request.method == 'POST':
        proyecto = Proyecto.objects.get(id=id_proyecto)
        formulario = CrearFlujoForm(request.POST)
        if formulario.is_valid():
            if len(str(request.POST["fInicio"])
                   ) != 10:  #Comprobacion de formato de fecha
                mensaje = 0
                return render_to_response(
                    'flujos/registrar_flujos.html', {
                        'formulario': formulario,
                        'mensaje': mensaje,
                        'id': id_proyecto
                    },
                    context_instance=RequestContext(request))
            else:
                fecha = datetime.strptime(str(request.POST["fInicio"]),
                                          '%d/%m/%Y')
                fecha = fecha.strftime('%Y-%m-%d')
                fecha1 = datetime.strptime(fecha, '%Y-%m-%d')
                newFlujo = Flujo(nombre=request.POST["nombre"],
                                 descripcion=request.POST["descripcion"],
                                 fInicio=fecha,
                                 estado="PEN",
                                 proyecto_id=id_proyecto,
                                 sprim=request.POST["sprim"])
                aux = 0
                orden = Flujo.objects.filter(proyecto_id=id_proyecto)

                if aux > 0:
                    aux = 1
                else:
                    proyecto = Proyecto.objects.get(id=id_proyecto)
                    cantidad = orden.count()
                    if cantidad > 0:  #comprobaciones de fecha
                        anterior = Flujo.objects.get(orden=cantidad,
                                                     proyecto_id=id_proyecto)
                        if fecha1 < datetime.strptime(str(anterior.fInicio),
                                                      '%Y-%m-%d'):
                            #Fecha de inicio no concuerda con flujo anterior
                            return render_to_response(
                                'flujos/registrar_flujos.html', {
                                    'formulario': formulario,
                                    'mensaje': 1,
                                    'id': id_proyecto,
                                    'proyecto': proyecto
                                },
                                context_instance=RequestContext(request))
                        else:
                            if datetime.strptime(
                                    str(proyecto.fecha_ini),
                                    '%Y-%m-%d') >= fecha1 or datetime.strptime(
                                        str(proyecto.fecha_fin),
                                        '%Y-%m-%d') <= fecha1:
                                #Fecha de inicio no concuerda con proyecto
                                print(fecha1)
                                print(
                                    datetime.strptime(str(proyecto.fecha_ini),
                                                      '%Y-%m-%d'))
                                print(
                                    datetime.strptime(str(proyecto.fecha_fin),
                                                      '%Y-%m-%d'))
                                return render_to_response(
                                    'flujos/registrar_flujos.html', {
                                        'formulario': formulario,
                                        'mensaje': 2,
                                        'id': id_proyecto,
                                        'proyecto': proyecto
                                    },
                                    context_instance=RequestContext(request))
                            else:
                                newFlujo.orden = orden.count(
                                ) + 1  #Calculo del orden del flujo a crear
                                newFlujo.save()
                                return render_to_response(
                                    'flujos/creacion_correcta.html',
                                    {'id_proyecto': id_proyecto},
                                    context_instance=RequestContext(request))
                    else:
                        newFlujo.orden = 1
                        newFlujo.save()
                        return render_to_response(
                            'flujos/creacion_correcta.html',
                            {'id_proyecto': id_proyecto},
                            context_instance=RequestContext(request))
    else:
        formulario = CrearFlujoForm()  #formulario inicial
    return render_to_response('flujos/registrar_flujos.html', {
        'formulario': formulario,
        'id': id_proyecto,
        'proyecto': proyecto,
        'mensaje': mensaje
    },
                              context_instance=RequestContext(request))
Beispiel #12
0
    def test_view_TareasIndexView(self):
        """
        Funcion que realiza el test sobre la vista TareasIndexView que genera
        lista de tareas del user stories del sprint
        """
        # se loguea el usuario testuser
        user = self.client.login(username='******', password='******')
        self.assertTrue(user)
        user2 = User.objects.create_user(username='******',
                                         email='*****@*****.**',
                                         password='******')

        proyecto = Proyecto.objects.create(codigo='codi',
                                           nombre_corto='test',
                                           nombre_largo='test',
                                           cancelado=False,
                                           scrum_master=user2)
        proyecto.save()

        sprint = Sprint.objects.create(nombre='sprint',
                                       duracion=15,
                                       proyecto=proyecto)
        sprint.save()

        user_story = UserStory.objects.create(nombre='us',
                                              descripcion='desc',
                                              valor_negocio=2,
                                              proyecto=proyecto,
                                              sprint=sprint)
        user_story.save()

        group = Group.objects.create(name='grupo')
        group.save()
        rolProyecto = RolProyecto(group=group, es_rol_proyecto=True)
        rolProyecto.save()

        row_rol = RolProyecto_Proyecto(user=self.user,
                                       rol_proyecto=rolProyecto,
                                       proyecto=proyecto)
        row_rol.save()

        actividad = Actividad(nombre='actividad')
        actividad.save()

        estado = Estado(nombre='estado')
        estado.save()

        flujo = Flujo(nombre='flujo')
        flujo.save()

        for i in range(10):
            tarea = Tarea.objects.create(user_story=user_story,
                                         descripcion='Una descripcion',
                                         horas_de_trabajo=20,
                                         actividad=actividad,
                                         estado=estado,
                                         sprint=sprint,
                                         flujo=flujo)
            tarea.save()

        self.assertEqual(tarea.user_story, user_story)
        self.assertEqual(tarea.descripcion, 'Una descripcion')
        self.assertEqual(tarea.horas_de_trabajo, 20)

        # verificamos que la vista devuelva el template adecuado
        request = self.factory.get(
            reverse('sprints:ver_tareas',
                    args=[proyecto.pk, sprint.pk, user_story.pk]))
        request.user = self.user

        response = TareasIndexView.as_view()(request,
                                             pk_proyecto=proyecto.pk,
                                             pk_sprint=sprint.pk,
                                             pk_user_story=user_story.pk)
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.template_name[0], 'sprints/ver_tareas.html')
        # verificamos los user stories retornados
        self.assertEqual(len(response.context_data['object_list']), 10)

        print 'Test de TareasIndexView de Sprints realizado exitosamente'