Skip to content

Commit

Permalink
refactor: Relocate sprint_row() to conftest
Browse files Browse the repository at this point in the history
This reduces duplication across tests for creating sample SprintBoard data
  • Loading branch information
widal001 committed Nov 27, 2023
1 parent d871b06 commit e504968
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 95 deletions.
49 changes: 49 additions & 0 deletions analytics/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,19 @@
import json
from pathlib import Path

import pandas as pd

# skips the integration tests in tests/integrations/
# to run the integration tests, invoke them directly: pytest tests/integrations/
collect_ignore = ["integrations"]

DAY_0 = "2023-10-31"
DAY_1 = "2023-11-01"
DAY_2 = "2023-11-02"
DAY_3 = "2023-11-03"
DAY_4 = "2023-11-04"
DAY_5 = "2023-11-05"


def write_test_data_to_file(data: dict, output_file: str):
"""Write test JSON data to a file for use in a test."""
Expand Down Expand Up @@ -72,3 +81,43 @@ def json_sprint_row(
"story Points": points,
"title": "Test issue 1",
}


def sprint_row(
issue: int,
created: str = DAY_1,
closed: str | None = None,
status: str = "In Progress",
points: int = 1,
sprint: int = 1,
sprint_start: str = DAY_1,
sprint_length: int = 2,
) -> dict:
"""Create a sample row of the SprintBoard dataset."""
# create timestamp and time delta fields
sprint_start_ts = pd.Timestamp(sprint_start)
sprint_duration = pd.Timedelta(days=sprint_length)
sprint_end_ts = sprint_start_ts + sprint_duration
created_date = pd.Timestamp(created, tz="UTC")
closed_date = pd.Timestamp(closed, tz="UTC") if closed else None
# return the sample record
return {
"issue_number": issue,
"issue_title": f"Issue {issue}",
"type": "issue",
"issue_body": f"Description of issue {issue}",
"status": "Done" if closed else status,
"assignees": "mickeymouse",
"labels": [],
"url": f"https://github.com/HHS/simpler-grants-gov/issues/{issue}",
"points": points,
"milestone": "Milestone 1",
"milestone_due_date": sprint_end_ts,
"milestone_description": "Milestone 1 description",
"sprint": f"Sprint {sprint}",
"sprint_start_date": sprint_start_ts,
"sprint_end_date": sprint_end_ts,
"sprint_duration": sprint_duration,
"created_date": created_date,
"closed_date": closed_date,
}
61 changes: 10 additions & 51 deletions analytics/tests/datasets/test_sprint_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,57 +5,16 @@
from analytics.datasets.sprint_board import SprintBoard

from tests.conftest import (
DAY_1,
DAY_2,
DAY_4,
DAY_5,
json_issue_row,
json_sprint_row,
sprint_row,
write_test_data_to_file,
)

DAY_1 = "2023-11-01"
DAY_2 = "2023-11-02"
DAY_3 = "2023-11-03"
DAY_4 = "2023-11-04"
DAY_5 = "2023-11-05"


def sprint_board_row(
issue: int,
created: str = DAY_1,
closed: str | None = None,
status: str = "In Progress",
points: int = 1,
sprint: int = 1,
sprint_start: str = DAY_1,
sprint_length: int = 2,
) -> dict:
"""Create a sample row of the SprintBoard dataset."""
# create timestamp and time delta fields
sprint_start_ts = pd.Timestamp(sprint_start)
sprint_duration = pd.Timedelta(days=sprint_length)
sprint_end_ts = sprint_start_ts + sprint_duration
created_date = pd.Timestamp(created, tz="UTC")
closed_date = pd.Timestamp(closed, tz="UTC") if closed else None
# return the sample record
return {
"issue_number": issue,
"issue_title": f"Issue {issue}",
"type": "issue",
"issue_body": f"Description of issue {issue}",
"status": "Done" if closed else status,
"assignees": "mickeymouse",
"labels": [],
"url": f"https://github.com/HHS/simpler-grants-gov/issues/{issue}",
"points": points,
"milestone": "Milestone 1",
"milestone_due_date": sprint_end_ts,
"milestone_description": "Milestone 1 description",
"sprint": f"Sprint {sprint}",
"sprint_start_date": sprint_start_ts,
"sprint_end_date": sprint_end_ts,
"sprint_duration": sprint_duration,
"created_date": created_date,
"closed_date": closed_date,
}


class TestSprintBoard:
"""Tests the SprintBoard data class."""
Expand Down Expand Up @@ -159,9 +118,9 @@ def test_return_name_if_matching_sprint_exists(self, date: str, expected: str):
"""Test that correct sprint is returned if date exists in a sprint."""
# setup - create sample dataset
board_data = [
sprint_board_row(issue=1, sprint=1, sprint_start=DAY_1),
sprint_board_row(issue=2, sprint=1, sprint_start=DAY_1),
sprint_board_row(issue=3, sprint=2, sprint_start=DAY_4),
sprint_row(issue=1, sprint=1, sprint_start=DAY_1),
sprint_row(issue=2, sprint=1, sprint_start=DAY_1),
sprint_row(issue=3, sprint=2, sprint_start=DAY_4),
]
board = SprintBoard.from_dict(board_data)
# validation
Expand All @@ -173,8 +132,8 @@ def test_return_none_if_no_matching_sprint(self):
"""The method should return None if no sprint contains the date."""
# setup - create sample dataset
board_data = [
sprint_board_row(issue=1, sprint=1, sprint_start=DAY_1),
sprint_board_row(issue=2, sprint=2, sprint_start=DAY_4),
sprint_row(issue=1, sprint=1, sprint_start=DAY_1),
sprint_row(issue=2, sprint=2, sprint_start=DAY_4),
]
board = SprintBoard.from_dict(board_data)
# validation
Expand Down
51 changes: 7 additions & 44 deletions analytics/tests/metrics/test_burndown.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,50 +6,13 @@
from analytics.datasets.sprint_board import SprintBoard
from analytics.metrics.burndown import SprintBurndown

DAY_0 = "2023-10-31"
DAY_1 = "2023-11-01"
DAY_2 = "2023-11-02"
DAY_3 = "2023-11-03"


def sprint_row(
issue: int,
created: str = DAY_1,
closed: str | None = None,
status: str = "In Progress",
points: int = 1,
sprint: int = 1,
sprint_start: str = DAY_1,
sprint_length: int = 2,
) -> dict:
"""Create a sample row of the SprintBoard dataset."""
# create timestamp and time delta fields
sprint_start_ts = pd.Timestamp(sprint_start)
sprint_duration = pd.Timedelta(days=sprint_length)
sprint_end_ts = sprint_start_ts + sprint_duration
created_date = pd.Timestamp(created, tz="UTC")
closed_date = pd.Timestamp(closed, tz="UTC") if closed else None
# return the sample record
return {
"issue_number": issue,
"issue_title": f"Issue {issue}",
"type": "issue",
"issue_body": f"Description of issue {issue}",
"status": "Done" if closed else status,
"assignees": "mickeymouse",
"labels": [],
"url": f"https://github.com/HHS/simpler-grants-gov/issues/{issue}",
"points": points,
"milestone": "Milestone 1",
"milestone_due_date": sprint_end_ts,
"milestone_description": "Milestone 1 description",
"sprint": f"Sprint {sprint}",
"sprint_start_date": sprint_start_ts,
"sprint_end_date": sprint_end_ts,
"sprint_duration": sprint_duration,
"created_date": created_date,
"closed_date": closed_date,
}
from tests.conftest import (
DAY_0,
DAY_1,
DAY_2,
DAY_3,
sprint_row,
)


def result_row(
Expand Down

0 comments on commit e504968

Please sign in to comment.