Exemplo n.º 1
0
 def setUp(self):
     self.app = create_app('testing')
     self.app_context = self.app.app_context()
     self.app_context.push()
     db.create_all()
     self.client = self.app.test_client(use_cookies=True)
     self.inscripcion_repository = InscripcionRepository(db.session)
Exemplo n.º 2
0
def register_admin_in(inscripcion_id, admin):
    inscripcion_repository = InscripcionRepository(db.session)
    inscripcion = inscripcion_repository.find_by(inscripcion_id)
    if not inscripcion.is_managed_by(admin):
        inscripcion.administradores.append(admin)
        inscripcion_repository.update(inscripcion)
        print(f"'{admin}' fue agregado a '{inscripcion.localidad}' con exito")
    else:
        print(f"'{admin}' ya existe como admin en '{inscripcion.localidad}'")
class ParticipanteRepositoryTestCase(unittest.TestCase):
    def setUp(self):
        db.create_all()
        self.inscripcion_repository = InscripcionRepository(db.session)
        self.participante_repository = ParticipanteRepository(db.session)
        self.inscripcion = InscripcionBuilder().build()
        self.inscripcion_repository.add(self.inscripcion)

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    @unittest.skip("Applying validations over monto")
    def test_find_by_with_none_monto(self):
        participante = ParticipanteBuilder(monto=None).build()
        self.participante_repository.add(participante, self.inscripcion.id)

        response = self.participante_repository.find_by(participante.id)

        self.assertEqual(participante.id, response.id)

    @unittest.skip("Applying validations over monto")
    def test_find_all_with_none_monto(self):
        participante = ParticipanteBuilder(monto=None).build()
        self.participante_repository.add(participante, self.inscripcion.id)

        response = self.participante_repository.find_all(self.inscripcion.id)

        self.assertEqual(participante.id, response[0].id)

    def test_delete_by_id(self):
        participante = ParticipanteBuilder().build()
        self.participante_repository.add(participante, self.inscripcion.id)

        self.participante_repository.delete(participante)

        self.assertIsNone(self.participante_repository.find_by(
            participante.id))
Exemplo n.º 4
0
class InscripcionIntTestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()
        self.client = self.app.test_client(use_cookies=True)
        self.inscripcion_repository = InscripcionRepository(db.session)
        self.participante_repository = ParticipanteRepository(db.session)

    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()

    def test_show_login_in_main_route(self):
        response = self.client.get('/', follow_redirects=True)

        self.assertEqual(response.status_code, 200)

    def test_show_an_inscripcion(self):
        self._login('usuario_1', 'secreto')
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1'])

        participante = ParticipanteBuilder(monto=Decimal('25.00')).build()

        if feature.is_enabled("COMPROBANTE_PAGO"):
            inscripcion.comprobante_uri = 'https://s3.aws.com/comprobante.jpg'
        self.inscripcion_repository.add(inscripcion)
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(f"/inscripciones/{inscripcion.id}")

        self.assertEqual(response.status_code, 200)
        self._assert_static_text(str(inscripcion.id), response)
        self._assert_static_text(inscripcion.localidad, response)
        self._assert_static_text(inscripcion.servidor, response)
        self._assert_static_text('25.00', response)
        if feature.is_enabled("COMPROBANTE_PAGO"):
            self.assertTrue(inscripcion.comprobante_uri in response.get_data(
                as_text=True))

    def test_not_show_if_current_user_does_not_belong_to_admin_group(self):
        self._login('usuario_1', 'secreto')
        inscripcion = Inscripcion(
            id=uuid.uuid1(),
            localidad='Quito',
            servidor='Conny Riera',
            fecha='2018-08-01',
            administradores=['usuario_admin', 'usuario_2'])
        self.inscripcion_repository.add(inscripcion)

        response = self.client.get(f"/inscripciones/{inscripcion.id}")

        self.assertEqual(response.status_code, 403)

    def test_index_of_inscripcion(self):
        self._login('usuario_1', 'secreto')
        inscripcion_1 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Quito',
                                    servidor='Conny Riera',
                                    fecha='2018-09-01',
                                    administradores=['usuario_1', 'admin'])

        inscripcion_2 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Santo Domingo',
                                    servidor='Maria Isabel ',
                                    fecha='2018-08-31',
                                    administradores=['usuario_1', 'admin'])

        self.inscripcion_repository.add(inscripcion_1)
        self.inscripcion_repository.add(inscripcion_2)

        participante_1 = ParticipanteBuilder(id=uuid.uuid1(),
                                             fecha_inscripcion=datetime.date(
                                                 2018, 8, 15),
                                             monto=Decimal('25.00')).build()
        participante_2 = ParticipanteBuilder(id=uuid.uuid1(),
                                             fecha_inscripcion=datetime.date(
                                                 2018, 8, 15),
                                             monto=Decimal('25.00')).build()

        self.participante_repository.add(participante_1, inscripcion_1.id)
        self.participante_repository.add(participante_2, inscripcion_2.id)

        response = self.client.get(f"/inscripciones")

        self.assertEqual(response.status_code, 200)
        self._assert_static_text(str(inscripcion_1.id), response)
        self._assert_static_text(str(inscripcion_2.id), response)
        self._assert_static_text(inscripcion_1.localidad, response)
        self._assert_static_text(inscripcion_2.localidad, response)
        self._assert_static_text("Total inscritos: </b>1", response)
        self._assert_static_text("Monto total: </b>$25 USD", response)

    def test_new_inscripcion(self):
        self._login()
        response = self.client.get("/inscripciones/new")

        self.assertEqual(response.status_code, 200)

        self._assert_static_text('Nombre de la Localidad', response)
        self._assert_static_text('Nombre del servidor/a', response)
        self._assert_static_text('Fecha de pago', response)
        if feature.is_enabled("COMPROBANTE_PAGO"):
            self.assertTrue('Comprobante de pago' in response.get_data(
                as_text=True))

    def test_create_an_inscripcion(self):
        self._login()
        inscripcion_data = {
            'localidad': 'Quito',
            'servidor': 'Conny Riera',
            'monto': '150.00',
            'fecha': '2018-08-01'
        }

        if feature.is_enabled("COMPROBANTE_PAGO"):
            inscripcion_data = {
                'localidad':
                'Quito',
                'servidor':
                'Conny Riera',
                'monto':
                '150.00',
                'fecha':
                '2018-08-01',
                'comprobante_uri':
                (BytesIO('Comprobante sample content'.encode('utf-8')),
                 'comprobante.jpg')
            }

        response = self.client.post('/inscripciones/new',
                                    content_type='multipart/form-data',
                                    buffered=True,
                                    data=inscripcion_data)

        inscripciones = self.inscripcion_repository.find_all()
        filtered_inscripcion = list(
            filter(
                lambda i: i.localidad == 'Quito' and i.servidor ==
                'Conny Riera', inscripciones))
        self.assertTrue(len(filtered_inscripcion) == 1)
        self.assertEqual(response.status_code, 302)

    def test_should_return_form_for_edit_an_inscripcion(self):
        self._login('conny', 'secreto')
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['conny', 'admin'])

        self.inscripcion_repository.add(inscripcion)

        response = self.client.get(f"/inscripciones/{inscripcion.id}/edit")

        self.assertEqual(response.status_code, 200)
        self._assert_static_text(inscripcion.localidad, response)
        self._assert_static_text(inscripcion.servidor, response)
        self._assert_static_text(inscripcion.fecha, response)

    def test_not_allow_edit_if_current_user_is_not_admin(self):
        self._login('conny', 'secreto')
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['raul', 'admin'])

        self.inscripcion_repository.add(inscripcion)

        response = self.client.get(f"/inscripciones/{inscripcion.id}/edit")

        self.assertEqual(response.status_code, 403)

    def test_should_edit_an_inscripcion(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])

        if feature.is_enabled("COMPROBANTE_PAGO"):
            inscripcion.comprobante_uri = 'comprobante.jpg'

        self.inscripcion_repository.add(inscripcion)

        inscripcion_data = {
            'localidad': 'Quito Norte',
            'servidor': 'Raul Riera',
            'monto': '450.00',
            'fecha': '2018-09-01'
        }

        if feature.is_enabled('COMPROBANTE_PAGO'):
            inscripcion_data = {
                'localidad':
                'Quito Norte',
                'servidor':
                'Raul Riera',
                'monto':
                '450.00',
                'fecha':
                '2018-09-01',
                'comprobante_uri':
                (BytesIO('Comprobante sample content'.encode('utf-8')),
                 'comprobante.jpg')
            }

        response = self.client.post(f'/inscripciones/{inscripcion.id}/edit',
                                    content_type='multipart/form-data',
                                    buffered=True,
                                    data=inscripcion_data)

        inscripciones = self.inscripcion_repository.find_all()
        filtered_inscripcion = list(
            filter(
                lambda i: i.localidad == 'Quito Norte' and i.servidor ==
                'Raul Riera', inscripciones))
        self.assertTrue(len(filtered_inscripcion) == 1)
        self.assertEqual(response.status_code, 302)

    def _assert_static_text(self, static_text, response):
        self.assertTrue(static_text in response.get_data(as_text=True))

    def _new_usuario(self, nombre_usuario, clave):
        usuario = Usuario(nombre_usuario=nombre_usuario,
                          hashed_password=PasswordManager(clave).hash())
        db.session.add(usuario)
        db.session.commit()
        return usuario

    def _login(self, nombre_usuario='usuario_1', clave='secreto'):
        self._new_usuario(nombre_usuario, clave)
        login_data = {'nombre_usuario': nombre_usuario, 'clave': clave}
        return self.client.post('/auth/login',
                                data=login_data,
                                follow_redirects=True)
Exemplo n.º 5
0
        'name': 'Preventa',
    },
    'home': {
        'url': 'https://www.rccec.org',
        'name': 'Inicio'
    },
    'ecceju-urls': {
        'programacion': 'https://ecceju.rccec.org/programacion',
        'ministerios': 'https://ecceju.rccec.org/ministerios',
        'musica': 'https://ecceju.rccec.org/musica',
        'inscripciones': 'https://inscripciones.ecceju.rccec.org',
        'acerca-de': 'https://ecceju.rccec.org/about/',
    }
}

inscripcion_repository = InscripcionRepository(db.session)
participante_repository = ParticipanteRepository(db.session)


@main.route('/')
def index():
    return redirect(url_for('auth.login'))


@main.route('/inscripciones/<id>')
@login_required
def show_inscripcion(id):
    inscripcion = inscripcion_repository.find_by(id)
    if not inscripcion.is_managed_by(current_user.nombre_usuario):
        return render_template('403.html', site=site), 403
    inscripcion.participantes = participante_repository.find_all(
 def setUp(self):
     db.create_all()
     self.inscripcion_repository = InscripcionRepository(db.session)
     self.participante_repository = ParticipanteRepository(db.session)
     self.inscripcion = InscripcionBuilder().build()
     self.inscripcion_repository.add(self.inscripcion)
Exemplo n.º 7
0
class ParticipanteIntTestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()
        self.client = self.app.test_client(use_cookies=True)
        self.inscripcion_repository = InscripcionRepository(db.session)
        self.participante_repository = ParticipanteRepository(db.session)

    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()

    def test_show_a_participante(self):
        self._login('usuario_1', 'secreto')
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['admin_1', 'usuario_1'])
        self.inscripcion_repository.add(inscripcion)

        participante = Participante(id=uuid.uuid1(),
                                    nombres_completos='Raul Riera',
                                    sexo='H',
                                    telefono_contacto='9999999999',
                                    numero_deposito='12312',
                                    monto=25.00)
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/{participante.id}")

        self.assertEqual(response.status_code, 200)
        self.assertTrue(
            str(participante.id) in response.get_data(as_text=True))
        self.assertTrue(participante.nombres_completos in response.get_data(
            as_text=True))
        self.assertTrue(participante.sexo in response.get_data(as_text=True))
        self.assertTrue(participante.telefono_contacto in response.get_data(
            as_text=True))
        self.assertTrue(
            str(participante.monto) in response.get_data(as_text=True))
        self.assertTrue(participante.numero_deposito in response.get_data(
            as_text=True))

    def test_should_not_show_a_participante_if_current_user_is_not_admin(self):
        self._login('usuario_1', 'secreto')
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_2', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        participante = Participante(id=uuid.uuid1(),
                                    nombres_completos='Raul Riera',
                                    sexo='H',
                                    telefono_contacto='9999999999',
                                    numero_deposito='12312',
                                    monto=25.00)
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/{participante.id}")

        self.assertEqual(response.status_code, 403)

    def test_index_of_participantes(self):
        self._login()
        inscripcion_1 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Quito',
                                    servidor='Conny Riera',
                                    fecha='2018-09-01',
                                    administradores=['usuario_1', 'admin'])

        inscripcion_2 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Santo Domingo',
                                    servidor='Maria Isabel ',
                                    fecha='2018-08-31',
                                    administradores=['usuario_1', 'admin'])

        participante_1 = Participante(id=uuid.uuid1(),
                                      nombres_completos='Raul Riera',
                                      sexo='H',
                                      telefono_contacto='9999999999',
                                      monto=Decimal('25.00'),
                                      numero_deposito='123456')

        participante_2 = Participante(
            id=uuid.uuid1(),
            nombres_completos='Gustavo de las Mercedes Riera',
            sexo='H',
            telefono_contacto='8888888888',
            monto=Decimal('25.00'),
            numero_deposito='12457')

        self.inscripcion_repository.add(inscripcion_1)
        self.inscripcion_repository.add(inscripcion_2)
        self.participante_repository.add(participante_1, inscripcion_2.id)
        self.participante_repository.add(participante_2, inscripcion_2.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion_2.id}/participantes")

        self.assertEqual(response.status_code, 200)
        self.assertTrue(
            str(participante_1.id) in response.get_data(as_text=True))
        self.assertTrue(participante_1.nombres_completos in response.get_data(
            as_text=True))
        self.assertTrue(
            str(participante_2.id) in response.get_data(as_text=True))
        self.assertTrue(participante_2.nombres_completos in response.get_data(
            as_text=True))
        self.assertTrue('50' in response.get_data(as_text=True))

    def test_not_show_index_of_participantes_if_current_user_is_not_admin(
            self):
        self._login()
        inscripcion_1 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Quito',
                                    servidor='Conny Riera',
                                    fecha='2018-09-01',
                                    administradores=['usuario_2', 'admin'])

        participante_1 = Participante(id=uuid.uuid1(),
                                      nombres_completos='Raul Riera',
                                      sexo='H',
                                      telefono_contacto='9999999999',
                                      monto=Decimal('25.00'),
                                      numero_deposito='123456')

        self.inscripcion_repository.add(inscripcion_1)
        self.participante_repository.add(participante_1, inscripcion_1.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion_1.id}/participantes")

        self.assertEqual(response.status_code, 403)

    def test_new_participante(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/new")

        self.assertEqual(response.status_code, 200)
        self.assertTrue('Nombres completos' in response.get_data(as_text=True))
        self.assertTrue('Sexo' in response.get_data(as_text=True))
        self.assertTrue('Telefono de contacto' in response.get_data(
            as_text=True))
        self.assertTrue('Monto' in response.get_data(as_text=True))
        self.assertTrue('Número de depósito' in response.get_data(
            as_text=True))

    def test_should_not_allow_new_participante_if_current_user_is_not_admin(
            self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['admin', 'usuario_2'])
        self.inscripcion_repository.add(inscripcion)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/new")

        self.assertEqual(response.status_code, 403)

    def test_create_a_participante(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        participante_data = {
            'nombres_completos': 'Nayeli Chiriboga',
            'sexo': 'M',
            'telefono_contacto': '9999999999',
            'monto': 25.00,
            'numero_deposito': 'ABCD-1111'
        }

        response = self.client.post(
            f'/inscripciones/{inscripcion.id}/participantes/new',
            data=participante_data)

        participantes = self.participante_repository.find_all(inscripcion.id)
        res = filter(
            lambda i: i.nombres_completos == 'Nayeli Chiriboga' and i.sexo ==
            'M' and i.telefono_contacto == '9999999999', participantes)
        filtered_participante = list(res)
        self.assertTrue(len(filtered_participante) == 1)
        self.assertEqual(response.status_code, 302)

    def test_error_if_required_fields_are_not_present_in_participante_creation(
            self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        participante_data = {
            'sexo': 'M',
            'telefono_contacto': '9999999999',
        }

        response = self.client.post(
            f'/inscripciones/{inscripcion.id}/participantes/new',
            data=participante_data)

        participantes = self.participante_repository.find_all(inscripcion.id)
        res = filter(
            lambda i: i.nombres_completos == 'Nayeli Chiriboga' and i.sexo ==
            'M' and i.telefono_contacto == '9999999999', participantes)
        filtered_participante = list(res)
        self.assertTrue(len(filtered_participante) == 0)
        self._assert_static_text(
            'Error en el campo: Monto cancelado (USD) -'
            ' This field is required', response)
        self._assert_static_text(
            'Error en el campo: Nombres completos - This field is required',
            response)
        self._assert_static_text(
            'Error en el campo: Número de depósito - This field is required',
            response)

    def test_should_return_error_if_monto_is_invalid(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        participante_data = {
            'nombres_completos': 'Nayeli Chiriboga',
            'sexo': 'M',
            'telefono_contacto': '9999999999',
            'monto': 20.00,
            'fecha_inscripcion': '2018-08-30',
            'numero_deposito': 'ABCD-1111'
        }

        response = self.client.post(
            f'/inscripciones/{inscripcion.id}/participantes/new',
            data=participante_data)

        participantes = self.participante_repository.find_all(inscripcion.id)
        res = filter(
            lambda i: i.nombres_completos == 'Nayeli Chiriboga' and i.sexo ==
            'M' and i.telefono_contacto == '9999999999', participantes)
        filtered_participante = list(res)
        self.assertTrue(len(filtered_participante) == 0)
        self._assert_static_text('El valor del monto debe ser 25.00 USD',
                                 response)

    def test_should_return_form_for_edit_a_participante(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])

        self.inscripcion_repository.add(inscripcion)

        participante = Participante(id=uuid.uuid1(),
                                    nombres_completos='Raul Riera',
                                    sexo='H',
                                    telefono_contacto='9999999999',
                                    monto=Decimal('25.00'),
                                    numero_deposito='14566185')
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/"
            f"{participante.id}/edit")

        self.assertEqual(response.status_code, 200)
        self.assertTrue(participante.nombres_completos in response.get_data(
            as_text=True))
        self.assertTrue(participante.sexo in response.get_data(as_text=True))
        self.assertTrue(participante.telefono_contacto in response.get_data(
            as_text=True))

    def test_not_return_form_for_edition_if_current_user_is_not_admin(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_2', 'admin'])

        self.inscripcion_repository.add(inscripcion)

        participante = Participante(id=uuid.uuid1(),
                                    nombres_completos='Raul Riera',
                                    sexo='H',
                                    telefono_contacto='9999999999',
                                    monto=Decimal('25.00'),
                                    numero_deposito='14566185')
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/' \
                    '{participante.id}/edit")

        self.assertEqual(response.status_code, 403)

    def test_should_edit_a_participante(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        participante = Participante(id=uuid.uuid1(),
                                    nombres_completos='Raul Riera',
                                    sexo='H',
                                    telefono_contacto='9999999999',
                                    monto=Decimal('25.00'),
                                    numero_deposito='14587')
        self.participante_repository.add(participante, inscripcion.id)

        participante_data = {
            'nombres_completos': 'Nayeli Chiriboga',
            'sexo': 'M',
            'telefono_contacto': '9999999999',
            'monto': 25.00,
            'numero_deposito': 'xxxxx'
        }

        response = self.client.post(
            f'/inscripciones/{inscripcion.id}/participantes/'
            f'{participante.id}/edit',
            data=participante_data)

        participantes = self.participante_repository.find_all(inscripcion.id)
        filtered_participante = list(
            filter(
                lambda i: i.nombres_completos == 'Nayeli Chiriboga' and i.sexo
                == 'M' and i.telefono_contacto == '9999999999', participantes))
        self.assertTrue(len(filtered_participante) == 1)
        self.assertEqual(response.status_code, 302)

    def test_should_throw_error_while_edit_a_participante(self):
        self._login()
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_1', 'admin'])
        self.inscripcion_repository.add(inscripcion)

        participante = Participante(id=uuid.uuid1(),
                                    nombres_completos='Raul Riera',
                                    sexo='H',
                                    telefono_contacto='9999999999',
                                    monto=Decimal('25.00'),
                                    numero_deposito='14587')
        self.participante_repository.add(participante, inscripcion.id)

        participante_data = {
            'nombres_completos': 'Nayeli Chiriboga',
            'sexo': 'M',
            'telefono_contacto': '9999999999',
            'monto': 15.00,
            'fecha_inscripcion': '2018-8-27',
            'numero_deposito': 'xxxxx'
        }

        response = self.client.post(
            f'/inscripciones/{inscripcion.id}/participantes/'
            f'{participante.id}/edit',
            data=participante_data)
        self._assert_static_text('El valor del monto debe ser 25.00 USD',
                                 response)

    def test_should_return_200_showing_participantes_page_after_deleting_one(
            self):
        self._login()
        inscripcion = InscripcionBuilder().build()
        self.inscripcion_repository.add(inscripcion)

        participante = ParticipanteBuilder().build()
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f'/inscripciones/{inscripcion.id}/participantes/'
            f'{participante.id}/destroy',
            follow_redirects=True)

        self.assertEqual(response.status_code, 200)
        self.assertFalse(participante.nombres_completos in response.get_data(
            as_text=True))

    def test_should_return_not_found_while_deleting_a_participante(self):
        self._login()
        inscripcion = InscripcionBuilder().build()
        self.inscripcion_repository.add(inscripcion)

        participante = ParticipanteBuilder().build()
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/"
            "non-existing-participante/destroy",
            follow_redirects=True)

        self.assertEqual(response.status_code, 404)

    def test_should_return_403_while_deleting_a_participante(self):
        self._login()
        inscripcion = InscripcionBuilder(
            administradores=['usuario_2', 'admin']).build()
        self.inscripcion_repository.add(inscripcion)
        participante = ParticipanteBuilder().build()
        self.participante_repository.add(participante, inscripcion.id)

        response = self.client.get(
            f"/inscripciones/{inscripcion.id}/participantes/"
            f"{participante.id}/destroy",
            follow_redirects=True)

        self.assertEqual(response.status_code, 403)

    def _assert_static_text(self, static_text, response):
        self.assertTrue(static_text in response.get_data(as_text=True))

    def _new_usuario(self, nombre_usuario, clave):
        usuario = Usuario(nombre_usuario=nombre_usuario,
                          hashed_password=PasswordManager(clave).hash())
        db.session.add(usuario)
        db.session.commit()
        return usuario

    def _login(self, nombre_usuario='usuario_1', clave='secreto'):
        self._new_usuario(nombre_usuario, clave)
        login_data = {'nombre_usuario': nombre_usuario, 'clave': clave}
        return self.client.post('/auth/login',
                                data=login_data,
                                follow_redirects=True)
Exemplo n.º 8
0
class InscripcionRepositoryTestCase(unittest.TestCase):
    def setUp(self):
        db.create_all()
        self.inscripcion_repository = InscripcionRepository(db.session)
        self.participante_repository = ParticipanteRepository(db.session)

    def tearDown(self):
        db.session.remove()
        db.drop_all()

    def test_find_all_by_admin(self):
        inscripcion_1 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Quito Norte',
                                    servidor='Conny Riera',
                                    fecha='2018-08-01',
                                    administradores=['usuario_1', 'usuario_3'])

        inscripcion_2 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Quito Sur',
                                    servidor='Raul Riera',
                                    fecha='2018-08-01',
                                    administradores=['usuario_1', 'usuario_2'])

        inscripcion_3 = Inscripcion(id=uuid.uuid1(),
                                    localidad='Quito Centro',
                                    servidor='Isa',
                                    fecha='2018-08-01',
                                    administradores=['usuario_2', 'usuario_3'])
        self.inscripcion_repository.add(inscripcion_1)
        self.inscripcion_repository.add(inscripcion_2)
        self.inscripcion_repository.add(inscripcion_3)

        response = self.inscripcion_repository.find_all_by_admin('usuario_2')

        self.assertEqual([str(inscripcion_2.id),
                          str(inscripcion_3.id)],
                         list(map(lambda i: i.id, response)))

    def test_find_all_with_no_administradores(self):
        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito Norte',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=None)

        self.inscripcion_repository.add(inscripcion)

        response = self.inscripcion_repository.find_all()

        self.assertEqual([str(inscripcion.id)],
                         list(map(lambda i: i.id, response)))

    def test_get_number_of_registered_people_and_total_amount_per_localidad(
            self):
        inscripcion = InscripcionBuilder().build()
        self.inscripcion_repository.add(inscripcion)
        participante_1 = ParticipanteBuilder(id=uuid.uuid1()).build()
        self.participante_repository.add(participante_1, inscripcion.id)
        participante_2 = ParticipanteBuilder(id=uuid.uuid1()).build()
        self.participante_repository.add(participante_2, inscripcion.id)

        self.assertEqual(
            self.inscripcion_repository.get_total_amount(inscripcion.id),
            Decimal('50.00'))
        self.assertEqual(
            self.inscripcion_repository.get_total_participantes(
                inscripcion.id), 2)

    def test_error_if_inscripcion_id_is_nil_during_get_total_amount(self):
        with self.assertRaises(Exception) as context:
            self.inscripcion_repository.get_total_amount(inscripcion_id=None)
        self.assertTrue(
            'Inscripcion id is not valid' in str(context.exception))

    def test_error_if_inscripcion_id_is_nil_during_get_total_participantes(
            self):
        with self.assertRaises(Exception) as context:
            self.inscripcion_repository.get_total_participantes(
                inscripcion_id=None)
        self.assertTrue(
            'Inscripcion id is not valid' in str(context.exception))

    def test_zero_if_there_is_no_participantes_while_getting_total_amount(
            self):
        inscripcion = InscripcionBuilder().build()
        self.inscripcion_repository.add(inscripcion)

        self.assertEqual(
            self.inscripcion_repository.get_total_amount(inscripcion.id),
            Decimal('0.00'))
Exemplo n.º 9
0
 def setUp(self):
     db.create_all()
     self.inscripcion_repository = InscripcionRepository(db.session)
     self.participante_repository = ParticipanteRepository(db.session)
Exemplo n.º 10
0
class LoginIntTestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()
        self.client = self.app.test_client(use_cookies=True)
        self.inscripcion_repository = InscripcionRepository(db.session)

    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()

    def test_show_login_in(self):
        response = self.client.get('/auth/login')

        self._assert_login_form(response)

    def test_begin_login_in_session(self):
        nombre_usuario = 'conny'
        clave = 'secreto'
        usuario = self._new_usuario(nombre_usuario, clave)
        login_data = {'nombre_usuario': nombre_usuario, 'clave': clave}

        inscripcion = Inscripcion(id=uuid.uuid1(),
                                  localidad='Quito',
                                  servidor='Conny Riera',
                                  fecha='2018-08-01',
                                  administradores=['usuario_admin', 'conny'])
        self.inscripcion_repository.add(inscripcion)

        response = self.client.post('/auth/login',
                                    data=login_data,
                                    follow_redirects=True)

        self.assertEqual(response.status_code, 200)
        # TODO: Disable this line until get a better knowledge
        # of how to add new inscripciones
        # self._assert_static_text('inscripciones/new', response)

    def test_begin_login_in_session_wrong_password(self):
        nombre_usuario = 'conny'
        clave = 'secreto'
        usuario = self._new_usuario(nombre_usuario, clave)
        login_data = {'nombre_usuario': nombre_usuario, 'clave': 'wrong pass'}

        response = self.client.post('/auth/login',
                                    data=login_data,
                                    follow_redirects=True)

        self._assert_login_form(response)
        self._assert_static_text('Credenciales incorrectas', response)

    def test_begin_login_in_session_wrong_username(self):
        nombre_usuario = 'conny'
        clave = 'secreto'
        usuario = self._new_usuario(nombre_usuario, clave)
        login_data = {'nombre_usuario': 'wrong username', 'clave': clave}

        response = self.client.post('/auth/login',
                                    data=login_data,
                                    follow_redirects=True)

        self._assert_login_form(response)
        self._assert_static_text('Credenciales incorrectas', response)

    def test_login_first_before_get_a_resource(self):
        protected_urls = [
            'inscripciones',
            'inscripciones/new',
            'inscripciones/<inscripcion_id>',
            'inscripciones/<inscripcion_id>/edit',
            'inscripciones/<inscripcion_id>/participantes',
            'inscripciones/<inscripcion_id>/participantes/new',
            'inscripciones/<inscripcion_id>/participantes/<participante_id>',
            'inscripciones/<inscripcion_id>/participantes/'
            '<participante_id>/edit',
            'inscripciones/<inscripcion_id>/participantes/'
            '<participante_id>/destroy',
            'preventa/',
            'preventa/download',
        ]
        for url in protected_urls:
            response = self.client.get(url, follow_redirects=True)
            self._assert_login_form(response)

    def test_show_logout(self):
        response = self.client.get('/auth/logout', follow_redirects=True)

        self._assert_login_form(response)

    def _new_usuario(self, nombre_usuario, clave):
        usuario = Usuario(nombre_usuario=nombre_usuario,
                          hashed_password=PasswordManager(clave).hash())
        db.session.add(usuario)
        db.session.commit()
        return usuario

    def _assert_static_text(self, static_text, response):
        self.assertTrue(static_text in response.get_data(as_text=True))

    def _assert_login_form(self, response):
        self.assertEqual(response.status_code, 200)
        self._assert_static_text('Nombre de usuario', response)
        self._assert_static_text('Clave', response)