def test_cierre_total_con_diferencia(context, diferencia):
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]
    monto = 100

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

    cierre = CierreTotal(
        {moneda: monto + diferencia
         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")

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

    with allure.step("Realiza un cierre total con montos dentro del margen"):
        cierre_action.verify_state(caja, cierre).do(cajero.password)

    with allure.step("La caja se cierra correctamente"):
        cierre_action.success()
    LogoutAction(context).verify_state(cajero).do().success()
def test_cierre_total(context):
    caja = context.sucursal.cajas[0]
    cajero = context.cajeros[0]

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

    cierre = CierreTotal({moneda: 0 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")

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

    with allure.step("Realiza un cierre total con montos correctos"):
        cierre_action.verify_state(caja, cierre).do(cierre)

    with allure.step("La caja se cierra totalmente"):
        cierre_action.success()

    LogoutAction(context).verify_state(cajero).do().success()