示例#1
0
 def test_boton_reactivar_usuario_en_template(self):
     # Se crea un usuario inactivo
     self.asigna_permisos_login()
     usuario = User(
         username='******',
         email='*****@*****.**',
         password='******',
         is_superuser=True,
         is_active=False
     )
     usuario.save()
     administrativo = Administrativo(
         nombre='Jorge',
         primer_apellido='Solís',
         segundo_apellido='Galván',
         telefono='4949412345',
         foto='foto.png',
         usuario=usuario
     )
     administrativo.save()
     id = usuario.id
     response = self.client.get('/usuarios/')
     self.assertInHTML('<a href="/usuarios/reactivar/'+str(id) +
                       '" class="btn btn-success btn-sm">Reactivar</a>',
                       response.rendered_content)
    def setUp(self):
        self.programa = Programa(
            nombre='Programa para Jóvenes Zacatecanos',
            anio_ejercicio_fiscal=2019,
            recurso_asignado=600000,
            fuente='Gobierno',
            tipo='MEN',
            status='ACT',
            tipo_programa_p='APO',
        )
        self.programa.save()

        self.partida = Partida(
            numero_partida=3000,
            nombre_partida='Partida 1 de 3000',
            monto_partida=6700.00,
            programa=self.programa,
        )
        self.partida.save()

        self.usuario = User(username="******",
                            email="*****@*****.**",
                            password="******",
                            is_superuser=True)
        self.usuario.save()

        self.administrativo = Administrativo(nombre="usuario de prueba",
                                             primer_apellido='Solís',
                                             segundo_apellido='Galván',
                                             telefono='4949412345',
                                             foto='foto.png',
                                             usuario=self.usuario)
        self.administrativo.save()
示例#3
0
class SubprogramaFormTests(TestCase):
    def setUp(self):
        self.programa = Programa(
            nombre='Programa para Jóvenes Zacatecanos',
            anio_ejercicio_fiscal=2019,
            recurso_asignado=600000,
            fuente='Gobierno',
            tipo='MEN',
            status='ACT',
            tipo_programa_p='APO',
        )
        self.programa.save()

        self.partida = Partida(
            numero_partida=3000,
            nombre_partida='Partida 1 de 3000',
            monto_partida=6700.00,
            programa=self.programa,
        )
        self.partida.save()

        self.usuario = User(username="******",
                            email="*****@*****.**",
                            password="******",
                            is_superuser=True)
        self.usuario.save()

        self.administrativo = Administrativo(nombre="usuario de prueba",
                                             primer_apellido='Solís',
                                             segundo_apellido='Galván',
                                             telefono='4949412345',
                                             foto='foto.png',
                                             usuario=self.usuario)
        self.administrativo.save()

    # El estatus se agrega por defecto
    def test_SubprogramaForm_crear_sin_estatus(self):
        form = SubprogramaForm(
            data={
                'programa': self.programa.id,
                'nombre': 'ejemplo',
                'presupuesto': 5000,
                'responsable': self.usuario.id,
                'estatus': 'ACT',
            })
        self.assertTrue(form.is_valid())

    # El estatus se debe indicar de forma obligatoria
    def test_EdicionSubprogramaForm_modificar_sin_estatus(self):
        form = EdicionSubprogramaForm(
            data={
                'programa': self.programa.id,
                'nombre': 'ejemplo',
                'presupuesto': 5000,
                'responsable': self.usuario.id,
            })
        self.assertFalse(form.is_valid())
示例#4
0
 def test_usuario_requerido(self):
     administrativo = Administrativo(
         nombre='Jorge',
         primer_apellido='Solís',
         segundo_apellido='Galván',
         telefono='4949412345',
         foto='foto.png',
     )
     with self.assertRaises(ValidationError):
         administrativo.full_clean()
示例#5
0
 def setUp(self,
           nombre='jorgesolis',
           correo='*****@*****.**',
           password='******'):
     self.usuario = User(username=nombre,
                         email=correo,
                         password=password,
                         is_superuser=True)
     self.administrativo = Administrativo(nombre='Jorge',
                                          primer_apellido='Solís',
                                          segundo_apellido='Galván',
                                          telefono='4949412345',
                                          foto='foto.png',
                                          usuario=self.usuario)
示例#6
0
 def guarda_administrativo(self):
     self.usuario = User(
         username='******',
         email='*****@*****.**',
         password='******',
         is_superuser=True
     )
     self.usuario.save()
     self.administrativo = Administrativo(
         nombre='Jorge',
         primer_apellido='Solís',
         segundo_apellido='Galván',
         telefono='4949412345',
         foto='foto.png',
         usuario=self.usuario
     )
     self.administrativo.save()
     return self.usuario
示例#7
0
class TestViews(TestCase):
    def setUp(self):
        self.usuario = User(
            username='******',
            email='*****@*****.**',
            password='******',
            is_superuser=True,
            is_active=True
        )

        self.data_admin = {
            'nombre': 'Jorge Alfonso',
            'primer_apellido': 'Solís',
            'segundo_apellido': 'Galván',
            'telefono': 4941056009,
            'foto': 'C:\\Users\\Lenovo\\Pictures\\3.png',
            'username': '******',
            'email': '*****@*****.**',
            'password': '******',
            'password_re': 'Jorgeasg15@',
            'is_superuser': True,
        }

    # Tests para nuevo usuario
    def test_crea_cuenta_response(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/nuevo')
        self.assertEqual(response.status_code, 200)

    def test_nombre_url_nuevo_usuario_response(self):
        self.asigna_permisos_login()
        response = self.client.get(reverse('nuevo_usuario'))
        self.assertEqual(response.status_code, 200)

    def test_template_correcto_nuevo_usuario(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/nuevo')
        self.assertTemplateUsed(response, 'usuarios/usuario_form.html')

    def test_titulo_se_encuentra_en_el_template(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/nuevo')
        titulo = '<title> Crear cuenta de usuario </title>'
        self.assertInHTML(titulo, response.rendered_content)

    def test_agrega_administrativo_form(self):
        self.asigna_permisos_login()
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 1)

    def test_no_agrega_sin_nombre_usuario(self):
        self.asigna_permisos_login()
        self.data_admin['username'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_con_nombre_usuario_con_espacios(self):
        self.asigna_permisos_login()
        self.data_admin['username'] = '******'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_con_nombre_usuario_min_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['username'] = '******'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_con_nombre_usuario_max_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['username'] = '******'*5
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_sin_correo(self):
        self.asigna_permisos_login()
        # Se agrega porque al crear el usuario para iniciar sesión y crear otro
        # usuario, ya se guarda uno en la BD
        no_users = User.objects.all().count()
        self.data_admin['email'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(User.objects.all().count(), no_users)

    def test_no_agrega_usuario_correo_con_espacios(self):
        self.asigna_permisos_login()
        no_users = User.objects.all().count()
        self.data_admin['email'] = 'jasg15 @hotmail.com'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(User.objects.all().count(), no_users)

    def test_no_agrega_usuario_correo_min_caracteres(self):
        self.asigna_permisos_login()
        no_users = User.objects.all().count()
        self.data_admin['email'] = 'j@'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(User.objects.all().count(), no_users)

    def test_no_agrega_usuario_correo_max_caracteres(self):
        self.asigna_permisos_login()
        no_users = User.objects.all().count()
        self.data_admin['email'] = '*****@*****.**'*30
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(User.objects.all().count(), no_users)

    def test_no_agrega_usuario_sin_password(self):
        self.asigna_permisos_login()
        self.data_admin['password'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_password_min_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['password'] = '******'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_password_max_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['password'] = '******'*10
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_sin_nombre(self):
        self.asigna_permisos_login()
        self.data_admin['nombre'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_nombre_max_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['nombre'] = 'jorgealfonso'*10
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_nombre_formato_incorrecto(self):
        self.asigna_permisos_login()
        self.data_admin['nombre'] = ' jorge alfonso'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_sin_primer_apellido(self):
        self.asigna_permisos_login()
        self.data_admin['primer_apellido'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_primer_apellido_max_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['primer_apellido'] = 'solisg'*10
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_primer_apellido_formato_incorrecto(self):
        self.asigna_permisos_login()
        self.data_admin['primer_apellido'] = ' solis'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_agrega_usuario_sin_segundo_apellido(self):
        self.asigna_permisos_login()
        self.data_admin['segundo_apellido'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 1)

    def test_no_agrega_usuario_segundo_apellido_formato_incorrecto(self):
        self.asigna_permisos_login()
        self.data_admin['segundo_apellido'] = ' sanchez'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_segundo_apellido_max_caracteres(self):
        self.asigna_permisos_login()
        self.data_admin['segundo_apellido'] = 'sanchez'*10
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_sin_telefono(self):
        self.asigna_permisos_login()
        self.data_admin['telefono'] = ''
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_no_agrega_usuario_telefono_formato_incorrecto(self):
        self.asigna_permisos_login()
        self.data_admin['telefono'] = '49494123'
        self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(Administrativo.objects.all().count(), 0)

    def test_redirige_despues_de_agregar_usuario(self):
        self.asigna_permisos_login()
        response = self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(response.url, '/usuarios/')

    def test_redirige_si_no_inicio_sesion_agregar_usuario(self):
        response = self.client.post('/usuarios/nuevo', data=self.data_admin)
        self.assertEqual(response.url, '/usuarios/login?next=/usuarios/nuevo')

    # Tests para listar usuarios

    def test_redirige_si_no_inicio_sesion_listar_usuarios(self):
        response = self.client.post('/usuarios/')
        self.assertEqual(response.url, '/usuarios/login?next=/usuarios/')

    def test_listar_cuentas_response(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        self.assertEqual(response.status_code, 200)

    def test_nombre_url_lista_usuarios(self):
        self.asigna_permisos_login()
        response = self.client.get(reverse('lista_usuarios'))
        self.assertEqual(response.status_code, 200)

    def test_template_correcto_listar_cuentas(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        self.assertTemplateUsed(response, 'usuarios/usuarios.html')

    def test_titulo_se_encuentra_en_el_template_lista_usuarios(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        titulo = '<h2 class="aex" >Usuarios</h2>'
        self.assertInHTML(titulo, response.rendered_content)

    def test_envio_datos_usuarios(self):
        self.guarda_administrativo()
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        self.assertIn('object_list', response.context)

    def test_envio_jorgeasolis_datos_usuario(self):
        self.guarda_administrativo()
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        self.assertEqual(
            'jorgesolis',
            response.context['object_list'][0]['usuario'].username)

    def test_jorgeasolis_se_encuentre_en_el_template(self):
        self.guarda_administrativo()
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        self.assertContains(response, 'jorgesolis')

    def test_jorgeasolis_se_encuentre_en_el_template_en_un_td(self):
        self.guarda_administrativo()
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        self.assertInHTML('<td>jorgesolis</td>', response.rendered_content)

    # Tests para Login

    def test_login_response(self):
        response = self.client.get('/usuarios/login')
        self.assertEqual(response.status_code, 200)

    def test_nombre_url_login_response(self):
        response = self.client.get(reverse('login'))
        self.assertEqual(response.status_code, 200)

    def test_template_correcto_login(self):
        response = self.client.get('/usuarios/login')
        self.assertTemplateUsed(response, 'usuarios/login.html')

    def test_titulo_se_encuentra_en_el_template_login(self):
        response = self.client.get('/usuarios/login')
        titulo = '<title> Inicio de sesión </title>'
        self.assertInHTML(titulo, response.rendered_content)

    def test_campo_usuario_se_encuentra_en_el_template(self):
        response = self.client.get('/usuarios/login')
        formulario = '<label for="id_username">Usuario:</label>'
        formulario += '<input class="au-input au-input--full" type="text" '
        formulario += 'name="username" id="id_username" placeholder'
        formulario += '="Nombre de usuario">'
        self.assertInHTML(formulario, response.rendered_content)

    def test_campo_password_se_encuentra_en_el_template(self):
        response = self.client.get('/usuarios/login')
        formulario = '<label for="id_password">Contraseña</label>'
        formulario += '<input class="au-input au-input--full" type="password" '
        formulario += 'name="password" id="id_password" placeholder'
        formulario += '="Contraseña">'
        self.assertInHTML(formulario, response.rendered_content)

    def test_redirige_despues_de_iniciar_sesion(self):
        User.objects.create_user(
            username='******',
            password='******',
            email='*****@*****.**'
        )
        data_login = {
            'username': '******',
            'password': '******',
        }
        response = self.client.post('/usuarios/login', data=data_login)
        self.assertEqual(response.url, '/principal/')

    # Tests para Logout

    def test_boton_cerrar_se_encuentra_en_el_template_base(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/nuevo')
        boton = '<a href="javascript: cerrarSesion(\'/usuarios/logout\')" '
        boton += 'id="btnCerrarSesion"><i class="zmdi zmdi-power">'
        boton += '</i>Cerrar Sesión</a>'
        self.assertInHTML(boton, response.rendered_content)

    def test_modal_confirmacion_cerrar_se_encuentra_en_el_template_base(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/nuevo')
        boton = '<h5 class="modal-title" id="exampleModalLabel">'
        boton += 'Confirmación</h5>'
        self.assertInHTML(boton, response.rendered_content)

    def test_logout_redireccion(self):
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/logout')
        self.assertEqual(response.url, '/usuarios/login')

    # Tests para editar usuario

    def test_editar_usuario_response(self):
        self.guarda_administrativo()
        id = User.objects.first().id
        response = self.client.get('/usuarios/editar/'+str(id))
        self.assertEqual(response.status_code, 200)

    def test_template_correcto_editar_usuario(self):
        self.guarda_administrativo()
        id = User.objects.first().id
        response = self.client.get('/usuarios/editar/'+str(id))
        self.assertTemplateUsed(response, 'usuarios/editar_usuario.html')

    def test_editar_usuario_form(self):
        self.guarda_administrativo()
        id = User.objects.first().id
        data = {
            'nombre': 'Jorge Alfonso',
            'primer_apellido': 'Solís',
            'segundo_apellido': 'Galván',
            'telefono': '4949412345',
            'foto': 'foto.png',
        }
        self.client.post('/usuarios/editar/'+str(id), data=data)
        self.assertEqual(
            Administrativo.objects.first().nombre, 'Jorge Alfonso')

    def test_editar_nombre_incorrecto_form(self):
        self.guarda_administrativo()
        id = User.objects.first().id
        data = {
            'nombre': '',
            'primer_apellido': 'Solís',
            'segundo_apellido': 'Galván',
            'telefono': '4949412345',
            'foto': 'foto.png',
        }
        self.client.post('/usuarios/editar/'+str(id), data=data)
        self.assertEqual(Administrativo.objects.first().nombre, 'Jorge')

    # Tests para desactivar usuario

    def test_redirige_si_no_inicio_sesion_desactivar_usuarios(self):
        response = self.client.post('/usuarios/desactivar/1')
        self.assertEqual(
            response.url, '/usuarios/login?next=/usuarios/desactivar/1')

    def test_desactivar_usuario_response(self):
        self.asigna_permisos_login()
        self.guarda_administrativo()
        id = User.objects.first().id
        self.client.post('/usuarios/desactivar/'+str(id))
        self.assertFalse(User.objects.first().is_active)

    def test_desactivar_usuario__ya_desactivado(self):
        self.asigna_permisos_login()
        usuario = User(
            username='******',
            email='*****@*****.**',
            password='******',
            is_superuser=True,
            is_active=False
        )
        usuario.save()
        id = User.objects.first().id
        self.client.post('/usuarios/desactivar/'+str(id))
        self.assertFalse(User.objects.first().is_active)

    def test_boton_desactivar_usuario_en_template(self):
        # Se crea un usuario activo
        user = self.guarda_administrativo()
        self.asigna_permisos_login()
        response = self.client.get('/usuarios/')
        id = user.id
        self.assertInHTML('<a href="/usuarios/desactivar/'+str(id) +
                          '" class="btn btn-danger btn-sm">Desactivar</a>',
                          response.rendered_content)

    # Tests para reactivar usuario

    def test_redirige_si_no_inicio_sesion_reactivar_usuarios(self):
        response = self.client.post('/usuarios/reactivar/1')
        self.assertEqual(
            response.url, '/usuarios/login?next=/usuarios/reactivar/1')

    def test_reactivar_usuario_response(self):
        self.asigna_permisos_login()
        usuario = User(
            username='******',
            email='*****@*****.**',
            password='******',
            is_superuser=True,
            is_active=False
        )
        usuario.save()
        id = User.objects.first().id
        self.client.post('/usuarios/reactivar/'+str(id))
        self.assertTrue(User.objects.first().is_active)

    def test_reactivar_usuario_ya_activado(self):
        self.asigna_permisos_login()
        self.guarda_administrativo()
        id = User.objects.first().id
        self.client.post('/usuarios/reactivar/'+str(id))
        self.assertTrue(User.objects.first().is_active)

    def test_boton_reactivar_usuario_en_template(self):
        # Se crea un usuario inactivo
        self.asigna_permisos_login()
        usuario = User(
            username='******',
            email='*****@*****.**',
            password='******',
            is_superuser=True,
            is_active=False
        )
        usuario.save()
        administrativo = Administrativo(
            nombre='Jorge',
            primer_apellido='Solís',
            segundo_apellido='Galván',
            telefono='4949412345',
            foto='foto.png',
            usuario=usuario
        )
        administrativo.save()
        id = usuario.id
        response = self.client.get('/usuarios/')
        self.assertInHTML('<a href="/usuarios/reactivar/'+str(id) +
                          '" class="btn btn-success btn-sm">Reactivar</a>',
                          response.rendered_content)

    def login(self):
        self.usuario.save()
        self.client.login(username='******', password='******')

    def guarda_administrativo(self):
        self.usuario = User(
            username='******',
            email='*****@*****.**',
            password='******',
            is_superuser=True
        )
        self.usuario.save()
        self.administrativo = Administrativo(
            nombre='Jorge',
            primer_apellido='Solís',
            segundo_apellido='Galván',
            telefono='4949412345',
            foto='foto.png',
            usuario=self.usuario
        )
        self.administrativo.save()
        return self.usuario

    def asigna_permisos_login(self):
        user1 = User.objects.create_user(
            username='******',
            password='******',
            email='*****@*****.**',
            is_staff=True
        )
        new_group, created = Group.objects.get_or_create(
            name='director_operativo')
        new_subprograma, created = Group.objects.get_or_create(
            name='encargado_subprograma')
        new_group.permissions.add(Permission.objects.get(codename='view_user'))
        new_group.permissions.add(Permission.objects.get(codename='add_user'))
        user1.groups.add(new_group)
        self.client.login(username='******', password='******')
class SubprogramaModelTests(TestCase):
    def setUp(self):
        self.programa = Programa(
            nombre='Programa para Jóvenes Zacatecanos',
            anio_ejercicio_fiscal=2019,
            recurso_asignado=600000,
            fuente='Gobierno',
            tipo='MEN',
            status='ACT',
            tipo_programa_p='APO',
        )
        self.programa.save()

        self.partida = Partida(
            numero_partida=3000,
            nombre_partida='Partida 1 de 3000',
            monto_partida=6700.00,
            programa=self.programa,
        )
        self.partida.save()

        self.usuario = User(username="******",
                            email="*****@*****.**",
                            password="******",
                            is_superuser=True)
        self.usuario.save()

        self.administrativo = Administrativo(nombre="usuario de prueba",
                                             primer_apellido='Solís',
                                             segundo_apellido='Galván',
                                             telefono='4949412345',
                                             foto='foto.png',
                                             usuario=self.usuario)
        self.administrativo.save()

    def creaDefaultSubprograma(self):
        return Actividad.objects.create(
            programa=self.programa,
            nombre="Subprograma De Referencia",
            presupuesto=20580,
            responsable=self.usuario,
            estatus="ACT",
        )

    def creaSubprogramaPersonal(self, nombre='', presupuesto=None, estatus=''):
        return Actividad.objects.create(
            programa=self.programa,
            nombre=nombre,
            presupuesto=presupuesto,
            responsable=self.usuario,
            estatus=estatus,
        )

    '''
    Pruebas del guardado del subprograma
    '''

    def test_subprograma_bien_guardado(self):
        subprograma = self.creaDefaultSubprograma()
        subprograma_uno = Actividad.objects.first()
        self.assertEqual(subprograma_uno, subprograma)
        self.assertEqual(subprograma_uno.nombre, 'Subprograma De Referencia')
        self.assertEqual(subprograma_uno.estatus, "ACT")
        self.assertEqual(subprograma_uno.presupuesto, 20580)
        self.assertEqual(len(Actividad.objects.all()), 1)

    def test_subprograma_guardado_con_id(self):
        subprograma = self.creaDefaultSubprograma()
        self.assertTrue(subprograma.id)

    '''
    Pruebas del nombre del subprograma
    '''

    def test_subprograma_nombre_no_nulo(self):
        with self.assertRaises(ValidationError):
            subprograma = self.creaSubprogramaPersonal('', 5000, 'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_no_nulo_mensaje(self):
        with self.assertRaisesMessage(ValidationError,
                                      "El nombre no puede estar vacío."):
            subprograma = self.creaSubprogramaPersonal('', 5000, 'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_letras_especiales_permitidas(self):
        subprograma = self.creaSubprogramaPersonal('aksñdlaäáÁàm', 5000, 'ACT')
        subprograma.full_clean()

    def test_subprograma_nombre_caracteres_especiales_no_permitidos(self):
        with self.assertRaises(ValidationError):
            subprograma = self.creaSubprogramaPersonal('aksd\'lam', 5000,
                                                       'ACT')
            subprograma.full_clean()

    def test_subp_nombre_caracteres_especiales_no_permitidos_mensaje(self):
        with self.assertRaisesMessage(ValidationError,
                                      "Solo se permiten letras."):
            subprograma = self.creaSubprogramaPersonal('aksdñlamó_', 5000,
                                                       'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_numeros_no_permitidos(self):
        with self.assertRaises(ValidationError):
            subprograma = self.creaSubprogramaPersonal('aksdlam34', 5000,
                                                       'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_numeros_no_permitidos_mensaje(self):
        with self.assertRaisesMessage(ValidationError,
                                      "Solo se permiten letras."):
            subprograma = self.creaSubprogramaPersonal('aksdl1am34', 5000,
                                                       'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_longitud_minima_pasada(self):
        with self.assertRaises(ValidationError):
            subprograma = self.creaSubprogramaPersonal('hola', 5000, 'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_longitud_minima_pasada_mensaje(self):
        with self.assertRaisesMessage(
                ValidationError,
                "El nombre debe ser de por lo menos 5 caracteres."):
            subprograma = self.creaSubprogramaPersonal('hola', 5000, 'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_longitud_maxima_pasada(self):
        with self.assertRaises(ValidationError):
            subprograma = Actividad(
                nombre="holadfgfffffffffhhhhhhhhhhhhhhhhhhhhhhg" +
                "ffffffffffffffffffffffffffhhhhhhhhhhho",
                presupuesto=66478,
                responsable=self.usuario,
                estatus='ACT',
            )
            subprograma.full_clean()

    def test_subprograma_nombre_longitud_maxima_pasada_mensaje(self):
        with self.assertRaisesMessage(
                ValidationError,
                "El nombre no puede pasar los 50 caracteres."):
            subprograma = Actividad(
                nombre="holadfgfffffffffhhhhhhhhhhhhhhhhhhhhhhg" +
                "ffffffffffffffffffffffffffhhhhhhhhhhho",
                presupuesto=66478,
                responsable=self.usuario,
                estatus='ACT',
            )
            subprograma.full_clean()

    '''
    Pruebas del programa del subprograma
    '''

    def test_subprograma_programa_requerido(self):
        error = False
        try:
            subprograma = Actividad.objects.create(
                nombre="nombre de ejemplo",
                presupuesto=66478,
                responsable=self.usuario,
                estatus='ACT',
            )
            subprograma.full_clean()
        except Exception as e:
            error = True
        self.assertTrue(error)

    '''
    Pruebas del responsable del subprograma
    '''

    def test_subprograma_responsable_requerido(self):
        error = False
        try:
            subprograma = Actividad.objects.create(
                programa=self.programa,
                nombre="nombre de ejemplo",
                presupuesto=66478,
                estatus='ACT',
            )
            subprograma.full_clean()
        except Exception as e:
            error = True
        self.assertTrue(error)

    '''
    Pruebas del presupuesto del subprograma
    '''

    def test_subprograma_presupuesto_requerido(self):
        try:
            subprograma = Actividad.objects.create(
                nombre="nombre",
                presupuesto=None,
                estatus="ACT",
            )
            subprograma.full_clean()
        except Exception:
            self.assertEqual(Exception.__name__, "Exception")

    def test_subprograma_presupuesto_caracteres_no_numericos_no_permitidos(
            self):
        with self.assertRaises(ValidationError):
            subprograma = self.creaSubprogramaPersonal('ejemplo', '5000e',
                                                       'ACT')
            subprograma.full_clean()

    def test_subprograma_nombre_caracteres_no_numericos_no_permitidos(self):
        with self.assertRaisesMessage(ValidationError,
                                      "El presupuesto debe ser numérico."):
            subprograma = self.creaSubprogramaPersonal('ejemplo', '5000e',
                                                       'ACT')
            subprograma.full_clean()
class SubprogramaViewTests(TestCase):
    def setUp(self):
        self.programa = Programa(
            nombre='Programa para Jóvenes Zacatecanos',
            anio_ejercicio_fiscal=2019,
            recurso_asignado=600000,
            fuente='Gobierno',
            tipo='MEN',
            status='ACT',
            tipo_programa_p='APO',
        )
        self.programa.save()

        self.partida = Partida(
            numero_partida=3000,
            nombre_partida='Partida 1 de 3000',
            monto_partida=6700.00,
            programa=self.programa,
        )
        self.partida.save()

        self.usuario = User(username="******",
                            email="*****@*****.**",
                            password="******",
                            is_superuser=True)
        self.usuario.save()

        self.administrativo = Administrativo(nombre="usuario de prueba",
                                             primer_apellido='LOL',
                                             segundo_apellido='JJ',
                                             telefono='4949412345',
                                             foto='foto.png',
                                             usuario=self.usuario)
        self.administrativo.save()
        self.subp = test_models.SubprogramaModelTests.creaDefaultSubprograma(
            self)
        self.asigna_permisos_login()

    '''
    Vista Agregar subprograma
    '''

    def test_vistaAgregar_url(self):
        response = self.client.get('/subprograma/nuevo')
        self.assertEqual(response.status_code, 200)

    def test_vistaAgregar_nombre_url(self):
        response = self.client.get(reverse('nuevo_subprograma'))
        self.assertEqual(response.status_code, 200)

    def test_vistaAregar_html_correcto(self):
        response = self.client.get('/subprograma/nuevo')
        self.assertTemplateUsed(response, 'actividades/actividad_form.html')

    def test_vistaAregar_envio_datos_a_lista_subprograma(self):
        response = self.client.get('/subprograma/')
        self.assertEqual(response.context['object_list'][0].nombre,
                         'Subprograma De Referencia')

    '''
    Vista Editar subprograma
    '''

    def test_vistaEditar_url(self):
        response = self.client.get(f'/subprograma/editar/{self.subp.id}')
        self.assertEqual(response.status_code, 200)

    def test_vistaEditar_nombre_url(self):
        response = self.client.get(
            reverse('editar_subprograma', args=[self.subp.id]))
        self.assertEqual(response.status_code, 200)

    def test_vistaEditar_html_correcto(self):
        response = self.client.get(f'/subprograma/editar/{self.subp.id}')
        self.assertTemplateUsed(response, 'actividades/actividad_form.html')

    '''
    Vista Detalles/Ver subprograma
    '''

    def test_vistaVer_url(self):
        response = self.client.get(f'/subprograma/ver/{self.subp.id}')
        self.assertEqual(response.status_code, 200)

    def test_vistaVer_nombre_url(self):
        response = self.client.get(
            reverse('ver_subprograma', args=[self.subp.id]))
        self.assertEqual(response.status_code, 200)

    def test_vistaVer_html_correcto(self):
        response = self.client.get(f'/subprograma/ver/{self.subp.id}')
        self.assertTemplateUsed(response, 'actividades/actividad_detail.html')

    '''
    Vista lista subprograma
    '''

    def test_vistaLista_url(self):
        response = self.client.get('/subprograma/')
        self.assertEqual(response.status_code, 200)

    def test_vistaLista_nombre_url(self):
        response = self.client.get(reverse('lista_subprograma'))
        self.assertEqual(response.status_code, 200)

    def test_vistaLista_html_correcto(self):
        response = self.client.get('/subprograma/')
        self.assertTemplateUsed(response, 'actividades/actividad_list.html')

    def test_vistaLista_carga_datos(self):
        response = self.client.get('/subprograma/')
        self.assertIn('object_list', response.context)

    def test_vistaLista_envio_datos_a_Ver_subprograma(self):
        response = self.client.get(f'/subprograma/ver/{self.subp.id}')
        self.assertEqual(response.context['object'].nombre,
                         'Subprograma De Referencia')

    def test_vistaLista_envio_datos_a_Editar_subprograma(self):
        response = self.client.get(f'/subprograma/editar/{self.subp.id}')
        self.assertEqual(response.context['object'].nombre,
                         'Subprograma De Referencia')

    def asigna_permisos_login(self):
        user = User.objects.create_user(username='******',
                                        password='******',
                                        email='*****@*****.**',
                                        is_staff=True)
        new_group, created = Group.objects.get_or_create(
            name='director_operativo')
        new_subprograma, created = Group.objects.get_or_create(
            name='encargado_subprograma')
        new_group.permissions.add(
            Permission.objects.get(codename='add_subprograma'))
        new_group.permissions.add(
            Permission.objects.get(codename='view_subprograma'))
        new_group.permissions.add(
            Permission.objects.get(codename='change_subprograma'))
        user.groups.add(new_group)
        self.client.login(username='******', password='******')
示例#10
0
class TestModels(TestCase):
    def setUp(self,
              nombre='jorgesolis',
              correo='*****@*****.**',
              password='******'):
        self.usuario = User(username=nombre,
                            email=correo,
                            password=password,
                            is_superuser=True)
        self.administrativo = Administrativo(nombre='Jorge',
                                             primer_apellido='Solís',
                                             segundo_apellido='Galván',
                                             telefono='4949412345',
                                             foto='foto.png',
                                             usuario=self.usuario)

    def test_return_object_usuario(self):
        self.usuario.full_clean()
        self.usuario.save()
        self.assertEqual(User.objects.first().username, self.usuario.__str__())

    def test_nombre_es_requerido(self):
        usuario = User(email='*****@*****.**', password='******')
        with self.assertRaises(ValidationError):
            usuario.full_clean()

    def test_nombre_usuario_min_8_char(self):
        self.usuario.username = '******'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_usuario_no_acepta_espacios(self):
        self.usuario.username = '******'
        with self.assertRaises(ValidationError):
            self.usuario.full_clean()

    def test_nombre_usuario_no_acepta_caracteres_especiales(self):
        self.usuario.username = '******'
        self.administrativo.usuario = self.usuario

        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_usuario_no_acepta_numeros(self):
        self.usuario.username = '******'
        self.administrativo.usuario = self.usuario
        try:
            self.administrativo.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['username'][0])
            self.assertEqual(
                msg, 'El nombre de usuario no sigue el formato solicitado,' +
                ' favor de verificarlo.')

    def test_usuario_duplicado(self):
        self.usuario.save()
        usuario2 = User(username='******',
                        email='*****@*****.**',
                        password='******')
        try:
            usuario2.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['username'][0])
            self.assertEqual(msg, 'A user with that username already exists.')

    def test_correo_es_requerido(self):
        usuario = User(username='******', password='******')
        self.administrativo.usuario = usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_email_incorrecto(self):
        self.usuario.email = 'jasg15@gmail'
        with self.assertRaises(ValidationError):
            self.usuario.full_clean()

    def test_email_incorrecto_espacios(self):
        self.usuario.email = 'jasg15@gmail. com'
        with self.assertRaises(ValidationError):
            self.usuario.full_clean()

    def test_email_incorrecto_max_caracteres(self):
        self.usuario.email = '*****@*****.**' * 10
        with self.assertRaises(ValidationError):
            self.usuario.full_clean()

    def test_email_incorrecto_min_caracteres(self):
        self.usuario.email = 'j@g'
        with self.assertRaises(ValidationError):
            self.usuario.full_clean()

    def test_email_duplicado(self):
        self.usuario.save()
        usuario2 = User(username='******',
                        email='*****@*****.**',
                        password='******')
        try:
            usuario2.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['email'][0])
            self.assertEqual(
                msg,
                'El correo electrónico ingresado ya se encuentra registrado' +
                ' en el sistema. Favor de verificarlo.')

    def test_password_es_requerido(self):
        usuario = User(username='******', email='*****@*****.**')
        with self.assertRaises(ValidationError):
            usuario.full_clean()

    def test_password_incorrecto(self):
        self.usuario.password = '******'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_password_correcto(self):
        self.usuario.password = '******'
        self.usuario.full_clean()
        self.usuario.save()
        self.assertEqual(User.objects.first().password, self.usuario.password)

    def test_password_incorrecto_max_caracteres(self):
        self.usuario.password = '******' * 7
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_password_incorrecto_min_caracteres(self):
        self.usuario.password = '******'
        try:
            self.usuario.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['password'][0])
            self.assertEqual(
                msg,
                'La contraseña no sigue el formato solicitado: Mínimo 8 ' +
                'caracteres, máximo 50 caracteres mínimo una mayúscula,' +
                ' mínimo una minúscula, mínimo un número y mínimo un ' +
                'símbolo, favor de verificarla.')

    # Tests para modelo Administrativo

    def test_return_object_administrativo(self):
        self.usuario.full_clean()
        self.usuario.save()
        self.administrativo.usuario = self.usuario
        self.administrativo.full_clean()
        self.administrativo.save()
        self.assertEqual(Administrativo.objects.first().__str__(),
                         self.administrativo.__str__())

    def test_nombre_requerido(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = None
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_formato_incorrecto_numeros(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = 'Jorge1'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_formato_incorrecto_caracteres_especiales(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = 'Jorge+'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_max_caracteres(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = 'a' * 51
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_max_caracteres_mensaje(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = 'a' * 51
        self.administrativo.usuario = self.usuario
        try:
            self.administrativo.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['nombre'][0])
            self.assertEqual(
                msg, 'La longitud máxima del nombre es de 50 caracteres.')

    def test_nombre_min_caracteres(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = 'jo'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_nombre_espacio_al_inicio(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.nombre = ' Jorge'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_primer_apellido_requerido(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = None
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_primer_apellido_formato_incorrecto_numeros(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = 'Solis1'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_primer_apellido_formato_incorrecto_numeros_mensaje(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = 'Solis1'
        self.administrativo.usuario = self.usuario
        try:
            self.administrativo.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['primer_apellido'][0])
            self.assertEqual(
                msg,
                'Formato del primer apellido incorrecto, favor de veriicarlo.')

    def test_primer_apellido_formato_incorrecto_caracteres_especiales(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = 'Solis+'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_primer_apellido_max_caracteres(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = 'a' * 51
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_primer_apellido_min_caracteres(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = 'so'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_primer_apellido_espacio_al_inicio(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.primer_apellido = ' Solis'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_segundo_apellido_no_requerido(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = ''
        self.administrativo.usuario = self.usuario
        self.administrativo.full_clean()
        self.administrativo.save()
        self.assertEqual(Administrativo.objects.first().__str__(),
                         self.administrativo.__str__())

    def test_segundo_apellido_formato_incorrecto_numeros(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = 'Solis1'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_segundo_apellido_formato_incorrecto_caracteres_especiales(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = 'Solis+'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_segundo_apellido_max_caracteres(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = 'a' * 51
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_segundo_apellido_min_caracteres(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = 'so'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_segundo_apellido_min_caracteres_mensaje(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = 'So'
        self.administrativo.usuario = self.usuario
        try:
            self.administrativo.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['segundo_apellido'][0])
            self.assertEqual(
                msg,
                'La longitud mínima del segundo apellido es de 3 caracteres.')

    def test_segundo_apellido_espacio_al_inicio(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.segundo_apellido = ' Solis'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_foto_formato_incorrecto(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.foto = 'foto.gif'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_foto_formato_incorrecto_mensaje(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.foto = 'foto.gif'
        self.administrativo.usuario = self.usuario
        try:
            self.administrativo.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['foto'][0])
            self.assertEqual(msg, 'Formato de imagen inválido.')

    def test_foto_formato_correcto(self):
        self.usuario.full_clean()
        self.usuario.save()
        self.administrativo.usuario = self.usuario
        self.administrativo.full_clean()
        self.administrativo.save()
        self.assertEqual(Administrativo.objects.first().__str__(),
                         self.administrativo.__str__())

    def test_telefono_longitud_minima_incorrecta(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = '494941234'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_telefono_longitud_maxima_incorrecta(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = '49494123411'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_telefono_requerido(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = None
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_telefono_con_caracteres_especiales(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = '+494941234'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_telefono_con_espacios(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = '494941234 '
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_telefono_con_letras(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = '494941234f'
        self.administrativo.usuario = self.usuario
        with self.assertRaises(ValidationError):
            self.administrativo.full_clean()

    def test_telefono_formato_incorrecto_mensaje(self):
        self.usuario.full_clean()
        self.usuario.save()

        self.administrativo.telefono = '492121234g'
        self.administrativo.usuario = self.usuario
        try:
            self.administrativo.full_clean()
        except ValidationError as ex:
            msg = str(ex.message_dict['telefono'][0])
            self.assertEqual(msg, 'Formato del número de teléfono incorrecto.')

    def test_usuario_requerido(self):
        administrativo = Administrativo(
            nombre='Jorge',
            primer_apellido='Solís',
            segundo_apellido='Galván',
            telefono='4949412345',
            foto='foto.png',
        )
        with self.assertRaises(ValidationError):
            administrativo.full_clean()