Skip to content

Commit 0502339

Browse files
committed
Avoid potential duplicates when decoding firstname without specifying gender.
1 parent 3cb77c7 commit 0502339

2 files changed

Lines changed: 33 additions & 1 deletion

File tree

src/codicefiscale/codicefiscale.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ def decode_firstname(
323323

324324
# return all names (both genders) if no gender specified
325325
all_names = names_by_gender.get("M", []) + names_by_gender.get("F", [])
326-
return all_names if all_names else None
326+
return sorted(set(all_names)) if all_names else None
327327

328328

329329
def encode_birthdate(

tests/test_decode.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,35 @@ def test_decode_firstname_options_foreign_birthplace():
418418
assert "firstname_options" in italian_decoded
419419
assert len(italian_decoded["firstname_options"]) > 0
420420
assert isinstance(italian_decoded["firstname_options"], list)
421+
422+
423+
def test_decode_firstname():
424+
"""Test decode_firstname function with different parameters."""
425+
# test with gender M
426+
names_m = codicefiscale.decode_firstname("FBA", "M")
427+
assert names_m is not None
428+
assert isinstance(names_m, list)
429+
assert "Fabio" in names_m
430+
431+
# test with gender F
432+
names_f = codicefiscale.decode_firstname("FBA", "F")
433+
assert names_f is not None
434+
assert isinstance(names_f, list)
435+
assert "Fabia" in names_f or "Fabiana" in names_f
436+
437+
# test without gender (should return both M and F, deduplicated)
438+
names_all = codicefiscale.decode_firstname("FBA")
439+
assert names_all is not None
440+
assert isinstance(names_all, list)
441+
assert len(names_all) == len(set(names_all)) # no duplicates
442+
assert len(names_all) >= max(len(names_m), len(names_f))
443+
444+
# test unisex name (Alex) - should appear only once
445+
names_alex = codicefiscale.decode_firstname("LXA")
446+
assert names_alex is not None
447+
assert len(names_alex) == len(set(names_alex)) # no duplicates
448+
assert names_alex.count("Alex") == 1
449+
450+
# test with invalid code
451+
names_invalid = codicefiscale.decode_firstname("XXX")
452+
assert names_invalid is None

0 commit comments

Comments
 (0)