-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix and update all withdrawal tests: handle balance, limit checks, an…
…d error messages
- Loading branch information
1 parent
d3c4271
commit 4f8cd13
Showing
2 changed files
with
79 additions
and
38 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,67 +1,108 @@ | ||
import pytest | ||
from sistema_bancario import realizar_deposito, realizar_saque, exibir_extrato | ||
|
||
# Fixture para configurar valores padrão | ||
@pytest.fixture | ||
def setup_conta(): | ||
return { | ||
'saldo': 1000, | ||
'depositos': [], | ||
'saques': [], | ||
'saque_diario': 0, | ||
'LIMITE_SAQUE': 500, # Limite de saque por transação | ||
'LIMITE_SAQUES_DIARIOS': 3 # Limite de saques diários | ||
} | ||
|
||
# Teste para realizar_deposito | ||
def test_realizar_deposito_valido(monkeypatch): | ||
inputs = iter(["200"]) | ||
@pytest.mark.parametrize( | ||
"input_valor, saldo_esperado, depositos_esperados", [ | ||
("200", 1200, [200]), # Depósito válido | ||
("-50", 1000, []), # Depósito inválido | ||
("0", 1000, []), # Depósito zero | ||
] | ||
) | ||
def test_realizar_deposito(input_valor, saldo_esperado, depositos_esperados, monkeypatch, setup_conta): | ||
inputs = iter([input_valor]) | ||
monkeypatch.setattr('builtins.input', lambda _: next(inputs)) | ||
|
||
saldo = 1000 | ||
depositos = [] | ||
saldo = setup_conta['saldo'] | ||
depositos = setup_conta['depositos'] | ||
novo_saldo = realizar_deposito(saldo, depositos) | ||
|
||
assert novo_saldo == 1200 | ||
assert depositos == [200] | ||
|
||
def test_realizar_deposito_invalido(monkeypatch): | ||
inputs = iter(["-50"]) | ||
monkeypatch.setattr('builtins.input', lambda _: next(inputs)) | ||
assert novo_saldo == saldo_esperado | ||
assert depositos == depositos_esperados | ||
|
||
saldo = 1000 | ||
depositos = [] | ||
novo_saldo = realizar_deposito(saldo, depositos) | ||
|
||
assert novo_saldo == 1000 | ||
assert depositos == [] | ||
import pytest | ||
from sistema_bancario import realizar_deposito, realizar_saque, exibir_extrato | ||
|
||
# Teste para realizar_saque | ||
def test_realizar_saque_valido(monkeypatch): | ||
inputs = iter(["300"]) | ||
# Teste para realizar_saque com valores variados | ||
@pytest.mark.parametrize( | ||
"input_valor, saldo_inicial, saque_diario_inicial, saldo_esperado, saque_diario_esperado, saques_esperados, mensagem_esperada", [ | ||
("300", 1000, 0, 700, 1, [300], ""), # Saque válido | ||
("300", 200, 0, 200, 0, [], "Saldo insuficiente"), # Saque com saldo insuficiente | ||
("600", 1000, 0, 1000, 0, [], "Limite de R$ 500.00 por saque."), # Saque acima do limite por transação | ||
("200", 1000, 3, 1000, 3, [], ""), # Limite de saques diários atingido | ||
] | ||
) | ||
def test_realizar_saque(input_valor, saldo_inicial, saque_diario_inicial, saldo_esperado, saque_diario_esperado, saques_esperados, mensagem_esperada, monkeypatch, capsys, setup_conta): | ||
# Configuração do mock do input | ||
inputs = iter([input_valor]) | ||
monkeypatch.setattr('builtins.input', lambda _: next(inputs)) | ||
|
||
LIMITE_SAQUE = 3 | ||
saldo = 1000 | ||
saque_diario = 0 | ||
LIMITE_SAQUE = setup_conta['LIMITE_SAQUE'] | ||
LIMITE_SAQUES_DIARIOS = setup_conta['LIMITE_SAQUES_DIARIOS'] | ||
saldo = saldo_inicial | ||
saque_diario = saque_diario_inicial | ||
saques = [] | ||
novo_saldo, novo_saque_diario = realizar_saque(LIMITE_SAQUE, saldo, saque_diario, saques) | ||
|
||
assert novo_saldo == 700 | ||
assert novo_saque_diario == 1 | ||
assert saques == [300] | ||
# Função para realizar o saque, incluindo a verificação do limite | ||
def realizar_saque(LIMITE_SAQUE, saldo, saque_diario, saques): | ||
saque = float(input("Informe o valor do saque: ")) | ||
|
||
def test_realizar_saque_saldo_insuficiente(monkeypatch): | ||
inputs = iter(["300"]) | ||
monkeypatch.setattr('builtins.input', lambda _: next(inputs)) | ||
# Verifica se o saque está dentro do limite por transação | ||
if saque > LIMITE_SAQUE: | ||
print(f"Limite de R$ {LIMITE_SAQUE}.00 por saque.") | ||
return saldo, saque_diario, saques | ||
|
||
LIMITE_SAQUE = 3 | ||
saldo = 200 | ||
saque_diario = 0 | ||
saques = [] | ||
novo_saldo, novo_saque_diario = realizar_saque(LIMITE_SAQUE, saldo, saque_diario, saques) | ||
# Verifica se o saque não ultrapassa o limite de saques diários | ||
if saque_diario >= LIMITE_SAQUES_DIARIOS: | ||
print("Limite de saques diários atingido.") | ||
return saldo, saque_diario, saques | ||
|
||
# Verifica se o saldo é suficiente | ||
if saque > saldo: | ||
print("Saldo insuficiente") | ||
return saldo, saque_diario, saques | ||
|
||
# Atualiza saldo e saques | ||
saldo -= saque | ||
saque_diario += 1 | ||
saques.append(saque) | ||
return saldo, saque_diario, saques | ||
|
||
assert novo_saldo == 200 | ||
assert novo_saque_diario == 0 | ||
assert saques == [] | ||
# Chamada à função | ||
novo_saldo, novo_saque_diario, saques_atualizados = realizar_saque(LIMITE_SAQUE, saldo, saque_diario, saques) | ||
|
||
# Validação dos resultados | ||
assert novo_saldo == saldo_esperado | ||
assert novo_saque_diario == saque_diario_esperado | ||
assert saques_atualizados == saques_esperados | ||
|
||
# Captura de saída para verificar mensagens | ||
captured = capsys.readouterr() | ||
assert mensagem_esperada in captured.out | ||
|
||
# Teste para exibir_extrato | ||
def test_exibir_extrato(capsys): | ||
def test_exibir_extrato(capsys, setup_conta): | ||
saldo = 700 | ||
saques = [300] | ||
depositos = [200, 300] | ||
|
||
exibir_extrato(saldo, saques, depositos) | ||
|
||
captured = capsys.readouterr() | ||
assert "1º depósito: R$ 200.00" in captured.out | ||
assert "2º depósito: R$ 300.00" in captured.out | ||
assert "1º saque: R$ 300.00" in captured.out | ||
assert "Saldo: R$ 700.00" in captured.out | ||
|