From c29fe2e4650ed213e4bf62c99219a8f14c8bc136 Mon Sep 17 00:00:00 2001 From: David Lawrence Date: Mon, 5 Oct 2026 16:01:06 -0400 Subject: [PATCH] Bug 2078184 - Add author's GitHub login to the github_prod_metrics table --- data.yml | 2 ++ main.py | 2 ++ tests/test_transform_data.py | 37 ++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/data.yml b/data.yml index a3ffac5..eb53bb7 100644 --- a/data.yml +++ b/data.yml @@ -24,6 +24,8 @@ projects: - name: labels type: STRING mode: REPEATED + - name: author_username + type: STRING - name: snapshot_date type: DATE - id: commits diff --git a/main.py b/main.py index df3d515..096eeac 100755 --- a/main.py +++ b/main.py @@ -68,6 +68,7 @@ "date_landed", "date_approved", "labels", + "author_username", ), "commits": ( "pull_request_id", @@ -787,6 +788,7 @@ def transform_data(raw_data: list[dict], repo: str) -> dict: if pr.get("labels") else [] ), + "author_username": (pr.get("user") or {}).get("login"), } # Extract and flatten commit data diff --git a/tests/test_transform_data.py b/tests/test_transform_data.py index e5d1889..04dcc68 100644 --- a/tests/test_transform_data.py +++ b/tests/test_transform_data.py @@ -157,6 +157,43 @@ def test_labels_empty_list(): assert result["pull_requests"][0]["labels"] == [] +def test_pr_author_username_extraction(): + """Test PR author login is extracted from the PR's user object.""" + raw_data = [ + { + "number": 1, + "title": "PR with author", + "state": "open", + "user": {"login": "octocat"}, + "labels": [], + "commit_data": [], + "reviewer_data": [], + "comment_data": [], + } + ] + + result = main.transform_data(raw_data, "mozilla/firefox") + assert result["pull_requests"][0]["author_username"] == "octocat" + + +@pytest.mark.parametrize("extra", [{}, {"user": None}], ids=["absent", "null"]) +def test_pr_author_username_missing_user(extra: dict): + """Test PR author is None when the user object is null or absent.""" + pr = { + "number": 1, + "title": "PR without author", + "state": "open", + "labels": [], + "commit_data": [], + "reviewer_data": [], + "comment_data": [], + **extra, + } + + result = main.transform_data([pr], "mozilla/firefox") + assert result["pull_requests"][0]["author_username"] is None + + def test_commit_transformation(): """Test commit fields mapping.""" raw_data = [