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()
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()
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()
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()
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()
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()
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()
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()
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()