def definir_prioridades_seccion_categoria(settings): asignar_prioridades_standard(settings) seccion_cuatro_prioridades = SeccionFactory(nombre="Cuatro prioridades") seccion_dos_cantidades = SeccionFactory(nombre="Dos cantidades") seccion_prioritaria = SeccionFactory(nombre="Prioritaria") seccion_standard = SeccionFactory(nombre="Standard") PrioridadSchedulingFactory(seccion=seccion_cuatro_prioridades, desde_proporcion=50, hasta_proporcion=100, prioridad=250) PrioridadSchedulingFactory(seccion=seccion_cuatro_prioridades, desde_proporcion=30, hasta_proporcion=50, prioridad=120) PrioridadSchedulingFactory(seccion=seccion_cuatro_prioridades, desde_proporcion=10, hasta_proporcion=30, prioridad=80) PrioridadSchedulingFactory(seccion=seccion_cuatro_prioridades, desde_proporcion=0, hasta_proporcion=10, hasta_cantidad=12, prioridad=20) PrioridadSchedulingFactory(seccion=seccion_dos_cantidades, desde_proporcion=0, hasta_proporcion=2, hasta_cantidad=7, prioridad=5) PrioridadSchedulingFactory(seccion=seccion_dos_cantidades, desde_proporcion=2, hasta_proporcion=10, hasta_cantidad=20, prioridad=25) PrioridadSchedulingFactory(seccion=seccion_dos_cantidades, desde_proporcion=10, hasta_proporcion=100, prioridad=110) PrioridadSchedulingFactory(seccion=seccion_prioritaria, desde_proporcion=0, hasta_proporcion=2, hasta_cantidad=7, prioridad=10) PrioridadSchedulingFactory(seccion=seccion_prioritaria, desde_proporcion=2, hasta_proporcion=10, prioridad=50) PrioridadSchedulingFactory(seccion=seccion_prioritaria, desde_proporcion=10, hasta_proporcion=100, prioridad=80) pv = CategoriaFactory(nombre="PV") gv = CategoriaFactory(nombre="GV") categoria_standard = CategoriaFactory(nombre="Standard") PrioridadSchedulingFactory(categoria=pv, desde_proporcion=0, hasta_proporcion=100, prioridad=5) PrioridadSchedulingFactory(categoria=gv, desde_proporcion=0, hasta_proporcion=100, prioridad=30) # tambien hay que definir una mesa en cada seccion, para lo cual tengo que definir # circuitos y lugares de votacion crear_mesa(seccion_cuatro_prioridades) crear_mesa(seccion_dos_cantidades) crear_mesa(seccion_prioritaria) crear_mesa(seccion_standard)
def test_autocomplete_seccion__dos_distritos(db, client): distrito1, distrito2 = DistritoFactory.create_batch(2) SeccionFactory(distrito=distrito1) SeccionFactory(distrito=distrito1) SeccionFactory(distrito=distrito1) SeccionFactory(distrito=distrito2) SeccionFactory(distrito=distrito2) query = "Sección" response = _hacer_call_seccion_autocomplete(client, q=query) response_data = json.loads(response.content) resultados = response_data["results"] # sin distrito, me trae todo assert len(resultados) == 5 for resultado in resultados: assert query in resultado["text"] response = _hacer_call_seccion_autocomplete(client, q=query, distrito=distrito1) response_data = json.loads(response.content) resultados = response_data["results"] # trae solo las 3 del distrito 1 assert len(resultados) == 3 for resultado in resultados: assert query in resultado["text"]
def test_autocomplete_seccion__sin_seccion_especifica(db, client): SeccionFactory.create_batch(20) url = reverse("autocomplete-seccion-simple") response = client.get(url) response_data = json.loads(response.content) resultados = response_data["results"] # nos devuelve los 10 resultados assert len(resultados) == 10 assert response_data["pagination"]["more"]
def test_configuracion_seccion_set_hasta_cantidad_no_prioridad(db, settings): asignar_prioridades_standard(settings) seccion = SeccionFactory(cantidad_minima_prioridad_hasta_2=9) prioridades = PrioridadScheduling.objects.filter(seccion=seccion) assert prioridades.count() == 1 assert prioridades.filter(desde_proporcion=0).first().prioridad is None assert prioridades.filter(desde_proporcion=0).first().hasta_cantidad == 9
def test_quiero_ser_fiscal_form__limpieza_de_ceros_telefono_area(db): seccion = SeccionFactory() request_data = construir_request_data(seccion) request_data["telefono_area"] = "011" form = QuieroSerFiscalForm(data=request_data) assert form.is_valid() assert form.cleaned_data.get("telefono_area") == "11"
def test_quiero_ser_fiscal_form__codigo_referido_erroneo(db): seccion = SeccionFactory() request_data = construir_request_data(seccion) request_data["referido_por_codigo"] = "1233245" form = QuieroSerFiscalForm(data=request_data) assert not form.is_valid() assert form.errors['referido_por_codigo'][ 0] == QuieroSerFiscalForm.MENSAJE_ERROR_CODIGO_REF
def test_quiero_ser_fiscal_form__password_no_iguales(db): seccion = SeccionFactory() request_data = construir_request_data(seccion) request_data["password_confirmacion"] = "cualquier_otro_password" form = QuieroSerFiscalForm(data=request_data) assert not form.is_valid() assert form.errors['password_confirmacion'][ 0] == QuieroSerFiscalForm.MENSAJE_ERROR_PASSWORD_NO_IGUALES
def test_quiero_ser_fiscal_form__dni_repetido(db): seccion = SeccionFactory() request_data = construir_request_data(seccion) FiscalFactory(dni=request_data['dni']) form = QuieroSerFiscalForm(data=request_data) assert not form.is_valid() assert form.errors['dni'][ 0] == QuieroSerFiscalForm.MENSAJE_ERROR_DNI_REPETIDO
def test_quiero_ser_fiscal_form__email_repetido_en_la_base(db): fiscal = FiscalFactory() seccion = SeccionFactory() request_data = construir_request_data(seccion) request_data["email"] = fiscal.user.email request_data["email_confirmacion"] = fiscal.user.email form = QuieroSerFiscalForm(data=request_data) assert not form.is_valid() assert form.errors['email'][ 0] == QuieroSerFiscalForm.MENSAJE_ERROR_EMAIL_REPETIDO
def __init__(self, distrito_pba): self.distrito_caba = DistritoFactory(numero='1') self.seccion_caba = SeccionFactory(distrito=self.distrito_caba) self.circuito_caba = CircuitoFactory(seccion=self.seccion_caba) self.lugar_votacion_caba = LugarVotacionFactory(circuito=self.circuito_caba) self.distrito_pba = DistritoFactory(numero=distrito_pba) self.seccion_pba = SeccionFactory(distrito=self.distrito_pba) self.circuito_pba = CircuitoFactory(seccion=self.seccion_pba) self.lugar_votacion_pba = LugarVotacionFactory(circuito=self.circuito_pba) self.distrito_cat = DistritoFactory(numero='3') self.seccion_cat = SeccionFactory(distrito=self.distrito_cat) self.circuito_cat = CircuitoFactory(seccion=self.seccion_cat) self.lugar_votacion_cat = LugarVotacionFactory(circuito=self.circuito_cat) self.fiscales = [nuevo_fiscal() for ix in range(10)] self.mesas_caba = [MesaFactory(lugar_votacion=self.lugar_votacion_caba, circuito=self.circuito_caba) for ix in range(15)] self.mesas_cat = [MesaFactory(lugar_votacion=self.lugar_votacion_cat, circuito=self.circuito_cat) for ix in range(15)] self.mesas_pba = [MesaFactory(lugar_votacion=self.lugar_votacion_pba, circuito=self.circuito_pba) for ix in range(20)]
def test_prioridades_mesacat_seccion_con_definicion_parcial_1(db, settings, proporcion, orden_de_llegada, prioridad): """ Prioridades para una MesaCategoria de una seccion que define prioridades distintas de las standard sólo para un rango de proporciones. """ definir_prioridades_seccion_categoria(settings) seccion_parcial = SeccionFactory(nombre="Definición parcial de prioridades no standard") PrioridadSchedulingFactory(seccion=seccion_parcial, desde_proporcion=2, hasta_proporcion=5, prioridad=4) mesa_categoria = MesaCategoriaFactory( categoria=categoria_standard(), mesa=crear_mesa(seccion_parcial)) prioridades = mapa_prioridades_para_mesa_categoria(mesa_categoria) assert(prioridades.valor_para(proporcion, orden_de_llegada)) == prioridad
def carga_inicial(db): d1 = DistritoFactory(numero=1) s1 = SeccionFactory(numero=50, distrito=d1) circ = CircuitoFactory(numero='2', seccion=s1) # Creamos los partidos. fdt = OpcionFactory(codigo='FdT', nombre='FdT', partido__nombre='FpT') jpc = OpcionFactory(codigo='JpC', nombre='JpC', partido__nombre='JpC') c2019 = OpcionFactory(codigo='C2019', nombre='C2019', partido__nombre='C2019') categorias = [] for categoria, prioritaria in CATEGORIAS: categoria_general = CategoriaGeneralFactory(nombre=categoria) # La categoría en sí tiene un nombre arbitrario para testear que # el matching sea en base a la categoría general. categoria_bd = CategoriaFactory(nombre=f'Categoría {categoria}', categoria_general=categoria_general) # La factory las crea con unas opciones que hacen ruido en estos tests. for nombre in ['opc1', 'opc2', 'opc3', 'opc4']: opcion = Opcion.objects.get(nombre=nombre) opcion.delete() categorias.append(categoria_bd) CategoriaOpcionFactory(categoria=categoria_bd, prioritaria=prioritaria, opcion=fdt) CategoriaOpcionFactory(categoria=categoria_bd, prioritaria=prioritaria, opcion=jpc) if categoria == 'Presidente y vice': CategoriaOpcionFactory(categoria=categoria_bd, prioritaria=False, opcion=c2019) if prioritaria: # Adecuamos las opciones prioritarias. hacer_prioritaria_en_cat(categoria_bd, Opcion.total_votos()) hacer_prioritaria_en_cat(categoria_bd, Opcion.blancos()) hacer_prioritaria_en_cat(categoria_bd, Opcion.nulos()) hacer_prioritaria_en_cat(categoria_bd, Opcion.sobres()) hacer_prioritaria_en_cat(categoria_bd, Opcion.recurridos()) hacer_prioritaria_en_cat(categoria_bd, Opcion.id_impugnada()) hacer_prioritaria_en_cat(categoria_bd, Opcion.comando_electoral()) MesaFactory(numero='4012', lugar_votacion__circuito=circ, electores=100, circuito=circ, categorias=categorias)
def test_quiero_ser_fiscal_form__telefono_no_correcto_formato_nacional(db): seccion = SeccionFactory() request_data = construir_request_data(seccion) request_data["telefono_local"] = "1233245" request_data["telefono_area"] = "1234" form = QuieroSerFiscalForm(data=request_data) assert not form.is_valid() error_formato_nacional = "Revisá el código de área y teléfono.Entre ambos deben ser 10 números" assert form.errors['telefono_local'][0] == error_formato_nacional assert form.errors['telefono_local'][ 1] == QuieroSerFiscalForm.MENSAJE_ERROR_TELEFONO_INVALIDO assert form.errors['telefono_area'][0] == error_formato_nacional assert form.errors['telefono_area'][ 1] == QuieroSerFiscalForm.MENSAJE_ERROR_TELEFONO_INVALIDO
def test_autocomplete_seccion__camino_feliz(db, client): tam_batch = 10 secciones = SeccionFactory.create_batch(tam_batch) distrito = secciones[0].distrito # pedimos el nombre completo de una seccion, el match debiese ser único # (a menos que pidamos "Seccion 7" y existan cosas como "Seccion 7x", "Sección 7xx", etc) query = secciones[tam_batch - 1].nombre response = _hacer_call_seccion_autocomplete(client, q=query, distrito=distrito) response_data = json.loads(response.content) resultados = response_data["results"] assert len(resultados) == 1 assert query in resultados[0]['text']
def test_quiero_validar__error_validacion(db, client): # hacemos un test que muestre que al validar nos quedamos en la misma página y no se crea un fiscal # la lógica de validación más fina del form la hacemos en el test_forms_fiscales url_quiero_validar = reverse('quiero-validar') response = client.get(url_quiero_validar) assert response.status_code == HTTPStatus.OK assert not Fiscal.objects.exists() seccion = SeccionFactory() request_data = construir_request_data(seccion) del (request_data["dni"]) response = client.post(url_quiero_validar, request_data) assert response.status_code == HTTPStatus.OK assert response.context['form'].errors assert not Fiscal.objects.exists()
def test_quiero_validar__camino_feliz(db, client): url_quiero_validar = reverse('quiero-validar') response = client.get(url_quiero_validar) assert response.status_code == HTTPStatus.OK assert not Fiscal.objects.exists() seccion = SeccionFactory() request_data = construir_request_data(seccion) response = client.post(url_quiero_validar, request_data) assert Fiscal.objects.count() == 1 _assert_fiscal_cargado_correctamente(seccion) fiscal = _get_fiscal() # se setea el fiscal assert client.session['fiscal_id'] == fiscal.id assert response.status_code == HTTPStatus.FOUND assert response.url == reverse('quiero-validar-gracias')
def test_procesar_csv_categorias_faltantes_en_archivo(db, usr_unidad_basica): CategoriaGeneralFactory() d1 = DistritoFactory(numero=1) s1 = SeccionFactory(numero=50, distrito=d1) c1 = CircuitoFactory(numero='2', seccion=s1) m = MesaFactory(numero='4012', lugar_votacion__circuito=c1, electores=100, circuito=c1) o2 = OpcionFactory(codigo='Todes') o3 = OpcionFactory(codigo='Juntos') c = CategoriaFactory(opciones=[o2, o3], nombre='Otra categoria') MesaCategoriaFactory(mesa=m, categoria=c) cant_mesas_ok, cant_mesas_parcialmente_ok, errores = CSVImporter( PATH_ARCHIVOS_TEST + 'info_resultados_negativos.csv', usr_unidad_basica).procesar() assert cant_mesas_ok == 0 assert cant_mesas_parcialmente_ok == 0 assert 'Faltan datos en el archivo de la siguiente categoría' in errores assert Carga.objects.count() == 0
def test_subir_acta_preidentifica_seccion(admin_user, admin_client, datadir): """ Prueba de subir una imagen y que quede la PreIdentificación de seccion """ url = reverse('actas') seccion = SeccionFactory() admin_user.fiscal.seccion = seccion admin_user.fiscal.save() foto = (datadir / 'acta.jpeg') response = admin_client.post(url, {'foto': foto.open('rb')}) assert response.status_code == status.HTTP_201_CREATED response = admin_client.post(url, {'foto': foto.open('rb')}) foto_digest = response.data['foto_digest'] attachment = Attachment.objects.get(foto_digest=foto_digest) assert attachment.pre_identificacion is not None assert attachment.pre_identificacion.seccion == admin_user.fiscal.seccion assert attachment.pre_identificacion.distrito == admin_user.fiscal.seccion.distrito
def test_identificacion_busqueda_de_mesa(db): c1 = CircuitoFactory() # se crea la mesa 123 para chequear que no debe devolver nunca esta mesa # si se buscan alternativas de la 23 m0 = MesaFactory(numero='123', circuito=c1) m1 = MesaFactory(numero='23', circuito=c1) # el usuario ingresa 023, le devuelve la mesa 23 form = IdentificacionForm({ 'mesa': '023', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m1 # el usuario ingresa 23/8, como no existe le devuelve la mesa 2 form = IdentificacionForm({ 'mesa': '23/8', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m1 # el usuario ingresa 23 como no existe le devuelve la mesa 23 form = IdentificacionForm({ 'mesa': '23', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m1 # se crea la mesa 23/8 m2 = MesaFactory(numero='23/8', circuito=c1) # el usuario ingresa 00023/8, existe 23/8 le devuelve la mesa 23/8 form = IdentificacionForm({ 'mesa': '00023/8', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m2 # el usuario ingresa 23/8, existe 23/8 le devuelve la mesa 23/8 form = IdentificacionForm({ 'mesa': '23/8', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m2 # el usuario ingresa 00023/4, como no existe le devuelve la mesa 23 form = IdentificacionForm({ 'mesa': '00023/4', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m1 # el usuario ingresa ' 0023/8 ', le devuelve la mesa 23/8 form = IdentificacionForm({ 'mesa': ' 0023/8 ', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert form.is_valid() assert form.cleaned_data['mesa'] == m2 # el usuario ingresa 5, como no existe le devuelve error form = IdentificacionForm({ 'mesa': '5', 'circuito': c1.numero, 'seccion': c1.seccion.numero, 'distrito': c1.seccion.distrito.id, }) assert not form.is_valid() assert form.errors['mesa'] == ['Esta mesa no pertenece al circuito'] # buscar mesa en distrito 2 sin pasar circuito en el form d2 = DistritoFactory(numero='2') s2 = SeccionFactory(numero='2', distrito=d2) c2 = CircuitoFactory(numero='2', seccion=s2) m3 = MesaFactory(numero='24/8', circuito=c2) form = IdentificacionForm({ 'mesa': '0024/8', 'seccion': s2.numero, 'distrito': d2.id, 'circuito': '' }) assert form.is_valid() assert form.cleaned_data['mesa'] == m3 # buscar mesa en distrito 2 sin pasar sección en el form form = IdentificacionForm({ 'mesa': '0024/8', 'seccion': '', 'distrito': d2.id, 'circuito': c2.numero }) assert form.is_valid() assert form.cleaned_data['mesa'] == m3 # buscar mesa en distrito 2 sin pasar cricuito ni sección en el form form = IdentificacionForm({ 'mesa': '0024/8', 'seccion': '', 'distrito': d2.id, 'circuito': '' }) assert not form.is_valid() assert form.errors['seccion'] == [ 'Sección y/o circuito deben estar completos' ] assert form.errors['circuito'] == [ 'Sección y/o circuito deben estar completos' ]
def test_quiero_ser_fiscal_form__data_ok(db): seccion = SeccionFactory() request_data = construir_request_data(seccion) form = QuieroSerFiscalForm(data=request_data) assert form.is_valid()
def crear_seccion(nombre): seccion = SeccionFactory(nombre=nombre) circuito = CircuitoFactory(seccion=seccion) lugar_votacion = LugarVotacionFactory(circuito=circuito) return [seccion, circuito, lugar_votacion]
def test_configuracion_seccion(db): seccion = SeccionFactory(prioridad_hasta_2=1, prioridad_2_a_10=12) seccion_2 = SeccionFactory() prioridades = PrioridadScheduling.objects.filter(seccion=seccion) assert prioridades.count() == 2 assert prioridades.filter(desde_proporcion=0).first().prioridad == 1 assert prioridades.filter( desde_proporcion=0).first().hasta_cantidad is None assert prioridades.filter(desde_proporcion=2).first().prioridad == 12 assert prioridades.filter( desde_proporcion=2).first().hasta_proporcion == 10 prioridades = PrioridadScheduling.objects.filter(seccion=seccion_2) assert prioridades.count() == 0 seccion.prioridad_hasta_2 = None seccion.prioridad_2_a_10 = 15 seccion.prioridad_10_a_100 = 45 seccion.save(update_fields=[ 'prioridad_hasta_2', 'prioridad_2_a_10', 'prioridad_10_a_100' ]) prioridades = PrioridadScheduling.objects.filter(seccion=seccion) assert prioridades.count() == 2 assert prioridades.filter(desde_proporcion=2).first().prioridad == 15 assert prioridades.filter(desde_proporcion=10).first().prioridad == 45 assert prioridades.filter( desde_proporcion=10).first().hasta_proporcion == 100 seccion.prioridad_hasta_2 = 3 seccion.cantidad_minima_prioridad_hasta_2 = 7 seccion.save(update_fields=[ 'prioridad_hasta_2', 'cantidad_minima_prioridad_hasta_2' ]) prioridades = PrioridadScheduling.objects.filter(seccion=seccion) assert prioridades.count() == 3 assert prioridades.filter(desde_proporcion=0).first().prioridad == 3 assert prioridades.filter(desde_proporcion=0).first().hasta_cantidad == 7 assert prioridades.filter(desde_proporcion=2).first().prioridad == 15 assert prioridades.filter(desde_proporcion=2).first().categoria is None assert prioridades.filter(desde_proporcion=10).first().prioridad == 45 assert prioridades.filter( desde_proporcion=10).first().hasta_proporcion == 100