def test_deshabilitar_caja_abierta(context):
    driver_cajero = context.driver_manager.main_driver
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]
    editar_caja_action = EditarCajaAction(context)

    apertura = Apertura({moneda: 0 for moneda in caja.monedas_permitidas})
    apertura_action = AperturaOperableAction(context)

    with allure.step("Usuario A ingresa como Cajero"):
        LoginAction(context).verify_state().do(cajero, caja).success("Apertura Caja")

    with allure.step("Apertura la caja"):
        apertura_action.fast_forward(cajero, caja, apertura)

    driver_administrador = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_administrador)
    with allure.step("Usuario B ingresa como administrador"):
        LoginAction(context).verify_state().do(context.administrador).success("Dashboard")

    with allure.step("deshabilita la caja"):
        IrEdicionSucursalAction(context).do(context.sucursal).success()
        editar_caja_action.verify_state(caja)
        caja.desactivar()
        editar_caja_action.do(caja)

    with allure.step("pero no puede porque se encuentra abierta por Usuario B"):
        editar_caja_action.failure(caja, "abierta")
        caja.activar()
        GuardarSucursalAction(context).verify_state(context.sucursal)

    logout_action = LogoutAction(context)
    for driver, usuario in [[driver_administrador, context.administrador], [driver_cajero, cajero]]:
        context.page.set_active_driver(driver)
        logout_action.verify_state(usuario).do().success()
示例#2
0
def test_solicitar_fondos_boveda_cerrada(context):
    cajero = context.cajeros[0]
    caja = context.sucursal.cajas[0]
    monto_apertura_caja = 0
    apertura_caja = Apertura(
        {m: monto_apertura_caja
         for m in caja.monedas_permitidas})

    monedas = caja.monedas_permitidas.intersection(context.boveda.monedas)
    solicitud = SolicitudFondo(caja, context.boveda,
                               {m: choice([20, 50])
                                for m in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    completar_solicitud_action = CompletarSolicitudFondosAction(context)

    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero, caja, apertura_caja)
        caja.agregar_operacion(apertura_caja)

    with allure.step(
            "El cajero genera una solicitud de fondos con montos sugeridos"):
        completar_solicitud_action.verify_state(caja).do(
            solicitud, cajero.password)

    with allure.step(
            "El sistema le indica que la boveda se encuentra cerrada"):
        completar_solicitud_action.failure(caja)
        logout_action.verify_state(cajero).do().success()
def test_deshabilitar_sucursal_caja_con_saldo(context):
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    modificar_estado_action = ModificarEstadoSucursalAction(context)

    apertura = Apertura({moneda: 100 for moneda in caja.monedas_permitidas})
    apertura_action = AperturaOperableAction(context)

    cierre = CierreTotal({moneda: 100 for moneda in caja.monedas_permitidas})
    cierre_action = CierreTotalCajaAction(context)

    with allure.step("Usuario A ingresa como Cajero"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")

    with allure.step(f"Apertura la caja {caja.codigo}"):
        apertura_action.fast_forward(cajero, caja, apertura, desbloquear=True)
        caja.agregar_operacion(apertura)

    with allure.step(f"Cierra totalmente la caja {caja.codigo}"):
        cierre_action.verify_state(caja, cierre).do(cajero.password).success()
        caja.agregar_operacion(cierre)
        logout_action.verify_state(cajero).do().success()

    with allure.step("Usuario B ingresa como administrador"):
        login_action.verify_state().do(
            context.administrador).success("Dashboard")

    with allure.step("deshabilita la sucursal"):
        modificar_estado_action.verify_state(context.sucursal)
        context.sucursal.activa = False
        modificar_estado_action.do(context.sucursal)

    with allure.step(
            f"pero no puede porque la caja {caja.codigo} tiene saldo"):
        modificar_estado_action.failure("con saldo", context.sucursal, caja)
        logout_action.verify_state(context.administrador).do().success()
def test_deshabilitar_sucursal_caja_abierta(context):
    driver_cajero = context.driver_manager.main_driver
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]

    login_action = LoginAction(context)

    apertura = Apertura({moneda: 0 for moneda in caja.monedas_permitidas})
    apertura_action = AperturaOperableAction(context)

    modificar_estado_action = ModificarEstadoSucursalAction(context)

    with allure.step("Usuario A ingresa como Cajero"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")

    with allure.step(f"Apertura la caja #{caja.codigo} con montos en 0"):
        apertura_action.fast_forward(cajero, caja, apertura)

    driver_administrador = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_administrador)
    with allure.step("Usuario B ingresa como administrador"):
        login_action.verify_state().do(
            context.administrador).success("Dashboard")

    with allure.step("deshabilita la sucursal"):
        modificar_estado_action.verify_state(context.sucursal)
        context.sucursal.activa = False
        modificar_estado_action.do(context.sucursal)

    with allure.step("pero no puede porque Usuario B aperturo una caja"):
        modificar_estado_action.failure("abierta", context.sucursal,
                                        context.sucursal.cajas[0])

    logout_action = LogoutAction(context)
    for driver, usuario in [[driver_administrador, context.administrador],
                            [driver_cajero, cajero]]:
        context.page.set_active_driver(driver)
        logout_action.verify_state(usuario).do().success()
示例#5
0
def test_transferencia_caja_boveda_con_error(context):
    operador = context.operador_remesas
    boveda = context.boveda
    apertura_boveda = Apertura(
        {m: 1000
         for m in context.boveda.monedas_permitidas})

    driver_remesas = context.driver_manager.main_driver
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]
    apertura_caja = Apertura(
        {moneda: 1000
         for moneda in caja.monedas_permitidas})
    monedas_extraccion = caja.monedas_permitidas.intersection(
        context.boveda.monedas)

    transferencia = Transferencia(
        caja, context.boveda, {moneda: 165
                               for moneda in monedas_extraccion})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    recibir_transferencia_action = RecibirTransferenciaAction(context)
    problema_transferencia_action = ReportarProblemaTranferenciaAction(context)
    transferencia_finalizada_action = TransferenciaFinalizadaAction(context)

    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    driver_cajero = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero,
                                     caja,
                                     apertura_caja,
                                     desbloquear=True)
        caja.agregar_operacion(apertura_caja)

    with allure.step(f"El cajero genera un deposito en la boveda general"):
        transferencia.codigo = completar_transferencia_action.fast_forward(
            cajero, transferencia)
        caja.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_remesas)
    with allure.step("Boveda general reporta un error en la transferencia"):
        recibir_transferencia_action.verify_state(boveda).do(
            transferencia).success()
        problema_transferencia_action.verify_state(boveda, transferencia).do(
            "Reporte de Prueba", operador.password)
        problema_transferencia_action.success()
        boveda.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_cajero)
    with allure.step("La transferencia se reporta con problemas"):
        transferencia_finalizada_action.verify_state(caja).do(transferencia)
        transferencia.estado = transferencia_finalizada_action.success(
            "Hubo un Problema")

    with allure.step("El cajero realiza un cierre total correctamente"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()

    context.page.set_active_driver(driver_remesas)
    with allure.step(
            "El operador de remesas realiza un cierre total correctamente"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
        context.boveda.agregar_operacion(cierre_boveda)
        logout_action.verify_state(operador).do().success()
示例#6
0
def test_cancelar_transferencia_boveda_caja_pendiente_recepcion(context):
    driver_caja = context.driver_manager.main_driver
    cajero = context.cajeros[0]
    caja = context.sucursal.cajas[0]
    monto_apertura_caja = 100
    apertura_caja = Apertura(
        {moneda: monto_apertura_caja
         for moneda in caja.monedas_permitidas})

    operador = context.operador_remesas
    boveda = context.boveda
    monto_apertura_boveda = 1000
    apertura_boveda = Apertura({
        moneda: monto_apertura_boveda
        for moneda in boveda.monedas_permitidas
    })

    monedas = boveda.monedas_permitidas.intersection(caja.monedas_permitidas)
    transferencia = Transferencia(
        boveda, caja, {moneda: randint(1, 100)
                       for moneda in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    recibir_transferencia_action = RecibirTransferenciaAction(context)
    cancelar_transferencia_action = CancelarTransferenciaAction(context)
    confirmar_transferencia_action = ConfirmarTransferenciaAction(context)
    transferencia_finalizada_action = TransferenciaFinalizadaAction(context)

    with allure.step("El cajero de destino apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero,
                                     caja,
                                     apertura_caja,
                                     desbloquear=True)
        caja.agregar_operacion(apertura_caja)

    driver_operador = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_operador)
    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    with allure.step(
            "El operador de remesas genera una transferencia de salida hacia caja destino"
    ):
        transferencia.codigo = completar_transferencia_action.fast_forward(
            operador, transferencia)
        boveda.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_caja)
    with allure.step(
            "La transferencia se muestra en los depositos pendientes del cajero"
    ):
        recibir_transferencia_action.verify_state(caja).do(
            transferencia).success()

    context.page.set_active_driver(driver_operador)
    with allure.step("El operador cancela la transferencia"):
        cancelar_transferencia_action.verify_state(boveda, transferencia).do(
            operador.password).success()

    context.page.set_active_driver(driver_caja)
    with allure.step(
            "El cajero no podra realizar ninguna accion con el deposito"):
        recibir_transferencia_action.success()
        confirmar_transferencia_action.verify_state(caja, transferencia).do(
            cajero.password).failure()

    with allure.step("y cuando refresque la pantalla ya no vera el deposito"):
        transferencia_finalizada_action.verify_state(caja).do(transferencia)
        transferencia.estado = transferencia_finalizada_action.success(
            "Cancelada")

    with allure.step(
            "El cajero de destino realiza un cierre total correctamente"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()

    context.page.set_active_driver(driver_operador)
    with allure.step(
            "El operador de remesas realiza un cierre total correctamente"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
        boveda.agregar_operacion(cierre_boveda)
        logout_action.verify_state(operador).do().success()
示例#7
0
def test_cierre_boveda_con_depositos_pendiente_recepcion(context):
    driver_cajero = context.driver_manager.main_driver
    caja = context.sucursal.cajas[0]
    monto_apertura_caja = 1000
    apertura_caja = Apertura(
        {m: monto_apertura_caja
         for m in caja.monedas_permitidas})

    cajero = context.cajeros[0]

    boveda = context.boveda
    operador = context.operador_remesas
    monto_apertura_boveda = 1000
    apertura_boveda = Apertura(
        {m: monto_apertura_boveda
         for m in boveda.monedas_permitidas})

    monedas = caja.monedas_permitidas.intersection(context.boveda.monedas)
    transferencia = Transferencia(
        caja, context.boveda, {moneda: randint(1, 100)
                               for moneda in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    recibir_transferencia_action = RecibirTransferenciaAction(context)
    recepcionar_transferencia_action = RecepcionarTransferenciaAction(context)

    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero,
                                     caja,
                                     apertura_caja,
                                     desbloquear=True)
        caja.agregar_operacion(apertura_caja)

    driver_remesas = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_remesas)
    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    context.page.set_active_driver(driver_cajero)
    with allure.step(f"El cajero genera un deposito en la boveda general"):
        transferencia.codigo = completar_transferencia_action.fast_forward(
            cajero, transferencia)
        caja.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_remesas)
    with allure.step(
            "Boveda general recibe la transferencia pero no la recepciona"):
        recibir_transferencia_action.verify_state(boveda).do(
            transferencia).success()

    with allure.step("El operador de remesas realiza un cierre total"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.verify_state(boveda, cierre_boveda).do(
            operador.password, should_redirect=False)

    with allure.step("Pero no puede porque tiene operaciones pendientes"):
        cierre_boveda_action.failure("Operaciones Pendientes")

    # recepciono la operacion y cierro la boveda para que no quede bloqueada la boveda en los siguientes tests
    recibir_transferencia_action.verify_state(boveda).do(transferencia)
    recepcionar_transferencia_action.fast_forward(operador, transferencia)
    cierre_boveda = CierreTotal(boveda.balance())
    cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
    logout_action.verify_state(operador).do().success()

    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero realiza un cierre total correctamente"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()
示例#8
0
def test_cierre_boveda_con_depositos_pendiente_confirmacion(context):
    driver_cajero = context.driver_manager.main_driver
    caja = context.sucursal.cajas[0]
    monto_apretura_caja = 1000
    apertura_caja = Apertura(
        {m: monto_apretura_caja
         for m in caja.monedas_permitidas})
    cajero = context.cajeros[0]

    apertura_boveda = 1000
    apertura_boveda = Apertura(
        {m: apertura_boveda
         for m in context.boveda.monedas_permitidas})
    boveda = context.boveda
    operador = context.operador_remesas

    monedas = caja.monedas_permitidas.intersection(context.boveda.monedas)
    transferencia = Transferencia(
        caja, context.boveda, {moneda: randint(1, 100)
                               for moneda in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    recibir_transferencia_action = RecibirTransferenciaAction(context)
    recepcionar_transferencia_action = RecepcionarTransferenciaAction(context)

    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero,
                                     caja,
                                     apertura_caja,
                                     desbloquear=True)
        caja.agregar_operacion(apertura_caja)

    driver_remesas = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_remesas)
    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    context.page.set_active_driver(driver_cajero)
    with allure.step(f"El cajero genera un deposito en la boveda general"):
        transferencia.codigo = completar_transferencia_action.fast_forward(
            cajero, transferencia)
        caja.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_remesas)
    with allure.step("Boveda general recepciona el deposito"):
        transferencia.estado = recepcionar_transferencia_action.fast_forward(
            operador, transferencia)

    with allure.step(
            "El operador de remesas realiza un cierre total correctamente"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
        context.boveda.agregar_operacion(cierre_boveda)
        logout_action.verify_state(operador).do().success()

    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero realiza un cierre total correctamente"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()
示例#9
0
def test_transferencia_boveda_caja_boveda(context):
    driver_cajero = context.driver_manager.main_driver
    cajero = context.cajeros[0]
    caja = context.sucursal.cajas[0]
    monto_apertura_caja = 100
    apertura_caja = Apertura(
        {moneda: monto_apertura_caja
         for moneda in caja.monedas_permitidas})

    operador = context.operador_remesas
    boveda = context.boveda
    monto_apertura_boveda = 1000
    apertura_boveda = Apertura(
        {m: monto_apertura_boveda
         for m in context.boveda.monedas_permitidas})

    monedas = boveda.monedas_permitidas.intersection(caja.monedas_permitidas)
    transferencia = Transferencia(
        boveda, caja, {moneda: randint(1, 100)
                       for moneda in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    recepcionar_transferencia_action = RecepcionarTransferenciaAction(context)
    confirmar_transferencia_action = ConfirmarTransferenciaAction(context)
    transferencia_finalizada_action = TransferenciaFinalizadaAction(context)

    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero,
                                     caja,
                                     apertura_caja,
                                     desbloquear=True)
        caja.agregar_operacion(apertura_caja)

    driver_remesas = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_remesas)
    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    with allure.step(
            "El operador de remesas genera una transferencia de salida hacia caja destino"
    ):
        SeleccionarDestinoTransferenciaAction(context).verify_state(boveda).do(
            caja).success()
        completar_transferencia_action.verify_state(transferencia).do(
            operador.password)
        transferencia.codigo = completar_transferencia_action.success()
        boveda.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_cajero)
    with allure.step(
            "El cajero de destino recibe la transferencia y confirma con montos correctos"
    ):
        transferencia.estado = confirmar_transferencia_action.fast_forward(
            cajero, transferencia)
        caja.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_remesas)
    with allure.step("la transferencia se contabiliza y ya no se muestra"):
        transferencia_finalizada_action.verify_state(boveda).do(transferencia)
        transferencia.estado = transferencia_finalizada_action.success(
            "Contabilizada")

    context.page.set_active_driver(driver_cajero)
    transferencia2 = Transferencia(
        caja, boveda, {
            moneda: monto + monto_apertura_caja
            for moneda, monto in transferencia.montos.items()
        })
    with allure.step(
            "El cajero de destino genera una nueva transferencia hacia la boveda general"
    ):
        transferencia2.codigo = completar_transferencia_action.fast_forward(
            cajero, transferencia2)
        caja.agregar_operacion(transferencia2)

    context.page.set_active_driver(driver_remesas)
    with allure.step(
            "Boveda general recepciona el deposito y luego lo confirma con montos correctos"
    ):
        transferencia2.estado = recepcionar_transferencia_action.fast_forward(
            operador, transferencia2)
        confirmar_transferencia_action.fast_forward(operador, transferencia2)

    context.page.set_active_driver(driver_cajero)
    with allure.step("la transferencia se contabiliza y ya no se muestra"):
        transferencia_finalizada_action.verify_state(caja).do(transferencia2)
        transferencia2.estado = transferencia_finalizada_action.fast_forward(
            transferencia2)
        boveda.agregar_operacion(transferencia2)

    with allure.step("El cajero realiza un cierre total"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()

    context.page.set_active_driver(driver_remesas)
    with allure.step(
            "El operador de remesas realiza un cierre total correctamente"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
        context.boveda.agregar_operacion(cierre_boveda)
        logout_action.verify_state(operador).do().success()
示例#10
0
def test_solicitud_fondos_boveda_sin_fondos(context, monto_apertura_caja):
    cajero = context.cajeros[0]
    caja = context.sucursal.cajas[0]
    apertura_caja = Apertura(
        {m: monto_apertura_caja
         for m in caja.monedas_permitidas})

    driver_operador = context.driver_manager.main_driver
    operador = context.operador_remesas
    boveda = context.boveda
    monto_apertura_boveda = 0
    apertura_boveda = Apertura(
        {m: monto_apertura_boveda
         for m in boveda.monedas_permitidas})

    monedas = caja.monedas_permitidas.intersection(context.boveda.monedas)
    solicitud = SolicitudFondo(caja, boveda,
                               {m: choice([20, 50])
                                for m in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_solicitud_action = CompletarSolicitudFondosAction(context)
    recibir_solicitud_action = RecibirSolicitudFondosAction(context)
    aceptar_solicitud_action = AceptarSolicitudFondosAction(context)

    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    driver_cajero = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero,
                                     caja,
                                     apertura_caja,
                                     desbloquear=monto_apertura_caja > 0)
        caja.agregar_operacion(apertura_caja)

    with allure.step(
            "El cajero genera una solicitud de fondos con montos sugeridos"):
        completar_solicitud_action.verify_state(caja).do(
            solicitud, cajero.password)

    with allure.step("La solicitud se genera correctamnete"):
        solicitud.codigo = completar_solicitud_action.success()

    context.page.set_active_driver(driver_operador)
    with allure.step(
            "Boveda recibe la solicitud y la intenta aceptar pero no cuenta con fondos"
    ):
        recibir_solicitud_action.verify_state(boveda).do(solicitud).success()
        aceptar_solicitud_action.verify_state(boveda, solicitud).do(
            operador.password).failure()
        recibir_solicitud_action.success()

    context.page.set_active_driver(driver_cajero)
    with allure.step("La solicitud permanece pendiente"):
        CancelarSolicitudFondosAction(context).verify_state(caja, solicitud)

    context.page.set_active_driver(driver_operador)
    with allure.step(
            "El operador de remesas realiza un cierre total correctamente"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
        context.boveda.agregar_operacion(cierre_boveda)
        logout_action.verify_state(operador).do().success()

    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero realiza un cierre total correctamente"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()
示例#11
0
def test_solicitar_fondos_montos_solicitados(context):
    cajero = context.cajeros[0]
    caja = context.sucursal.cajas[0]
    monto_apertura_caja = 0
    apertura_caja = Apertura(
        {m: monto_apertura_caja
         for m in caja.monedas_permitidas})

    driver_operador = context.driver_manager.main_driver
    operador = context.operador_remesas
    boveda = context.boveda
    monto_apertura_boveda = 1000
    apertura_boveda = Apertura(
        {m: monto_apertura_boveda
         for m in boveda.monedas_permitidas})

    monedas = caja.monedas_permitidas.intersection(context.boveda.monedas)
    solicitud = SolicitudFondo(caja, boveda,
                               {m: choice([20, 50])
                                for m in monedas})
    transferencia = Transferencia(boveda, caja, solicitud.montos,
                                  solicitud.observaciones)

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    cierre_boveda_action = CierreOperableAction(context)
    completar_solicitud_action = CompletarSolicitudFondosAction(context)
    recibir_solicitud_action = RecibirSolicitudFondosAction(context)
    aceptar_solicitud_action = AceptarSolicitudFondosAction(context)
    confirmar_transferencia_action = ConfirmarTransferenciaAction(context)
    transferencia_finalizada_action = TransferenciaFinalizadaAction(context)

    with allure.step("El operador de remesas apertura la boveda general"):
        login_action.verify_state().do(operador,
                                       boveda).success("Apertura Boveda")
        apertura_action.fast_forward(operador, boveda, apertura_boveda)
        boveda.agregar_operacion(apertura_boveda)

    driver_cajero = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero apertura su caja"):
        login_action.verify_state().do(cajero, caja).success("Apertura Caja")
        apertura_action.fast_forward(cajero, caja, apertura_caja)
        caja.agregar_operacion(apertura_caja)

    with allure.step(
            "El cajero genera una solicitud de fondos con montos sugeridos"):
        completar_solicitud_action.verify_state(caja).do(
            solicitud, cajero.password)

    with allure.step("La solicitud se genera correctamnete"):
        solicitud.codigo = completar_solicitud_action.success()

    context.page.set_active_driver(driver_operador)
    with allure.step(
            "Boveda recibe la solicitud y la acepta con los montos sugeridos"):
        recibir_solicitud_action.verify_state(boveda).do(solicitud).success()
        aceptar_solicitud_action.verify_state(boveda,
                                              solicitud).do(operador.password)

    with allure.step("La solicitud se confirma y se genera la transferencia"):
        transferencia.codigo = solicitud.codigo
        aceptar_solicitud_action.success(transferencia)
        boveda.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_cajero)
    with allure.step(
            "El cajero recibe la transferencia y confirma con montos correctos"
    ):
        SolicitudFinalizadaAction(context).verify_state(caja).do(
            solicitud).success("Aceptada")
        transferencia.estado = confirmar_transferencia_action.fast_forward(
            cajero, transferencia)

    context.page.set_active_driver(driver_operador)
    with allure.step("la transferencia se contabiliza y ya no se muestra"):
        transferencia.estado = transferencia_finalizada_action.fast_forward(
            transferencia)
        caja.agregar_operacion(transferencia)

    with allure.step(
            "El operador de remesas realiza un cierre total correctamente"):
        cierre_boveda = CierreTotal(boveda.balance())
        cierre_boveda_action.fast_forward(operador, boveda, cierre_boveda)
        context.boveda.agregar_operacion(cierre_boveda)
        logout_action.verify_state(operador).do().success()

    context.page.set_active_driver(driver_cajero)
    with allure.step("El cajero realiza un cierre total correctamente"):
        cierre_caja = CierreTotal(caja.balance())
        cierre_caja_action.fast_forward(cajero, caja, cierre_caja)
        caja.agregar_operacion(cierre_caja)
        logout_action.verify_state(cajero).do().success()
def test_transferencia_caja_caja_una_moneda_de_dos(context,
                                                   monto_apertura_destino):
    driver_origen = context.driver_manager.main_driver
    caja_origen = context.sucursal.cajas[0]
    cajero_origen = context.cajeros[0]
    apertura_origen = Apertura(
        {m: 1000
         for m in caja_origen.monedas_permitidas})

    caja_destino = context.sucursal.cajas[1]
    cajero_destino = context.cajeros[1]
    apertura_destino = Apertura(
        {m: monto_apertura_destino
         for m in caja_origen.monedas_permitidas})

    monedas = caja_origen.monedas_permitidas.intersection(
        caja_destino.monedas_permitidas)
    transferencia = Transferencia(caja_origen, caja_destino,
                                  {next(iter(monedas)): randint(1, 150)})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    cierre_caja_action = CierreTotalCajaAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    confirmar_transferencia_action = ConfirmarTransferenciaAction(context)
    transferencia_finalizada_action = TransferenciaFinalizadaAction(context)

    with allure.step("El cajero de origen apertura su caja"):
        login_action.verify_state().do(cajero_origen,
                                       caja_origen).success("Apertura Caja")
        apertura_action.fast_forward(cajero_origen,
                                     caja_origen,
                                     apertura_origen,
                                     desbloquear=True)
        caja_origen.agregar_operacion(apertura_origen)

    driver_destino = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_destino)
    with allure.step("El cajero de destino apertura su caja"):
        login_action.verify_state().do(cajero_destino,
                                       caja_destino).success("Apertura Caja")
        apertura_action.fast_forward(cajero_destino,
                                     caja_destino,
                                     apertura_destino,
                                     desbloquear=monto_apertura_destino > 0)
        caja_destino.agregar_operacion(apertura_destino)

    context.page.set_active_driver(driver_origen)
    with allure.step(
            f"El cajero de origen genera un deposito en la caja destino"):
        transferencia.codigo = completar_transferencia_action.fast_forward(
            cajero_origen, transferencia)
        caja_origen.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_destino)
    with allure.step(
            "El cajero de destino recibe la transferencia y la confirma con montos correctos"
    ):
        transferencia.estado = confirmar_transferencia_action.fast_forward(
            cajero_destino, transferencia)
        caja_destino.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_origen)
    with allure.step("La transferencia se contabiliza"):
        transferencia_finalizada_action.verify_state(caja_origen).do(
            transferencia)
        transferencia.estado = transferencia_finalizada_action.success(
            "Contabilizada")

    with allure.step(
            "El cajero de origen realiza un cierre total correctamente"):
        cierre_caja_origen = CierreTotal(caja_origen.balance())
        cierre_caja_action.fast_forward(cajero_origen, caja_origen,
                                        cierre_caja_origen)
        caja_origen.agregar_operacion(cierre_caja_origen)
        logout_action.verify_state(cajero_origen).do().success()

    context.page.set_active_driver(driver_destino)
    with allure.step(
            "El cajero de destino realiza un cierre total correctamente"):
        cierre_caja_destino = CierreTotal(caja_destino.balance())
        cierre_caja_action.fast_forward(cajero_destino, caja_destino,
                                        cierre_caja_destino)
        logout_action.verify_state(cajero_destino).do().success()
def test_transferencia_caja_caja_sin_monedas(context):
    driver_origen = context.driver_manager.main_driver
    cajero_origen = context.cajeros[0]
    cajero_destino = context.cajeros[1]

    caja_origen = context.sucursal.cajas[0]
    caja_destino = context.sucursal.cajas[1]
    moneda_origen = 'ARS'
    moneda_destino = 'PEN'
    monedas_eliminada_origen = [
        moneda for moneda in caja_origen.monedas
        if moneda.codigo != moneda_origen
    ]
    monedas_eliminada_destino = [
        moneda for moneda in caja_destino.monedas
        if moneda.codigo != moneda_destino
    ]

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    seleccionar_destinatario_action = SeleccionarDestinoTransferenciaAction(
        context)
    editar_caja_action = EditarCajaAction(context)

    with allure.step("El usuario ingresa como Administrador"):
        LoginAction(context).verify_state().do(
            context.administrador).success("Dashboard")

    IrEdicionSucursalAction(context).verify_state().do(
        context.sucursal).success()
    for c, monedas in [[caja_origen, monedas_eliminada_origen],
                       [caja_destino, monedas_eliminada_destino]]:
        editar_caja_action.verify_state(c)
        [c.deshabilitar_moneda_giro("Ambos", moneda) for moneda in monedas]
        editar_caja_action.do(c).success()
    logout_action.verify_state(context.administrador).do().success()

    apertura_origen = Apertura({m: 0 for m in caja_origen.monedas_permitidas})
    apertura_destino = Apertura(
        {m: 0
         for m in caja_destino.monedas_permitidas})

    with allure.step("El cajero de origen apertura su caja"):
        login_action.verify_state().do(cajero_origen,
                                       caja_origen).success("Apertura Caja")
        apertura_action.fast_forward(cajero_origen, caja_origen,
                                     apertura_origen)
        caja_origen.agregar_operacion(apertura_origen)

    driver_destino = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_destino)
    with allure.step("El cajero de destino apertura su caja"):
        login_action.verify_state().do(cajero_destino,
                                       caja_destino).success("Apertura Caja")
        apertura_action.fast_forward(cajero_destino, caja_destino,
                                     apertura_destino)
        caja_destino.agregar_operacion(apertura_destino)

    context.page.set_active_driver(driver_origen)
    with allure.step(
            "El cajero de origen intenta generar una transferencia de salida hacia caja destino"
    ):
        seleccionar_destinatario_action.verify_state(caja_origen).do(
            caja_destino)

    with allure.step(
            "Pero no puede porque no hay monedas en comun entre las cajas"):
        seleccionar_destinatario_action.failure()

    for driver, usuario in [[driver_destino, cajero_destino],
                            [driver_origen, cajero_origen]]:
        context.page.set_active_driver(driver)
        logout_action.verify_state(usuario).do().success()
def test_transferencia_caja_caja_caja_sin_saldo(context,
                                                monto_apertura_destino):
    cajero_origen = context.cajeros[0]
    caja_origen = context.sucursal.cajas[0]
    monto_apertura_origen = 1000
    apertura_origen = Apertura(
        {m: monto_apertura_origen
         for m in caja_origen.monedas_permitidas})

    caja_destino = context.sucursal.cajas[1]
    driver_destino = context.driver_manager.main_driver
    cajero_destino = context.cajeros[1]
    apertura_destino = Apertura(
        {m: monto_apertura_destino
         for m in caja_destino.monedas_permitidas})

    monedas = caja_origen.monedas_permitidas.intersection(
        caja_destino.monedas_permitidas)
    transferencia = Transferencia(
        caja_origen, caja_destino,
        {moneda: randint(1, 100)
         for moneda in monedas})

    login_action = LoginAction(context)
    logout_action = LogoutAction(context)
    apertura_action = AperturaOperableAction(context)
    completar_transferencia_action = CompletarTransferenciaAction(context)
    confirmar_transferencia_action = ConfirmarTransferenciaAction(context)
    transferencia_finalizada_action = TransferenciaFinalizadaAction(context)

    with allure.step("El cajero de destino apertura su caja"):
        login_action.verify_state().do(cajero_destino,
                                       caja_destino).success("Apertura Caja")
        apertura_action.fast_forward(cajero_destino,
                                     caja_destino,
                                     apertura_destino,
                                     desbloquear=monto_apertura_destino > 0)
        caja_destino.agregar_operacion(apertura_destino)

    driver_origen = context.driver_manager.new_driver()
    context.page.set_active_driver(driver_origen)
    with allure.step("El cajero de origen apertura su caja"):
        login_action.verify_state().do(cajero_origen,
                                       caja_origen).success("Apertura Caja")
        apertura_action.fast_forward(cajero_origen,
                                     caja_origen,
                                     apertura_origen,
                                     desbloquear=True)
        caja_origen.agregar_operacion(apertura_origen)

    with allure.step(
            "El cajero de origen genera una transferencia de salida hacia caja destino"
    ):
        transferencia.codigo = completar_transferencia_action.fast_forward(
            cajero_origen, transferencia)
        caja_origen.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_destino)
    with allure.step(
            "El cajero de destino recibe la transferencia y la confirma con montos correctos"
    ):
        confirmar_transferencia_action.fast_forward(cajero_destino,
                                                    transferencia)
        caja_destino.agregar_operacion(transferencia)

    context.page.set_active_driver(driver_origen)
    with allure.step("La transferencia se contabiliza"):
        transferencia.estado = transferencia_finalizada_action.fast_forward(
            transferencia)

    context.page.set_active_driver(driver_destino)
    transferencia2 = Transferencia(
        caja_destino, caja_origen, {
            moneda: monto + monto_apertura_destino + 1
            for moneda, monto in transferencia.montos.items()
        })
    with allure.step(
            "El cajero de destino intenta generar una nueva transferencia hacia origen"
    ):
        SeleccionarDestinoTransferenciaAction(context).verify_state(
            caja_destino).do(caja_origen).success()
        completar_transferencia_action.verify_state(transferencia2).do(
            cajero_destino.password)

    with allure.step("Pero no puede porque no cuenta con saldo"):
        completar_transferencia_action.failure("Sin Saldo")

    for driver, usuario in [[driver_origen, cajero_origen],
                            [driver_destino, cajero_destino]]:
        context.page.set_active_driver(driver)
        logout_action.verify_state(usuario).do().success()