Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions tests/test_cep.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,5 +169,72 @@ def test_get_cep_information_from_address_invalid_cep_raise_exception_cep_not_fo
)


@patch("brutils.cep.urlopen")
class TestGetAddressFromCEP_MC_DC(TestCase):
def test_ct1_cep_invalido_com_excecao(self, mock_urlopen):
"""CT1: cep inválido e raise_exceptions=True → lança InvalidCEP"""
with self.assertRaises(InvalidCEP):
get_address_from_cep("abcdefg", raise_exceptions=True)

def test_ct2_cep_invalido_sem_excecao(self, mock_urlopen):
"""CT2: cep inválido e raise_exceptions=False → retorna None"""
result = get_address_from_cep("abcdefg", raise_exceptions=False)
self.assertIsNone(result)

@patch("brutils.cep.loads")
def test_ct3_cep_valido(self, mock_loads, mock_urlopen):
"""CT3: cep válido → retorna dicionário com endereço"""

# A função get_address_from_cep faz dois loads() no mesmo JSON
mock_loads.side_effect = [
{"cep": "01001-000"}, # Primeiro loads para verificar "erro"
{"cep": "01001-000"}, # Segundo loads para retornar Address
]

# Simula a resposta da API ViaCEP
mock_response = MagicMock()
mock_response.read.return_value = b'{"cep": "01001-000"}'

# Corrige o mock para suportar o contexto "with urlopen(...) as f"
mock_urlopen.return_value.__enter__.return_value = mock_response

# Executa a chamada
result = get_address_from_cep("01001000", raise_exceptions=False)

# Valida o resultado
self.assertIsInstance(result, dict)
self.assertEqual(result.get("cep"), "01001-000")

def test_ct4_erro_na_api_com_excecao(self, mock_urlopen):
"""CT4: cep válido mas inexistente + raise_exceptions=True → lança CEPNotFound"""
mock_response = MagicMock()
mock_response.read.return_value = b'{"erro": true}'
mock_urlopen.return_value = mock_response

with self.assertRaises(CEPNotFound):
get_address_from_cep("99999999", raise_exceptions=True)

def test_ct5_erro_na_api_sem_excecao(self, mock_urlopen):
"""CT5: cep válido mas inexistente + raise_exceptions=False → retorna None"""
mock_response = mock_urlopen.return_value
mock_response.read.return_value = b'{"erro": true}'

result = get_address_from_cep("99999999", raise_exceptions=False)
self.assertIsNone(result)

def test_ct6_viacep_responde_com_erro_e_raise_exceptions_true(
self, mock_urlopen
):
"""
CT6: cobre a linha 172 e a decisão CD2 (data.get("erro", True))
"""
mock_response = MagicMock()
mock_response.read.return_value = b'{"erro": true}'
mock_urlopen.return_value = mock_response

with self.assertRaises(CEPNotFound):
get_address_from_cep("01001000", raise_exceptions=True)


if __name__ == "__main__":
main()