def test_deshabilitar_caja_con_saldo(context):
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]

    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)

    editar_caja_action = EditarCajaAction(context)

    with allure.step("El usuario cuenta con una caja con saldo"):
        apertura_action.fast_forward(cajero, caja, apertura, desbloquear=True, asignar_operador=True,
                                     redireccionar=False)
        caja.agregar_operacion(apertura)
        cierre_action.fast_forward(cajero, caja, cierre, redirect=False)
        caja.agregar_operacion(cierre)

    with allure.step("Ingresa como administrador"):
        LoginAction(context).verify_state().do(context.administrador).success("Dashboard")

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

    with allure.step("Pero no puede porque su saldo es mayor a 0"):
        editar_caja_action.failure(caja, "con saldo")
        caja.activar()
        GuardarSucursalAction(context).verify_state(context.sucursal)
        LogoutAction(context).verify_state(context.administrador).do().success()
def test_aperturar_caja_con_bloqueo(context, diferencia):
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]
    monto_apertura = 100

    apertura1 = Apertura(
        {moneda: monto_apertura
         for moneda in caja.monedas_permitidas})
    apertura2 = Apertura({
        moneda: monto_apertura + diferencia
        for moneda in caja.monedas_permitidas
    })
    apertura_action = AperturaOperableAction(context)

    bloqueo = Bloqueo(
        caja,
        cajero,
        "Apertura",
        logico=apertura1.montos,
        reales=apertura2.montos,
        diferencia={moneda: diferencia
                    for moneda in caja.monedas_permitidas})
    desbloqueo_action = DesbloquearCajaAction(context)

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

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

    # Abro y cierro la caja para inyectarle balance
    apertura_action.fast_forward(cajero, caja, apertura1, desbloquear=True)
    caja.agregar_operacion(apertura1)

    cierre_action.fast_forward(cajero, caja, cierre1)
    caja.agregar_operacion(cierre1)

    with allure.step(f"Apertura la caja {caja.codigo} con montos incorrectos"):
        apertura_action.verify_state(caja).do(apertura2,
                                              deberia_bloquearse=True)

    with allure.step("la caja se bloquea"):
        apertura_action.failure()
        LogoutAction(context).verify_state(cajero).do().success()

    with allure.step(
            "El area de operaciones puede ver correctamente la razon de bloqueo y desbloquear la caja"
    ):
        desbloqueo_action.fast_forward(context.operaciones, bloqueo,
                                       "Desbloqueo de prueba")
예제 #3
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()
예제 #4
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()
예제 #5
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()
예제 #6
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()
예제 #7
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()
예제 #8
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()
예제 #9
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()