예제 #1
0
 def setUp(self):
     self.crear_arbol()
     grupo3 = Grupo.objects.get(id=300)
     self.grupo = Grupo.objects.get(id=500)
     self.lider1 = MiembroFactory(lider=True, grupo=grupo3)
     self.lider2 = MiembroFactory(lider=True, grupo=grupo3)
     self.barrio = BarrioFactory()
예제 #2
0
 def setUp(self):
     self.crear_arbol()
     grupo3 = Grupo.objects.get(id=300)
     self.padre = Grupo.objects.get(id=800)
     self.lider1 = MiembroFactory(lider=True, grupo=grupo3)
     self.lider2 = MiembroFactory(lider=True, grupo=self.padre)
     self.barrio = BarrioFactory()
     self.red_jovenes = Red.objects.get(nombre='jovenes')
예제 #3
0
    def setUp(self):
        self.crear_arbol()
        self.admin = UsuarioFactory(admin=True)
        self.padre = Grupo.objects.get(id=800)
        self.lider1 = MiembroFactory(lider=True, grupo=self.padre)
        self.lider2 = MiembroFactory(lider=True, grupo=self.padre)
        self.barrio = BarrioFactory()

        Red.objects.get(nombre='jovenes')
예제 #4
0
 def setUp(self):
     self.crear_arbol()
     grupo3 = Grupo.objects.get(id=300)
     self.padre = Grupo.objects.get(id=800)
     self.lider1 = MiembroFactory(lider=True, grupo=grupo3)
     self.lider2 = MiembroFactory(lider=True, grupo=self.padre)
     self.barrio = BarrioFactory()
     self.red_jovenes = Red.objects.get(nombre='jovenes')
     self.url = reverse('common:busqueda_miembro_api', args=(self.red_jovenes.id, ))
예제 #5
0
    def datos_pruebas(self):
        self.crear_arbol()
        grupo = Grupo.objects.get(id=400)
        self.lider.grupo_lidera = grupo
        self.lider.save()

        grupo2 = Grupo.objects.get(id=700)
        self.miembro_red = MiembroFactory(grupo=grupo2)
        self.lider_red = grupo2.lideres.first()

        self.miembro_no_red = MiembroFactory(nombre='maria')
        self.lider_no_red = Grupo.objects.get(id=300).lideres.first()
예제 #6
0
    def test_get_buscar_todos_miembros(self):
        """
        Prueba el buscador de miembros cuando el usuario tiene permiso de buscar todos.
        """

        MiembroFactory(nombre='adriana', primer_apellido='mendoza')
        MiembroFactory(nombre='maria', primer_apellido='fernandez')

        self.login_usuario(self.usuario)
        response = self.client.get(self.URL_MIEMBROS, self.termino_busqueda())

        self.assertContains(response, 'adriana'.upper())
        self.assertContains(response, 'fernandez'.upper())
예제 #7
0
    def test_campo_lideres_solo_muestra_lideres_red_ingresada(self):
        """
        Prueba que el campo lideres solo muestra lideres que pertenecen a los grupos de la red ingresada.
        """

        grupo1 = Grupo.objects.get(id=300)
        lider_joven = MiembroFactory(lider=True, grupo=grupo1)

        grupo2 = Grupo.objects.get(id=400)
        otro_lider = MiembroFactory(lider=True, grupo=grupo2)

        form = NuevoGrupoForm(red=self.red_jovenes)

        self.assertIn(lider_joven, form.fields['lideres'].queryset)
        self.assertNotIn(otro_lider, form.fields['lideres'].queryset)
예제 #8
0
    def test_fusionar_traslada_miembros(self):
        """
        Prueba que se trasladen todas los miembros asociados al grupo que se esta fusionando con el nuevo grupo.
        """

        grupo = Grupo.objects.get(id=500)
        nuevo_grupo = Grupo.objects.get(id=800)

        miembro1 = MiembroFactory(grupo=grupo)
        miembro2 = MiembroFactory(grupo=grupo, admin=True)

        grupo.fusionar(nuevo_grupo)

        miembros = nuevo_grupo.miembros.all()
        self.assertIn(miembro1, miembros)
        self.assertIn(miembro2, miembros)
예제 #9
0
    def test_grupo_by_solo_muestra_lideres_disponibles_debajo_de_grupo(self):
        """
        Prueba que a partir de el campo de grupo_by, solo sean mostrados los lideres disponibles que se encuentran
        por debajo de ese grupo.
        """
        grupo = Grupo.objects.get(id=300)
        grupo_lider_disponible = Grupo.objects.get(id=700)

        lider_disponible_1 = MiembroFactory(lider=True, grupo=grupo_lider_disponible)
        lider_disponible_2 = MiembroFactory(lider=True, grupo=grupo)

        response = self.POST(data={'value': lider_disponible_1.nombre[0:5], 'grupo_by': grupo.id})

        self.assertNotIn(str(lider_disponible_1), [x['id'] for x in response['miembros']])

        response = self.POST(data={'value': lider_disponible_2.nombre[0:5], 'grupo_by': grupo.id})

        self.assertIn(str(lider_disponible_2.id), [x['id'] for x in response['miembros']])
예제 #10
0
    def test_campo_lideres_solo_muestra_lideres(self):
        """
        Prueba que el campo lideres solo se muestren miembros que sean lideres.
        """

        no_lider = MiembroFactory()
        form = GrupoRaizForm()

        self.assertNotIn(no_lider, form.fields['lideres'].queryset)
예제 #11
0
    def test_busqueda_solo_muestra_lideres(self):
        """
        Prueba que en la busqueda solo se muestren miembros que sean lideres.
        """

        no_lider = MiembroFactory()

        response = self.POST(data={'value': no_lider.nombre[0:5]})

        self.assertEqual(response['miembros'].__len__(), 0)

        lider = MiembroFactory(lider=True, grupo=Grupo.objects.red(self.red_jovenes)[0])

        response = self.POST(data={'value': lider.nombre[0:5]})

        self.assertIn('id', response['miembros'][0])
        # self.assertEqual(str(response['miembros'][0]['id']), str(lider.id))
        self.assertIn(str(lider.id), [x['id'] for x in response['miembros']])
예제 #12
0
    def test_campo_lideres_solo_muestra_lideres_red_ingresada(self):
        """
        Prueba que el campo lideres solo muestra lideres que pertenecen a los grupos de la red ingresada.
        """

        grupo1 = Grupo.objects.get(id=200)
        lider_joven = MiembroFactory(lider=True, grupo=grupo1, nombre='asdfder')

        response = self.POST(data={'value': lider_joven.nombre[0:5]})
        self.assertEqual(response['miembros'].__len__(), 0)
예제 #13
0
    def test_campo_lideres_solo_muestra_lideres_sin_grupo(self):
        """
        Prueba que en el campo lideres solo se muestren miembros que sean lideres que no lideren grupo.
        """

        grupo = Grupo.objects.get(id=300)
        lider_sin_grupo = MiembroFactory(lider=True, grupo=grupo)
        form = NuevoGrupoForm(red=self.red_jovenes)

        self.assertNotIn(grupo.lideres.first(), form.fields['lideres'].queryset)
        self.assertIn(lider_sin_grupo, form.fields['lideres'].queryset)
예제 #14
0
    def test_lider_sin_grupo_devuelve_403(self):
        """
        Prueba que si el usuario no lidera grupo y no tiene el permiso buscar_todos devuelva permiso denegado.
        """

        grupo = GrupoFactory()
        lider = MiembroFactory(lider=True)
        self.login_usuario(lider.usuario)
        response = self.client.get(reverse(self.URL_NAME, args=[grupo.id]))

        self.assertEqual(response.status_code, 403)
예제 #15
0
    def test_campo_lideres_solo_muestra_lideres_sin_grupo(self):
        """
        Prueba que en el campo lideres solo se muestren miembros que sean lideres que no lideren grupo.
        """

        grupo = GrupoFactory()
        lider_sin_grupo = MiembroFactory(lider=True)
        form = GrupoRaizForm()

        self.assertNotIn(grupo.lideres.first(), form.fields['lideres'].queryset)
        self.assertIn(lider_sin_grupo, form.fields['lideres'].queryset)
예제 #16
0
    def test_modificar_lideres_raiz(self):
        """
        Prueba que cuando se editen los lideres del grupo raiz, se les coloque a los lideres nuevos el grupo raiz como
        su grupo que lidera y a los lideres que se cambiaron se les quite.
        """

        raiz = GrupoRaizFactory()
        lider3 = MiembroFactory(lider=True, grupo_lidera=raiz)
        lideres_viejos = list(raiz.lideres.values_list('id', flat=True))

        data = self.datos_formulario()
        data['lideres'].append(lider3.id)
        form = GrupoRaizForm(instance=raiz, data=data)
        form.save()

        lider3.refresh_from_db()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()
        self.assertEqual(lider3.grupo_lidera, raiz)
        self.assertEqual(self.lider1.grupo_lidera, raiz)
        self.assertEqual(self.lider2.grupo_lidera, raiz)
        self.assertEqual(len(raiz.lideres.filter(id__in=lideres_viejos)), 1)
예제 #17
0
    def test_discipulos_devuelve_solo_miembros_grupo_son_lideres(self):
        """
        Prueba que los discipulos obtenidos son los miembros del grupo que son lideres.
        """

        grupo = Grupo.objects.get(id=300)
        miembro = MiembroFactory(grupo=grupo)
        lider = Grupo.objects.get(id=500).lideres.first()
        otro_lider = Grupo.objects.get(id=200).lideres.first()

        discipulos = list(grupo.discipulos)

        self.assertIn(lider, discipulos)
        self.assertNotIn(miembro, discipulos)
        self.assertNotIn(otro_lider, discipulos)
예제 #18
0
    def test_campo_lideres_muestra_lideres_raiz_si_red_no_tiene_grupo(self):
        """
        Prueba que el campo lideres muestre los lideres disponibles que asisten al grupo raiz de una iglesia si la red
        ingresada no tiene ningún grupo.
        """

        raiz = Grupo.objects.get(id=100)
        otro = Grupo.objects.get(id=300)
        red_nueva = RedFactory(nombre='nueva red')
        miembro = MiembroFactory(lider=True, grupo=raiz)

        form = NuevoGrupoForm(red=red_nueva)

        self.assertIn(miembro, form.fields['lideres'].queryset)
        self.assertNotIn(otro.lideres.first(), form.fields['lideres'].queryset)
예제 #19
0
    def test_redireccion_si_cabeza_red_no_entra_a_su_red(self):
        """
        Verifica que el usuario, si es cabeza de red y no entra a crear un grupo de su red, sea redireccionado.
        """
        grupo = Grupo.objects.get(id=300)

        cabeza_red = MiembroFactory(lider=True,
                                    grupo=grupo,
                                    grupo_lidera=self.padre)
        otra_red = RedFactory(nombre='nueva red')
        red = self.padre.red

        self.assertTrue(cabeza_red.es_cabeza_red)

        self.login_usuario(cabeza_red.usuario)
        response = self.get(self.URL, pk=otra_red.id)

        self.assertRedirects(response, self.reverse(self.URL, pk=red.id))
예제 #20
0
    def test_grupos_listados_sean_red_de_cabeza_red(self):
        """
        Verifica que los grupos que sean listados sean de la red del cabeza de red, y no de otra red.
        """

        grupo = Grupo.objects.get(id=300)
        padre = Grupo.objects.get(id=800)
        otro_grupo = Grupo.objects.get(id=500)
        red_jovenes = Red.objects.get(nombre='jovenes')

        cabeza_red = MiembroFactory(lider=True,
                                    grupo=grupo,
                                    grupo_lidera=padre)

        self.assertTrue(cabeza_red.es_cabeza_red)

        self.login_usuario(cabeza_red.usuario)
        self.get(self.URL, pk=red_jovenes.id)

        self.assertResponseNotContains(str(otro_grupo), html=False)
        self.assertResponseContains(str(padre), html=False)
예제 #21
0
    def test_campo_lideres_muestra_lideres_raiz_si_red_no_tiene_grupo(self):
        """
        Prueba que el campo lideres muestre los lideres disponibles que asisten al grupo raiz de la iglesia si la red
        ingresada no tiene ningún grupo.
        """

        raiz = Grupo.objects.get(id=100)
        otro = Grupo.objects.get(id=300)

        red_nueva = RedFactory(nombre='nueva red')

        miembro = MiembroFactory(lider=True, grupo=raiz)

        url = reverse('common:busqueda_miembro_api', args=(red_nueva.id, ))

        response = self.POST(url=url, data={'value': miembro.nombre[0:5]})

        self.assertEqual(str(response['miembros'][0]['id']), miembro.id.__str__())

        for m in response['miembros']:
            self.assertNotEqual(str(otro.lideres.first().id), str(m['id']))
예제 #22
0
class EditarGrupoFormTest(BaseTest):
    """
    Pruebas unitarias para el formulario de edición de grupos de una iglesia.
    """

    def setUp(self):
        self.crear_arbol()
        grupo3 = Grupo.objects.get(id=300)
        self.grupo = Grupo.objects.get(id=500)
        self.lider1 = MiembroFactory(lider=True, grupo=grupo3)
        self.lider2 = MiembroFactory(lider=True, grupo=grupo3)
        self.barrio = BarrioFactory()

    def datos_formulario(self):
        """
        Retorna un diccionario con datos para el formulario.
        """

        data = {
            'direccion': 'Calle 34 N 74 - 23', 'estado': 'AC', 'fechaApertura': '2012-03-03', 'diaGAR': '1',
            'horaGAR': '12:00', 'diaDiscipulado': '3', 'horaDiscipulado': '16:00', 'nombre': 'Pastor presidente',
            'barrio': self.barrio.id, 'lideres': [self.lider1.id, self.lider2.id], 'parent': '300'
        }

        return data

    def test_campo_parent_muestra_padre_del_grupo_seleccionado(self):
        """
        Prueba que en el campo parent se muestre el padre del grupo que se esta editando.
        """

        form = EditarGrupoForm(instance=self.grupo)
        self.assertIn(self.grupo.parent, form.fields['parent'].queryset)

    @skip
    def test_campo_parent_no_muestra_grupos_esten_debajo_de_grupo_seleccionado(self):
        """
        Prueba que en el campo parent no se muestren los grupos que se encuentren debajo del grupo seleccionado ni el
        grupo seleccionado.
        """

        descendiente = Grupo.objects.get(id=600)
        form = EditarGrupoForm(instance=self.grupo)
        self.assertNotIn(self.grupo, form.fields['parent'].queryset)
        self.assertNotIn(descendiente, form.fields['parent'].queryset)

    @skip
    def test_campo_parent_muestra_raiz_si_padre_grupo_seleccionado_es_raiz(self):
        """
        Prueba que el campo padre muestre el grupo raiz de una iglesia si el padre del grupo seleccionado es la raiz.
        """

        raiz = Grupo.objects.get(id=100)
        seleccionado = Grupo.objects.get(id=300)
        form = EditarGrupoForm(instance=seleccionado)
        self.assertIn(raiz, form.fields['parent'].queryset)

    def test_campo_lideres_muestra_lideres_del_grupo_escogido(self):
        """
        Prueba que en el campo lideres muestren los lideres del grupo que se esta editando.
        """

        form = EditarGrupoForm(instance=self.grupo)
        self.assertIn(self.grupo.lideres.first(), form.fields['lideres'].queryset)

    def test_formulario_edita_grupo(self):
        form = EditarGrupoForm(instance=self.grupo, data=self.datos_formulario())
        form.save()

        self.lider1.refresh_from_db()
        self.assertEqual(self.lider1.grupo_lidera, self.grupo)

    @mock.patch('django.db.models.query.QuerySet.update', side_effect=IntegrityError)
    def test_error_al_guardar_formulario_no_se_guarda_nada_en_db(self, update_mock):
        """
        Prueba que si ocurre un error al guardar el formulario no se guarde ni el grupo ni los lideres.
        """

        form = EditarGrupoForm(instance=self.grupo, data=self.datos_formulario())
        form.save()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()

        self.assertTrue(update_mock.called)
        self.assertEqual(self.lider1.grupo_lidera, None)
        self.assertEqual(self.lider2.grupo_lidera, None)

    @mock.patch('django.db.models.query.QuerySet.update', side_effect=IntegrityError)
    def test_error_al_guardar_formulario_agrega_error_form(self, update_mock):
        """
        Prueba que si ocurre un error al momento de guardar el formulario, se agregue un error al formulario.
        """

        form = EditarGrupoForm(instance=self.grupo, data=self.datos_formulario())
        form.save()

        self.assertTrue(update_mock.called)
        self.assertEqual(len(form.non_field_errors()), 1)
예제 #23
0
 def setUp(self):
     self.usuario = UsuarioFactory(user_permissions=['buscar_todos'])
     self.lider = MiembroFactory(lider=True, nombre='mariana')
예제 #24
0
class BuscarViewTest(BaseTest):
    """
    Pruebas unitarias para la vista de busqueda de miembros y grupos.
    """

    URL_MIEMBROS = reverse('buscar', args=['miembro'])
    URL_GRUPOS = reverse('buscar', args=['grupo'])

    def setUp(self):
        self.usuario = UsuarioFactory(user_permissions=['buscar_todos'])
        self.lider = MiembroFactory(lider=True, nombre='mariana')

    def termino_busqueda(self, termino='adriana fernandez'):
        return {'buscar': termino}

    def test_get_buscar_todos_miembros(self):
        """
        Prueba el buscador de miembros cuando el usuario tiene permiso de buscar todos.
        """

        MiembroFactory(nombre='adriana', primer_apellido='mendoza')
        MiembroFactory(nombre='maria', primer_apellido='fernandez')

        self.login_usuario(self.usuario)
        response = self.client.get(self.URL_MIEMBROS, self.termino_busqueda())

        self.assertContains(response, 'adriana'.upper())
        self.assertContains(response, 'fernandez'.upper())

    def test_get_buscar_todos_grupos(self):
        """
        Prueba el buscador de grupos cuando el usuario tiene permiso de buscar todos.
        """

        grupo1 = GrupoFactory(lider__nombre='adriana',
                              lider__primer_apellido='mendoza',
                              nombre='mendoza')
        grupo2 = GrupoFactory(lider__nombre='maria',
                              lider__primer_apellido='fernandez',
                              nombre='fernandez')

        self.login_usuario(self.usuario)
        response = self.client.get(self.URL_GRUPOS, self.termino_busqueda())

        self.assertContains(response, grupo1.nombre.upper())
        self.assertContains(response, grupo2.nombre.upper())

    def datos_pruebas(self):
        self.crear_arbol()
        grupo = Grupo.objects.get(id=400)
        self.lider.grupo_lidera = grupo
        self.lider.save()

        grupo2 = Grupo.objects.get(id=700)
        self.miembro_red = MiembroFactory(grupo=grupo2)
        self.lider_red = grupo2.lideres.first()

        self.miembro_no_red = MiembroFactory(nombre='maria')
        self.lider_no_red = Grupo.objects.get(id=300).lideres.first()

    def test_get_lider_sin_grupo_buscar_miembros(self):
        """
        Prueba que cuando el lider no tenga el permiso buscar_todos y no lidere grupo la busqueda no devuelva
        resultados.
        """

        self.login_usuario(self.lider.usuario)
        response = self.client.get(self.URL_MIEMBROS, self.termino_busqueda())

        self.assertContains(response, 'No se encontraron resultados')

    def test_get_lider_sin_grupo_buscar_grupos(self):
        """
        Prueba que cuando el lider no tenga el permiso buscar_todos y no lidere grupo la busqueda no devuelva
        resultados.
        """

        self.login_usuario(self.lider.usuario)
        response = self.client.get(self.URL_GRUPOS, self.termino_busqueda())

        self.assertContains(response, 'No se encontraron resultados')

    def test_get_lider_buscar_miembros(self):
        """
        Prueba que cuando el lider no tenga el permiso buscar_todos solo puede buscar miembros entre sus descendientes.
        """

        self.datos_pruebas()
        termino = 'maria {0} {1} {2}'.format(self.lider_red.primer_apellido,
                                             self.miembro_red.nombre,
                                             self.lider_no_red.nombre)

        self.login_usuario(self.lider.usuario)
        response = self.client.get(self.URL_MIEMBROS,
                                   self.termino_busqueda(termino=termino))

        self.assertContains(response, self.miembro_red.cedula)
        self.assertContains(response, self.lider_red.cedula)
        self.assertContains(response, self.lider.cedula)

        self.assertNotContains(response, self.miembro_no_red.cedula)
        self.assertNotContains(response, self.lider_no_red.cedula)

    def test_get_lider_buscar_grupos(self):
        """
        Prueba que cuando lider no tenga el permiso buscar_todos solo pueda buscar grupos entre sus descendientes.
        """

        self.datos_pruebas()
        termino = 'maria {0} {1} {2}'.format(self.lider_red.primer_apellido,
                                             self.miembro_red.nombre,
                                             self.lider_no_red.nombre)

        self.login_usuario(self.lider.usuario)
        response = self.client.get(self.URL_GRUPOS,
                                   self.termino_busqueda(termino=termino))

        self.assertContains(response, self.lider_red.cedula)
        self.assertContains(response, self.lider.cedula)

        self.assertNotContains(response, self.lider_no_red.cedula)
예제 #25
0
 def setUp(self):
     self.lider1 = MiembroFactory(lider=True)
     self.lider2 = MiembroFactory(lider=True)
     self.barrio = BarrioFactory()
예제 #26
0
class GrupoRaizFormTest(BaseTest):
    """
    Pruebas unitarias para el formulario de creación y/o edición del grupo raiz.
    """

    def setUp(self):
        self.lider1 = MiembroFactory(lider=True)
        self.lider2 = MiembroFactory(lider=True)
        self.barrio = BarrioFactory()

    def datos_formulario(self):
        """
        Retorna un diccionario con datos para el formulario GrupoRaiz.
        """

        data = {
            'direccion': 'Calle 34 N 74 - 23', 'estado': 'AC', 'fechaApertura': '2012-03-03', 'diaGAR': '1',
            'horaGAR': '12:00', 'diaDiscipulado': '3', 'horaDiscipulado': '16:00', 'nombre': 'Pastor presidente',
            'barrio': self.barrio.id, 'lideres': [self.lider1.id, self.lider2.id]
        }

        return data

    def test_campo_lideres_solo_muestra_lideres(self):
        """
        Prueba que el campo lideres solo se muestren miembros que sean lideres.
        """

        no_lider = MiembroFactory()
        form = GrupoRaizForm()

        self.assertNotIn(no_lider, form.fields['lideres'].queryset)

    def test_campo_lideres_solo_muestra_lideres_sin_grupo(self):
        """
        Prueba que en el campo lideres solo se muestren miembros que sean lideres que no lideren grupo.
        """

        grupo = GrupoFactory()
        lider_sin_grupo = MiembroFactory(lider=True)
        form = GrupoRaizForm()

        self.assertNotIn(grupo.lideres.first(), form.fields['lideres'].queryset)
        self.assertIn(lider_sin_grupo, form.fields['lideres'].queryset)

    def test_campo_lideres_muestra_lideres_del_grupo_raiz(self):
        """
        Prueba que en el campo lideres muestren los lideres del grupo raiz.
        """

        raiz = GrupoRaizFactory()
        form = GrupoRaizForm(instance=raiz)

        self.assertIn(raiz.lideres.first(), form.fields['lideres'].queryset)

    def test_formulario_crea_raiz_se_asigna_grupo_a_lideres_escogidos(self):
        """
        Prueba que cuando se guarde el formulario se crea el grupo raiz sino existe y es asignado a los lideres
        escogidos.
        """

        form = GrupoRaizForm(data=self.datos_formulario())
        raiz = form.save()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()

        self.assertEqual(len(Grupo.get_root_nodes()), 1)
        self.assertEqual(self.lider1.grupo_lidera, raiz)
        self.assertEqual(self.lider2.grupo_lidera, raiz)

    def test_formulario_no_crea_nueva_raiz_si_ya_existe(self):
        """
        Prueba que cuando se guarde el formulario no se cree un nuevo grupo raiz si ya existe.
        """

        raiz = GrupoRaizFactory()
        form = GrupoRaizForm(instance=raiz, data=self.datos_formulario())
        form.save()

        self.assertEqual(len(Grupo.get_root_nodes()), 1)

    def test_modificar_lideres_raiz(self):
        """
        Prueba que cuando se editen los lideres del grupo raiz, se les coloque a los lideres nuevos el grupo raiz como
        su grupo que lidera y a los lideres que se cambiaron se les quite.
        """

        raiz = GrupoRaizFactory()
        lider3 = MiembroFactory(lider=True, grupo_lidera=raiz)
        lideres_viejos = list(raiz.lideres.values_list('id', flat=True))

        data = self.datos_formulario()
        data['lideres'].append(lider3.id)
        form = GrupoRaizForm(instance=raiz, data=data)
        form.save()

        lider3.refresh_from_db()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()
        self.assertEqual(lider3.grupo_lidera, raiz)
        self.assertEqual(self.lider1.grupo_lidera, raiz)
        self.assertEqual(self.lider2.grupo_lidera, raiz)
        self.assertEqual(len(raiz.lideres.filter(id__in=lideres_viejos)), 1)

    @mock.patch('django.db.models.query.QuerySet.update', side_effect=IntegrityError)
    def test_error_al_guardar_formulario_no_se_guarda_nada_en_db(self, update_mock):
        """
        Prueba que si ocurre un error al guardar el formulario no se guarde ni el grupo ni los lideres.
        """

        form = GrupoRaizForm(data=self.datos_formulario())
        form.save()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()

        self.assertTrue(update_mock.called)
        self.assertEqual(len(Grupo.get_root_nodes()), 0)
        self.assertEqual(self.lider1.grupo_lidera, None)
        self.assertEqual(self.lider2.grupo_lidera, None)

    @mock.patch('django.db.models.query.QuerySet.update', side_effect=IntegrityError)
    def test_error_al_guardar_formulario_agrega_error_form(self, update_mock):
        """
        Prueba que si ocurre un error al momento de guardar el formulario, se agregue un error al formulario.
        """

        form = GrupoRaizForm(data=self.datos_formulario())
        form.save()

        self.assertTrue(update_mock.called)
        self.assertEqual(len(form.non_field_errors()), 1)
예제 #27
0
class NuevoGrupoFormTest(BaseTest):
    """
    Pruebas unitarias para el formulario de creación de grupos de una iglesia.
    """

    def setUp(self):
        self.crear_arbol()
        grupo3 = Grupo.objects.get(id=300)
        self.padre = Grupo.objects.get(id=800)
        self.lider1 = MiembroFactory(lider=True, grupo=grupo3)
        self.lider2 = MiembroFactory(lider=True, grupo=self.padre)
        self.barrio = BarrioFactory()
        self.red_jovenes = Red.objects.get(nombre='jovenes')

    def datos_formulario(self):
        """
        Retorna un diccionario con datos para el formulario GrupoRaiz.
        """

        data = {
            'direccion': 'Calle 34 N 74 - 23', 'estado': 'A', 'fechaApertura': '2012-03-03', 'diaGAR': '1',
            'horaGAR': '12:00', 'diaDiscipulado': '3', 'horaDiscipulado': '16:00', 'nombre': 'Pastor presidente',
            'barrio': self.barrio.id, 'lideres': [self.lider1.id, self.lider2.id], 'parent': self.padre.id
        }

        return data

    def test_campo_parent_solo_muestra_grupos_red_ingresada(self):
        """
        Prueba que el campo parent solo muestra los grupos pertenecientes a la red ingresada.
        """

        raiz = Grupo.objects.get(id=100)
        grupo1 = Grupo.objects.get(id=300)
        grupo2 = Grupo.objects.get(id=400)

        form = NuevoGrupoForm(red=self.red_jovenes)

        self.assertIn(grupo1, form.fields['parent'].queryset)
        self.assertNotIn(grupo2, form.fields['parent'].queryset)
        self.assertNotIn(raiz, form.fields['parent'].queryset)

    def test_campo_parent_muestra_raiz_sino_red_no_tiene_grupos(self):
        """
        Prueba que el campo parent muestre el grupo raiz de la iglesia si la red ingresada no tiene ningún grupo.
        """

        raiz = Grupo.objects.get(id=100)
        otro = Grupo.objects.get(id=300)
        red_nueva = RedFactory(nombre='nueva red')

        form = NuevoGrupoForm(red=red_nueva)
        self.assertIn(raiz, form.fields['parent'].queryset)
        self.assertNotIn(otro, form.fields['parent'].queryset)

    @skip
    def test_campo_lideres_solo_muestra_lideres(self):
        """
        Prueba que el campo lideres solo se muestren miembros que sean lideres.
        """

        no_lider = MiembroFactory()
        form = NuevoGrupoForm(red=self.red_jovenes)

        self.assertNotIn(no_lider, form.fields['lideres'].queryset)

    @skip
    def test_campo_lideres_solo_muestra_lideres_sin_grupo(self):
        """
        Prueba que en el campo lideres solo se muestren miembros que sean lideres que no lideren grupo.
        """

        grupo = Grupo.objects.get(id=300)
        lider_sin_grupo = MiembroFactory(lider=True, grupo=grupo)
        form = NuevoGrupoForm(red=self.red_jovenes)

        self.assertNotIn(grupo.lideres.first(), form.fields['lideres'].queryset)
        self.assertIn(lider_sin_grupo, form.fields['lideres'].queryset)

    @skip
    def test_campo_lideres_solo_muestra_lideres_red_ingresada(self):
        """
        Prueba que el campo lideres solo muestra lideres que pertenecen a los grupos de la red ingresada.
        """

        grupo1 = Grupo.objects.get(id=300)
        lider_joven = MiembroFactory(lider=True, grupo=grupo1)

        grupo2 = Grupo.objects.get(id=400)
        otro_lider = MiembroFactory(lider=True, grupo=grupo2)

        form = NuevoGrupoForm(red=self.red_jovenes)

        self.assertIn(lider_joven, form.fields['lideres'].queryset)
        self.assertNotIn(otro_lider, form.fields['lideres'].queryset)

    @skip
    def test_campo_lideres_muestra_lideres_raiz_si_red_no_tiene_grupo(self):
        """
        Prueba que el campo lideres muestre los lideres disponibles que asisten al grupo raiz de una iglesia si la red
        ingresada no tiene ningún grupo.
        """

        raiz = Grupo.objects.get(id=100)
        otro = Grupo.objects.get(id=300)
        red_nueva = RedFactory(nombre='nueva red')
        miembro = MiembroFactory(lider=True, grupo=raiz)

        form = NuevoGrupoForm(red=red_nueva)

        self.assertIn(miembro, form.fields['lideres'].queryset)
        self.assertNotIn(otro.lideres.first(), form.fields['lideres'].queryset)

    def test_formulario_crea_grupo_y_se_asigna_a_lideres_escogidos(self):
        """
        Prueba que cuando se guarde el formulario se crea el grupo y es asignado a los lideres escogidos como grupo
        que lidera y el padre como grupo al que pertenecen.
        """

        form = NuevoGrupoForm(red=self.red_jovenes, data=self.datos_formulario())
        grupo = form.save()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()

        self.assertEqual(self.padre.get_children_count(), 1)
        self.assertEqual(grupo.red, self.red_jovenes)
        self.assertEqual(self.lider1.grupo_lidera, grupo)
        self.assertEqual(self.lider2.grupo_lidera, grupo)
        self.assertEqual(self.lider1.grupo, self.padre)
        self.assertEqual(self.lider2.grupo, self.padre)

    @mock.patch('django.db.models.query.QuerySet.update', side_effect=IntegrityError)
    def test_error_al_guardar_formulario_no_se_guarda_nada_en_db(self, update_mock):
        """
        Prueba que si ocurre un error al guardar el formulario no se guarde ni el grupo ni los lideres.
        """

        form = NuevoGrupoForm(red=self.red_jovenes, data=self.datos_formulario())
        form.save()
        self.lider1.refresh_from_db()
        self.lider2.refresh_from_db()

        self.assertTrue(update_mock.called)
        self.assertEqual(self.padre.get_children_count(), 0)
        self.assertEqual(self.lider1.grupo_lidera, None)
        self.assertEqual(self.lider2.grupo_lidera, None)

    @mock.patch('django.db.models.query.QuerySet.update', side_effect=IntegrityError)
    def test_error_al_guardar_formulario_agrega_error_form(self, update_mock):
        """
        Prueba que si ocurre un error al momento de guardar el formulario, se agregue un error al formulario.
        """

        form = NuevoGrupoForm(red=self.red_jovenes, data=self.datos_formulario())
        form.save()

        self.assertTrue(update_mock.called)
        self.assertEqual(len(form.non_field_errors()), 1)