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()
Esempio n. 2
0
    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 tres mil',
            monto_partida=6700.00,
            programa=self.programa,
        )
        self.partida.save()

        self.meta_programada = MetaPrograma(numero_actividades=5,
                                            numero_beneficiarios=100,
                                            numero_hombres=250,
                                            numero_mujeres=250,
                                            edad='ADU')

        self.meta_real = MetaReal(numero_actividades_r=5,
                                  numero_beneficiarios_r=700,
                                  numero_hombres_r=550,
                                  numero_mujeres_r=150,
                                  edad_r='NAD')
Esempio n. 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())
Esempio n. 4
0
 def guarda_programa_completo(self):
     self.programa_com = Programa(
         nombre='Programa para Jóvenes 2',
         anio_ejercicio_fiscal=2020,
         recurso_asignado=54500,
         fuente='Federal',
         tipo='Mensual',
         status='Activo',
     )
     self.programa_com.save()
     self.partida_com = Partida(
         numero_partida=3000,
         nombre_partida='Partida de Tres Mil prueba',
         monto_partida=6700.00,
         programa=self.programa_com,
     )
     self.partida_com.save()
     self.metas_es_com = MetaPrograma(
         numero_actividades=5,
         numero_beneficiarios=100,
         numero_hombres=250,
         numero_mujeres=250,
         edad='Jóvenes',
         meta_esperada=True,
         programa=self.programa_com,
     )
     self.metas_es_com.save()
     self.metas_re_com = MetaReal(
         numero_actividades_r=99,
         numero_beneficiarios_r=100,
         numero_hombres_r=250,
         numero_mujeres_r=250,
         edad_r='Jóvenes',
         meta_esperada_r=False,
         programa_r=self.programa_com,
     )
     self.metas_re_com.save()
     return self.programa_com
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()
Esempio n. 6
0
class TestViews(TestCase):
    def setUp(self,
              nombre="Programa para Jóvenes Zacatecanos",
              anio_ejercicio_fiscal=2019,
              recurso_asignado=600000,
              fuente='Trimestral'):
        self.programa = Programa(
            nombre=nombre,
            anio_ejercicio_fiscal=anio_ejercicio_fiscal,
            recurso_asignado=recurso_asignado,
            fuente=fuente,
            tipo='Mensual',
            status='Activo',
        )

        self.data = {
            'numero_partida': 3000,
            'nombre_partida': 'Partida de Tres Mil',
            'monto_partida': 6700.00,
            # 'programa' : Programa.objects.first().id,
        }

        self.data_programa = {
            'nombre': 'Programa de Recursos',
            'anio_ejercicio_fiscal': 1998,
            'recurso_asignado': 50000,
            'fuente': 'Nacional',
            'tipo': 'MEN',
            'status': 'ACT',
            'tipo_programa_p': 'APO',
            'numero_actividades': 7,
            'numero_beneficiarios': 900,
            'numero_hombres': 333,
            'numero_mujeres': 444,
            'edad': 'ADU',
            'numero_actividades_r': 5,
            'numero_beneficiarios_r': 500,
            'numero_hombres_r': 250,
            'numero_mujeres_r': 250,
            'edad_r': 'ADU',
            'numero_partida': 3000,
            'nombre_partida': 'Partida de Tres Mil',
            'monto_partida': 6700.00,
        }

    # Test para programa nuevo
    # Verificar que si puede acceder a la URL indicada
    def test_url_programa_crear(self):
        response = self.client.get('/programa/nuevo')
        self.assertEqual(response.status_code, 200)

    # Ahora se hace la prueba de llamada por el nombre
    def test_nombre_url_programa_crear(self):
        response = self.client.get(reverse('nuevo_programa'))
        self.assertEqual(response.status_code, 200)

    # Probar un template que yo quiero utilizar
    def test_template_correcto_programa_crear(self):
        response = self.client.get('/programa/nuevo')
        self.assertTemplateUsed(response, 'programas/programa_form.html')

    def test_titulo_se_encuentra_en_el_template_programa_nuevo(self):
        response = self.client.get('/programa/nuevo')
        titulo_pagina = '<title>Crear Nuevo Programa</title>'
        self.assertInHTML(titulo_pagina, response.rendered_content)

    def test_agrega_programa_form(self):
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.client.get('/programa/nuevo')
        self.assertEqual(Programa.objects.all().count(), 1)

    def test_anio_ejercicio_fis_formulario_se_encuentra_en_el_template(self):
        response = self.client.get('/programa/nuevo')
        label = '<p><label for="id_anio_ejercicio_fiscal">Año Fiscal:</label> '
        label += '<input type="number" name="anio_ejercicio_fiscal" value="0" '
        label += 'required id="id_anio_ejercicio_fiscal" class="form-control">'
        label += '</p>'
        self.assertInHTML(label, response.rendered_content)

    def test_no_agrega_sin_nombre_del_programa(self):
        self.data_programa['nombre'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_anio_fiscal_programa(self):
        self.data_programa['anio_ejercicio_fiscal'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_recurso_asignado_programa(self):
        self.data_programa['recurso_asignado'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_fuente_programa(self):
        self.data_programa['fuente'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_status_programa(self):
        self.data_programa['status'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_tipo_programa(self):
        self.data_programa['tipo'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_tipo_programa_p_programa(self):
        self.data_programa['tipo_programa_p'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    @skip
    def test_redirige_a_otra_url_despues_de_agregar_programa(self):
        response = self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(response.url, '/programa/')

    # Test para partida
    def test_agrega_partida_form(self):
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.client.get('/programa/nuevo')
        self.assertEqual(Programa.objects.all().count(), 1)

    def test_no_agrega_sin_numero_de_partida(self):
        self.data_programa['numero_partida'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_nombre_de_partida(self):
        self.data_programa['nombre_partida'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_monto_de_partida(self):
        self.data_programa['monto_partida'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    # Test para Meta Programada
    def test_agrega_meta_programada_form(self):
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.client.get('/programa/nuevo')
        self.assertEqual(Programa.objects.all().count(), 1)

    def test_no_agrega_sin_numero_de_actividades(self):
        self.data_programa['numero_actividades'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_numero_de_beneficiarios(self):
        self.data_programa['numero_beneficiarios'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_numero_de_hombres(self):
        self.data_programa['numero_hombres'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_numero_de_mujeres(self):
        self.data_programa['numero_mujeres'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_rango_edad(self):
        self.data_programa['edad'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    # Test para Meta Real
    def test_agrega_meta_real_form(self):
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.client.get('/programa/nuevo')
        self.assertEqual(Programa.objects.all().count(), 1)

    def test_no_agrega_sin_numero_de_actividades_reales(self):
        self.data_programa['numero_actividades_r'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_numero_de_beneficiarios_reales(self):
        self.data_programa['numero_beneficiarios_r'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_numero_de_hombres_reales(self):
        self.data_programa['numero_hombres_r'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_numero_de_mujeres_reales(self):
        self.data_programa['numero_mujeres_r'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    def test_no_agrega_sin_rango_edad_reales(self):
        self.data_programa['edad_r'] = ''
        self.client.post('/programa/nuevo', data=self.data_programa)
        self.assertEqual(Programa.objects.all().count(), 0)

    # Test para listar programas
    # Verificar que si puede acceder a la URL indicada
    def test_url_programa_listado(self):
        response = self.client.get('/programa/')
        self.assertEqual(response.status_code, 200)

    # Ahora se hace la prueba de llamada por el nombre
    def test_nombre_url_programa_listado(self):
        response = self.client.get(reverse('lista_programa'))
        self.assertEqual(response.status_code, 200)

    # Probar un template que yo quiero utilizar
    def test_template_correcto_programa_listado(self):
        response = self.client.get('/programa/')
        self.assertTemplateUsed(response, 'programas/programa_list.html')

    def test_titulo_se_encuentra_en_el_template_programa_listado(self):
        response = self.client.get('/programa/')
        titulo_pagina = '<title>Lista de Programas</title>'
        self.assertInHTML(titulo_pagina, response.rendered_content)

    def test_envio_datos_programas(self):
        self.guarda_programa_completo()
        response = self.client.get('/programa/')
        self.assertIn('object_list', response.context)

    def test_envio_programa_jovenes_datos(self):
        self.guarda_programa_completo()
        response = self.client.get('/programa/')
        # print(response.context['object_list'][0])
        self.assertEqual('Programa para Jóvenes 2',
                         response.context['object_list'][0].nombre)

    def test_se_encuentre_en_el_template_programa_jovenes(self):
        self.guarda_programa_completo()
        response = self.client.get('/programa/')
        self.assertContains(response, 'Programa para Jóvenes 2')

    def test_programa_joven_se_encuentre_en_template_dentro_de_td(self):
        self.guarda_programa_completo()
        response = self.client.get('/programa/')
        self.assertInHTML('<td>Programa para Jóvenes 2</td>',
                          response.rendered_content)

    # Tests para editar programas
    def test_url_programa_editar(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        response = self.client.get('/programa/editar/' + str(id))
        self.assertEqual(response.status_code, 200)

    def test_template_correcto_programa_editar(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        response = self.client.get('/programa/editar/' + str(id))
        self.assertTemplateUsed(response, 'programas/programa_edit.html')

    def test_editar_programa(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        data_solo_programa = {
            'nombre': 'Programa de Recursos Modificado en POST',
            'anio_ejercicio_fiscal': 1998,
            'recurso_asignado': 50000,
            'fuente': 'Nacional',
            'tipo': 'MEN',
            'status': 'ACT',
            'tipo_programa_p': 'APO',
            'numero_actividades': 7,
            'numero_beneficiarios': 900,
            'numero_hombres': 333,
            'numero_mujeres': 444,
            'edad': 'ADU',
            'numero_actividades_r': 5,
            'numero_beneficiarios_r': 500,
            'numero_hombres_r': 250,
            'numero_mujeres_r': 250,
            'edad_r': 'ADU',
            'numero_partida': 3000,
            'nombre_partida': 'Partida Modificado',
            'monto_partida': 6700.00,
        }
        self.client.post('/programa/editar/' + str(id),
                         data=data_solo_programa)
        self.assertEqual(Programa.objects.first().nombre,
                         'Programa de Recursos Modificado en POST')

    def test_editar_partida(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id

        data_solo_partida = {
            'nombre': 'Programa de Recursos',
            'anio_ejercicio_fiscal': 1998,
            'recurso_asignado': 50000,
            'fuente': 'Nacional',
            'tipo': 'MEN',
            'status': 'ACT',
            'tipo_programa_p': 'APO',
            'numero_actividades': 7,
            'numero_beneficiarios': 900,
            'numero_hombres': 333,
            'numero_mujeres': 444,
            'edad': 'ADU',
            'numero_actividades_r': 5,
            'numero_beneficiarios_r': 500,
            'numero_hombres_r': 250,
            'numero_mujeres_r': 250,
            'edad_r': 'ADU',
            'numero_partida': 3000,
            'nombre_partida': 'Partida Modificado en POST',
            'monto_partida': 6700.00,
        }
        self.client.post('/programa/editar/' + str(id), data=data_solo_partida)
        self.assertEqual(Partida.objects.first().nombre_partida,
                         'Partida Modificado en POST')

    def test_editar_metas_reales(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id

        data_solo_meta_real = {
            'nombre': 'Programa de Recursos',
            'anio_ejercicio_fiscal': 1998,
            'recurso_asignado': 50000,
            'fuente': 'Nacional',
            'tipo': 'MEN',
            'status': 'ACT',
            'tipo_programa_p': 'APO',
            'numero_actividades': 7,
            'numero_beneficiarios': 900,
            'numero_hombres': 333,
            'numero_mujeres': 444,
            'edad': 'ADU',
            'numero_actividades_r': 5,
            'numero_beneficiarios_r': 500,
            'numero_hombres_r': 250,
            'numero_mujeres_r': 250,
            'edad_r': 'ADU',
            'numero_partida': 3000,
            'nombre_partida': 'Partida Modificado en POST',
            'monto_partida': 6700.00,
        }
        self.client.post('/programa/editar/' + str(id),
                         data=data_solo_meta_real)
        self.assertEqual(MetaReal.objects.first().numero_actividades_r, 5)

    def test_editar_metas_esperadas(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id

        data_solo_meta_esperada = {
            'nombre': 'Programa de Recursos',
            'anio_ejercicio_fiscal': 1998,
            'recurso_asignado': 50000,
            'fuente': 'Nacional',
            'tipo': 'MEN',
            'status': 'ACT',
            'tipo_programa_p': 'APO',
            'numero_actividades': 7,
            'numero_beneficiarios': 900,
            'numero_hombres': 333,
            'numero_mujeres': 444,
            'edad': 'ADU',
            'numero_actividades_r': 5,
            'numero_beneficiarios_r': 500,
            'numero_hombres_r': 250,
            'numero_mujeres_r': 250,
            'edad_r': 'ADU',
            'numero_partida': 3000,
            'nombre_partida': 'Partida Modificado en POST',
            'monto_partida': 6700.00,
        }
        self.client.post('/programa/editar/' + str(id),
                         data=data_solo_meta_esperada)
        self.assertEqual(MetaPrograma.objects.first().numero_actividades, 7)

    def test_editar_nombre_incorrecto_form(self):
        # self.programa.save()
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        data_solo_programa = {
            'nombre': '',
            'anio_ejercicio_fiscal': 1998,
            'recurso_asignado': 50000,
            'fuente': 'Nacional',
            'tipo': 'MEN',
            'status': 'ACT',
            'tipo_programa_p': 'APO',
            'numero_actividades': 7,
            'numero_beneficiarios': 900,
            'numero_hombres': 333,
            'numero_mujeres': 444,
            'edad': 'ADU',
            'numero_actividades_r': 5,
            'numero_beneficiarios_r': 500,
            'numero_hombres_r': 250,
            'numero_mujeres_r': 250,
            'edad_r': 'ADU',
            'numero_partida': 3000,
            'nombre_partida': 'Partida Modificado',
            'monto_partida': 6700.00,
        }
        self.client.post('/programa/editar/' + str(id),
                         data=data_solo_programa)
        self.assertEqual(Programa.objects.first().nombre,
                         'Programa para Jóvenes 2')

    # Test para desactivar programa

    def test_boton_desactivar_programa_template(self):
        self.guarda_programa_completo()
        response = self.client.get('/programa/')
        id = Programa.objects.first().id

        # print(Programa.objects.first().status)
        self.assertInHTML(
            '<a href="/programa/desactivar/' + str(id) +
            '" class="btn btn-danger btn-sm">Desactivar</a>',
            response.rendered_content)

    def test_url_programa_desactivar_redirige(self):
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        response = self.client.get('/programa/desactivar/' + str(id))
        self.assertEqual(response.status_code, 302)

    def test_url_programa_desactivar_redirige_URL_correcta(self):
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        response = self.client.get('/programa/desactivar/' + str(id))
        self.assertEqual(response.url, '/programa/')

    def test_desactivar_programa_response(self):
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        self.client.post('/programa/desactivar/' + str(id))
        self.assertNotEqual(Programa.objects.first().status, 'Act')

    def test_desactivar_programa_ya_desactivado(self):
        programa = Programa(
            nombre='Programa para Jóvenes Tres',
            anio_ejercicio_fiscal=2022,
            recurso_asignado=54501,
            fuente='Federal',
            tipo='Mensual',
            status='Inactivo',
        )
        programa.save()
        id = Programa.objects.first().id
        self.client.post('/programa/desactivar/' + str(id))
        self.assertNotEqual(Programa.objects.first().status, 'Act')

    # Test para reactivar programa
    def test_boton_reactivar_programa_template(self):
        programa = Programa(
            nombre='Programa para Jóvenes Tres',
            anio_ejercicio_fiscal=2022,
            recurso_asignado=54501,
            fuente='Federal',
            tipo='Mensual',
            status='Inactivo',
        )
        # self.guarda_programa_completo()
        programa.save()
        response = self.client.get('/programa/')
        id = Programa.objects.first().id
        self.assertInHTML(
            '<a href="/programa/reactivar/' + str(id) +
            '" class="btn btn-primary btn-sm">Reactivar</a>',
            response.rendered_content)

    def test_url_programa_reactivar_redirige(self):
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        response = self.client.get('/programa/reactivar/' + str(id))
        self.assertEqual(response.status_code, 302)

    def test_reactivar_programa_response(self):
        # self.guarda_programa_completo()
        programa = Programa(
            nombre='Programa para Jóvenes Cuatro',
            anio_ejercicio_fiscal=2053,
            recurso_asignado=54501,
            fuente='Federal',
            tipo='Mensual',
            status='Inactivo',
        )
        programa.save()
        id = Programa.objects.first().id
        self.client.post('/programa/reactivar/' + str(id))
        self.assertEqual(Programa.objects.first().status, 'ACT')

    def test_url_programa_reactivar_redirige_URL_correcta(self):
        self.guarda_programa_completo()
        id = Programa.objects.first().id
        response = self.client.get('/programa/reactivar/' + str(id))
        self.assertEqual(response.url, '/programa/')

    def test_reactivar_usuario_ya_activado(self):
        programa = Programa(
            nombre='Programa para Jóvenes Tres',
            anio_ejercicio_fiscal=2022,
            recurso_asignado=54501,
            fuente='Federal',
            tipo='Mensual',
            status='Activo',
        )
        programa.save()
        id = Programa.objects.first().id
        self.client.post('/programa/reactivar/' + str(id))
        self.assertEqual(Programa.objects.first().status, 'Act')

    # Ahora se hace la prueba de llamada por el nombre
    # def test_nombre_url_programa_desactivar(self):
    #    response = self.client.get(reverse('desactivar_programa'))
    #    self.assertEqual(response.status_code, 200)

    def guarda_programa_completo(self):
        self.programa_com = Programa(
            nombre='Programa para Jóvenes 2',
            anio_ejercicio_fiscal=2020,
            recurso_asignado=54500,
            fuente='Federal',
            tipo='Mensual',
            status='Activo',
        )
        self.programa_com.save()
        self.partida_com = Partida(
            numero_partida=3000,
            nombre_partida='Partida de Tres Mil prueba',
            monto_partida=6700.00,
            programa=self.programa_com,
        )
        self.partida_com.save()
        self.metas_es_com = MetaPrograma(
            numero_actividades=5,
            numero_beneficiarios=100,
            numero_hombres=250,
            numero_mujeres=250,
            edad='Jóvenes',
            meta_esperada=True,
            programa=self.programa_com,
        )
        self.metas_es_com.save()
        self.metas_re_com = MetaReal(
            numero_actividades_r=99,
            numero_beneficiarios_r=100,
            numero_hombres_r=250,
            numero_mujeres_r=250,
            edad_r='Jóvenes',
            meta_esperada_r=False,
            programa_r=self.programa_com,
        )
        self.metas_re_com.save()
        return self.programa_com
Esempio n. 7
0
class TestModels(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 tres mil',
            monto_partida=6700.00,
            programa=self.programa,
        )
        self.partida.save()

        self.meta_programada = MetaPrograma(numero_actividades=5,
                                            numero_beneficiarios=100,
                                            numero_hombres=250,
                                            numero_mujeres=250,
                                            edad='ADU')

        self.meta_real = MetaReal(numero_actividades_r=5,
                                  numero_beneficiarios_r=700,
                                  numero_hombres_r=550,
                                  numero_mujeres_r=150,
                                  edad_r='NAD')

    def test_agrega_modelo_programa(self):
        self.assertEqual(Programa.objects.count(), 1)

    def test_return_object_programa(self):
        self.programa.full_clean()
        self.programa.save()
        self.assertEqual(self.programa.nombre, self.programa.return_nombre())

    def test_return_object_partida(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.full_clean()
        self.partida.save()
        self.assertEqual(Partida.objects.first().__str__(),
                         self.partida.nombre_partida.__str__())

    def test_nombre_programa_es_requerido(self):
        self.programa.nombre = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_nombre_programa_min_5_caracteres(self):
        self.programa.nombre = 'prog'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_nombre_programa_formato_incorrecto_caracteres_especiales(self):
        self.programa.nombre = '$$$$&%programa%&$$$'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_nombre_programa_caracteres_numericos_no_permitidos(self):
        self.programa.nombre = 'programa Niños 9999'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_max_longitud_nombre_programa(self):
        self.programa.nombre = 'Este es un nombre que es demasiado largo' * 2
        self.assertLess(len(self.programa.nombre), 100)

    def test_longitud_nombre_excedida(self):
        self.programa.nombre = 'Este es un nombre que es demasiado largo' * 10

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

    def test_nombre_programa_primer_caracter_espacio_no_permitido(self):
        self.programa.nombre = ' programa Niños'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_nombre_programa_no_puede_estar_vacio(self):
        self.programa.nombre = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_anio_fiscal_programa_es_requerido(self):
        self.programa.anio_ejercicio_fiscal = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_anio_fiscal_programa_no_puede_estar_vacio(self):
        self.programa.anio_ejercicio_fiscal = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_anio_fiscal_programa_no_acepta_caracteres_especiales(self):
        self.programa.anio_ejercicio_fiscal = '$$$7###/'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_anio_fiscal_programa_no_acepta_caracteres(self):
        self.programa.anio_ejercicio_fiscal = 'Año dos mil diez'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_anio_fiscal_programa_debe_tener_4_digitos(self):
        self.programa.anio_ejercicio_fiscal = 15
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_recurso_asignado_programa_es_requerido(self):
        self.programa.recurso_asignado = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_recurso_asignado_programa_no_puede_estar_vacio(self):
        self.programa.recurso_asignado = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_recurso_asignado_programa_no_acepta_caracteres_especiales(self):
        self.programa.recurso_asignado = '$$=$'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_recurso_asignado_programa_no_acepta_caracteres(self):
        self.programa.recurso_asignado = 'Año dos mil diez 2017'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_recurso_asignado_programa_valor_minimo_de_0(self):
        self.programa.recurso_asignado = -56
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_recurso_asignado_programa_valor_maximo_de_6000000(self):
        self.programa.recurso_asignado = 6000000.01
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_es_requerido(self):
        self.programa.fuente = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_no_puede_estar_vacio(self):
        self.programa.fuente = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_no_caracteres_especiales(self):
        self.programa.fuente = '#%Secretaría de Economía%&'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_no_caracteres_numericos(self):
        self.programa.fuente = 'Secretaría9'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_no_debe_rebasar_100_caracteres(self):
        self.programa.fuente = 'A' * 120
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_debe_ser_mayor_a_5_caracteres(self):
        self.programa.fuente = 'tres'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_fuente_programa_primer_caracter_sin_espacio(self):
        self.programa.fuente = ' Programa de Apoyo a Familias'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_tipo_programa_selecciona_opcion_invalida(self):
        self.programa.tipo = 'Esta opción no existe'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_tipo_programa_requerida(self):
        self.programa.tipo = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_tipo_programa_no_vacio(self):
        self.programa.tipo = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_status_programa_no_vacio(self):
        self.programa.status = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_status_programa_requerido(self):
        self.programa.status = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_status_programa_selecciona_opcion_invalida(self):
        self.programa.status = 'Status No Válido'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_tipo_programa_p_vacio(self):
        self.programa.tipo_programa_p = ''
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_tipo_programa_p_requerido(self):
        self.programa.tipo_programa_p = None
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    def test_tipo_programa_p_selecciona_opcion_invalida(self):
        self.programa.tipo_programa_p = 'Opción inválida'
        with self.assertRaises(ValidationError):
            self.programa.full_clean()

    # Campos de Partida

    def test_numero_partida_vacia(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.numero_partida = ''
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_numero_partida_requerida(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.numero_partida = None
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_numero_partida_caracteres_no_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.numero_partida = '%&%&%'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_numero_partida_caracteres_no_permitidos(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.numero_partida = 'Dos mil setenta y cuatro'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_numero_partida_debe_tener_4_digitos(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.numero_partida = 915
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_no_vacia(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = ''
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = None
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = '$#Especial#$'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_no_numeros_permitidos(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = 'Partida 3000'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_con_espacio_al_inicio(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = ' Partida correcta'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_rebasa_cantidad_maxima_de_70_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = 'S' * 71
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_nombre_partida_es_menor_a_cantidad_minima_de_5_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.nombre_partida = 'Nom'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_monto_partida_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.monto_partida = None
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_monto_partida_no_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.monto_partida = ''
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_monto_partida_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.monto_partida = '$$$$###12'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_monto_partida_no_caracteres_permitidos(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.monto_partida = 'doscientos'
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_monto_partida_no_mayor_a_6000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.monto_partida = 9000000
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    def test_monto_partida_no_menor_a_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.partida.programa = self.programa
        self.partida.monto_partida = -15
        with self.assertRaises(ValidationError):
            self.partida.full_clean()

    # Metas programadas
    def test_meta_programada_act_no_vacia(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_actividades = ''
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_act_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_actividades = None
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_act_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_actividades = '$$$$$'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_act_no_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_actividades = 'Numero de actividades'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_act_valor_minimo_de_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_actividades = -1
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_act_valor_maximo_de_100(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_actividades = 102
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_ben_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_beneficiarios = ''
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_ben_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_beneficiarios = None
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_ben_no_acepta_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_beneficiarios = '$###$'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_ben_no_acepta_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_beneficiarios = 'beneficiarios'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_ben_no_debe_ser_menor_a_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_beneficiarios = -12
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_ben_no_debe_ser_mayor_a_9000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_beneficiarios = 9000001
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_hom_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_hombres = ''
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_hom_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_hombres = None
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_hom_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_hombres = '$##$$##'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_hom_no_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_hombres = 'quinientos'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_hom_valor_minimo_de_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_hombres = -13
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_hom_valor_minimo_de_9000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_hombres = 9000001
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_muj_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_mujeres = ''
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_muj_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_mujeres = None
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_muj_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_mujeres = '$##$$##'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_muj_no_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_mujeres = 'quinientos'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_muj_valor_minimo_de_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_mujeres = -13
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_muj_valor_minimo_de_9000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.numero_mujeres = 9000001
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_edad_opcion_incorrecta(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.edad = 'AME'
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_edad_no_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.edad = ''
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    def test_meta_programada_edad_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_programada.programa = self.programa
        self.meta_programada.edad = None
        with self.assertRaises(ValidationError):
            self.meta_programada.full_clean()

    # Metas Reales
    def test_meta_real_act_no_vacia(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_actividades_r = ''
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_act_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_actividades_r = None
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_act_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_actividades_r = '$$$$$'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_act_no_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_actividades_r = 'Numero de actividades'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_act_valor_minimo_de_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_actividades_r = -1
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_act_valor_maximo_de_100(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_actividades_r = 102
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_ben_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_beneficiarios_r = ''
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_ben_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_beneficiarios_r = None
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_ben_no_acepta_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_beneficiarios_r = '$###$'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_ben_no_acepta_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_beneficiarios_r = 'beneficiarios'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_ben_no_debe_ser_menor_a_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_beneficiarios_r = -12
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_ben_no_debe_ser_mayor_a_9000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_beneficiarios_r = 9000001
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_hom_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_hombres_r = ''
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_hom_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_hombres_r = None
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_hom_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_hombres_r = '$##$$##'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_hom_no_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_hombres_r = 'quinientos'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_hom_valor_minimo_de_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_hombres_r = -13
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_hom_valor_minimo_de_9000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_hombres_r = 9000001
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_muj_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_mujeres_r = ''
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_muj_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_mujeres_r = None
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_muj_no_caracteres_especiales(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_mujeres_r = '$##$$##'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_muj_no_caracteres(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_mujeres_r = 'quinientos'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_muj_valor_minimo_de_0(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_mujeres_r = -13
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_muj_valor_minimo_de_9000000(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.numero_mujeres_r = 9000001
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_edad_r_opcion_incorrecta(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.edad_r = 'AUD'
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_edad_r_no_vacio(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.edad_r = ''
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    def test_meta_real_edad_r_requerido(self):
        self.programa.full_clean()
        self.programa.save()
        self.meta_real.programa_r = self.programa
        self.meta_real.edad_r = None
        with self.assertRaises(ValidationError):
            self.meta_real.full_clean()

    # Fail
    @skip
    def test_nombre_programa_nombre_requerido(self):
        self.programa.nombre = None
        try:
            self.programa.full_clean()
        except ValidationError as ex:
            message = str(ex.message_dict['nombre'][0])
            self.assertEqual(message, LONGITUD_MAXIMA)

    def test_return_object_partida_correcto(self):
        self.partida.full_clean()
        self.partida.save()
        self.assertEqual(self.partida.nombre_partida, self.partida.__str__())

    # Fail
    @skip
    def test_anio_ejercicio_fiscal_requerido(self):
        self.programa.anio_ejercicio_fiscal = None
        try:
            self.programa.full_clean()
        except ValidationError as ex:
            message = str(ex.message_dict['anio_ejercicio_fiscal'][0])
            self.assertEqual(message, LONGITUD_MAXIMA)

    def test_prueba_texto_de_error_nombre_programa(self):
        self.programa.nombre = 'Este es un nombre que es demasiado largo.' * 11
        try:
            self.programa.full_clean()
        except ValidationError as ex:
            message = str(ex.message_dict['nombre'][0])
            self.assertEqual(message, LONGITUD_MAXIMA)

    def test_insercion_del_programa(self):
        self.programa.save()
        self.assertEqual(Programa.objects.all()[0], self.programa)
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='******')