Skip to content

Commit d836f1b

Browse files
committed
fix(toggl): look up first name from Google
we are moving away from the pattern of first@compiler.la, so we can't rely on splitting the email address and using the prefix as the First Name instead, look up from Google, the same as for Last Name
1 parent 8bbd8f8 commit d836f1b

File tree

2 files changed

+21
-23
lines changed

2 files changed

+21
-23
lines changed

compiler_admin/services/toggl.py

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,35 +33,29 @@ def user_info():
3333
return files.JsonFileCache("TOGGL_USER_INFO")
3434

3535

36-
def _get_first_name(email: str) -> str:
37-
"""Get cached first name or derive from email."""
36+
def _get_name(email: str, name_key) -> str:
37+
"""Get cached name or query from Google."""
3838
info = user_info()
3939
user = info.get(email)
40-
first_name = user.get("First Name") if user else None
41-
if first_name is None:
42-
parts = email.split("@")
43-
first_name = parts[0].capitalize()
44-
data = {"First Name": first_name}
40+
name = user.get(name_key) if user else None
41+
if name is None:
42+
user = google_user_info(email)
43+
name = user.get(name_key) if user else None
4544
if email in info:
46-
info[email].update(data)
45+
info[email].update(user)
4746
else:
48-
info[email] = data
49-
return first_name
47+
info[email] = user
48+
return name
49+
50+
51+
def _get_first_name(email: str) -> str:
52+
"""Get cached last name or query from Google."""
53+
return _get_name(email, "First Name")
5054

5155

5256
def _get_last_name(email: str):
5357
"""Get cached last name or query from Google."""
54-
info = user_info()
55-
user = info.get(email)
56-
last_name = user.get("Last Name") if user else None
57-
if last_name is None:
58-
user = google_user_info(email)
59-
last_name = user.get("Last Name") if user else None
60-
if email in info:
61-
info[email].update(user)
62-
else:
63-
info[email] = user
64-
return last_name
58+
return _get_name(email, "Last Name")
6559

6660

6761
def _prepare_input(source_path: str | TextIO, column_renames: dict = {}) -> pd.DataFrame:

tests/services/test_toggl.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,26 +78,30 @@ def test_get_first_name_matching(mock_user_info):
7878
assert result == "User"
7979

8080

81-
def test_get_first_name_calcuated_with_record(mock_user_info):
81+
def test_get_first_name_lookup_with_record(mock_user_info, mock_google_user_info):
8282
email = "user@email.com"
8383
mock_user_info.return_value = {email: {"Data": 1234}}
84+
mock_google_user_info.return_value = {"First Name": "User"}
8485

8586
result = _get_first_name(email)
8687

8788
assert result == "User"
8889
assert mock_user_info.return_value[email]["First Name"] == "User"
8990
assert mock_user_info.return_value[email]["Data"] == 1234
91+
mock_google_user_info.assert_called_once_with(email)
9092

9193

92-
def test_get_first_name_calcuated_without_record(mock_user_info):
94+
def test_get_first_name_lookup_without_record(mock_user_info, mock_google_user_info):
9395
email = "user@email.com"
9496
mock_user_info.return_value = {email: {}}
97+
mock_google_user_info.return_value = {"First Name": "User"}
9598

9699
result = _get_first_name(email)
97100

98101
assert result == "User"
99102
assert mock_user_info.return_value[email]["First Name"] == "User"
100103
assert list(mock_user_info.return_value[email].keys()) == ["First Name"]
104+
mock_google_user_info.assert_called_once_with(email)
101105

102106

103107
def test_get_last_name_matching(mock_user_info, mock_google_user_info):

0 commit comments

Comments
 (0)