Last active
December 17, 2018 13:09
-
-
Save samuelgrigolato/c4ba6f11192faea9c550a77804745e27 to your computer and use it in GitHub Desktop.
Resolução do Problema Nomes de Autores de Obras Bibliográficas (dojo Randori Opensanca/GDG-Aqa 15/12/2018)
This file contains hidden or 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
ARTIGOS = ["da", "de", "do", "das", "dos"] | |
PARENTESCOS = ["FILHO", "FILHA", "NETO", "NETA", "SOBRINHO", "SOBRINHA", "JUNIOR"] | |
def formatar_nome(nome): | |
if nome is None: | |
raise ValueError("Nome é obrigatório!") | |
if type(nome) != str: | |
raise ValueError("Nome deve ser uma string!") | |
partes = nome.split() | |
if len(partes) == 1: | |
return nome.upper() | |
elif len(partes) == 2: | |
sobrenome = formatar_sobrenome(partes[1]) | |
nome = capitalizar_nome(partes[0]) | |
return f"{sobrenome}, {nome}" | |
else: | |
sobrenome = formatar_sobrenome(partes[-1]) | |
nomes = partes[:-1] | |
if sobrenome in PARENTESCOS: | |
sobrenomes = [ | |
formatar_sobrenome(sobrenome) | |
for sobrenome in partes[-2:] | |
] | |
sobrenome = ' '.join(sobrenomes) | |
nomes = partes[0:-2] | |
nomes_formatados = [ | |
capitalizar_nome(nome) | |
for nome in nomes | |
] | |
nome_formatado = ' '.join(nomes_formatados) | |
return f"{sobrenome}, {nome_formatado}" | |
def capitalizar_nome(nome): | |
nome_caixa_baixa = nome.lower() | |
if nome_caixa_baixa in ARTIGOS: | |
return nome_caixa_baixa | |
else: | |
return nome_caixa_baixa.capitalize() | |
def formatar_sobrenome(nome): | |
nome_caixa_baixa = nome.lower() | |
if nome_caixa_baixa in ARTIGOS: | |
return nome_caixa_baixa | |
else: | |
return nome_caixa_baixa.upper() |
This file contains hidden or 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
from nomes import formatar_nome | |
def test_nome_unico(): | |
#caso tenha só um nome | |
nome = "GUIMARAES" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "GUIMARAES" | |
def test_outro_nome_unico(): | |
#caso tenha só um nome | |
nome = "OLIVEIRA" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "OLIVEIRA" | |
def test_nome_unico_minusculo(): | |
#caso tenha só um nome | |
nome = "oliveira" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "OLIVEIRA" | |
def test_nome_completo_caixa_correta(): | |
# given | |
nome = "João SILVA" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SILVA, João" | |
def test_none(): | |
# given | |
nome = None | |
# when | |
try: | |
res = formatar_nome(nome) | |
assert False | |
except ValueError as ex: | |
assert str(ex) == 'Nome é obrigatório!' | |
def test_nome_completo_caixa_alta(): | |
# given | |
nome = "JOÃO SILVA" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SILVA, João" | |
def test_nome_completo_caixa_baixa(): | |
# given | |
nome = "joão silva" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SILVA, João" | |
def test_nome_com_dois_sobrenomes(): | |
# given | |
nome = "JOÃO SOUSA SILVA" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SILVA, João Sousa" | |
def test_nome_com_tres_sobrenomes(): | |
# given | |
nome = "JOÃO SOUSA SILVA BENICIO" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "BENICIO, João Sousa Silva" | |
def test_nome_com_artigo(): | |
# given | |
nome = "JOÃO DA SOUSA SILVA BENICIO" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "BENICIO, João da Sousa Silva" | |
def test_nome_com_artigo_de(): | |
# given | |
nome = "JOÃO de SOUSA" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SOUSA, João de" | |
def test_nome_com_artigo_no_inicio(): | |
# given | |
nome = "DA SOUSA SILVA BENICIO" | |
# when | |
res = formatar_nome(nome) | |
#then | |
assert res == "BENICIO, da Sousa Silva" | |
def test_nome_com_parentesco_maiusculo(): | |
#given | |
nome = "FELIPE NETO" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "NETO, Felipe" | |
def test_nome_com_tres_parentesco(): | |
#given | |
nome = "FELIPE LUCAS NETO" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "LUCAS NETO, Felipe" | |
def test_nome_com_tres_parentesco_junior(): | |
#given | |
nome = "LUIZ CARLOS JUNIOR" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "CARLOS JUNIOR, Luiz" | |
def test_nome_com_tres_parentesco_filho(): | |
#given | |
nome = "marcos souza filho" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SOUZA FILHO, Marcos" | |
def test_nome_com_quatro_parentesco(): | |
#given | |
nome = "marcos guimaraes souza filho" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "SOUZA FILHO, Marcos Guimaraes" | |
def test_nome_com_artigo_no_sobrenome(): | |
#given | |
nome = "marcos guimaraes souza de filho" | |
#when | |
res = formatar_nome(nome) | |
#then | |
assert res == "de FILHO, Marcos Guimaraes Souza" | |
def test_numero(): | |
#given | |
nome = 123 | |
#when | |
try: | |
res = formatar_nome(nome) | |
assert False | |
except ValueError as ex: | |
assert str(ex) == 'Nome deve ser uma string!' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment