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 )
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'
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))
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'
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))
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 )
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'
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' )
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'
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))
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))
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'