@@ -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