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