From 59753638c5df0ad770d9d4c39c8af6efd6cc70b7 Mon Sep 17 00:00:00 2001 From: Gavin Huttley Date: Thu, 12 Mar 2026 18:01:17 +1100 Subject: [PATCH] BUG: don't modify case of surnames --- src/citeable/_keys.py | 2 +- src/citeable/_validate.py | 4 ++-- tests/test_keys.py | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/citeable/_keys.py b/src/citeable/_keys.py index cb6a1f1..5575a63 100644 --- a/src/citeable/_keys.py +++ b/src/citeable/_keys.py @@ -17,7 +17,7 @@ def generate_key(author: list[str], year: int) -> str: Algorithm: 1. Extract surname from the first author (before comma, or last token). - 2. Strip non-ASCII and spaces; title-case. + 2. Strip non-ASCII and spaces; preserve original case. 3. Return ``"{surname}.{year}"``. """ surname = extract_surname(author[0]) diff --git a/src/citeable/_validate.py b/src/citeable/_validate.py index e48b9b7..b66d793 100644 --- a/src/citeable/_validate.py +++ b/src/citeable/_validate.py @@ -27,11 +27,11 @@ def extract_surname(name: str) -> str: """Extract surname from an author name string. Handles both ``"Last, First"`` and ``"First Last"`` formats. - Returns the surname stripped of non-ASCII characters and title-cased. + Returns the surname stripped of non-ASCII characters, preserving original case. """ if "," in name: surname = name.split(",", maxsplit=1)[0].strip() else: surname = name.rsplit(maxsplit=1)[-1].strip() surname = re.sub(r"[^A-Za-z]", "", surname) - return surname.title() + return surname diff --git a/tests/test_keys.py b/tests/test_keys.py index ab328a9..a537a2f 100644 --- a/tests/test_keys.py +++ b/tests/test_keys.py @@ -4,6 +4,7 @@ from citeable import Article, Misc, Software, assign_unique_keys from citeable._keys import generate_key +from citeable._validate import extract_surname # ── generate_key ───────────────────────────────────────────────────────── @@ -20,8 +21,18 @@ def test_generate_key_strips_non_ascii(): assert generate_key(["Müller, Hans"], 2020) == "Mller.2020" -def test_generate_key_title_cases(): - assert generate_key(["van der berg, Jan"], 2020) == "Vanderberg.2020" +def test_generate_key_preserves_case(): + assert generate_key(["van der berg, Jan"], 2020) == "vanderberg.2020" + + +def test_generate_key_camel_case_preserved(): + assert generate_key(["McArthur, Robert"], 2021) == "McArthur.2021" + assert generate_key(["McDonald, Daniel"], 2022) == "McDonald.2022" + + +def test_extract_surname_preserves_case(): + assert extract_surname("McArthur, Robert") == "McArthur" + assert extract_surname("McDonald, Daniel") == "McDonald" # ── assign_unique_keys ──────────────────────────────────────────────────