Skip to content

Commit 1463aac

Browse files
Ola AustineOla Austine
authored andcommitted
feat: using dependency injection instead of composition
1 parent 892312f commit 1463aac

File tree

4 files changed

+26
-26
lines changed

4 files changed

+26
-26
lines changed

src/linear/linear_create_issues.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010

1111
class LinearCreateIssueService:
12-
def __init__(self):
13-
self.linear_service = LinearService()
12+
def __init__(self, linear_service: LinearService):
13+
self.linear_service = linear_service
1414

1515
def get_data_and_populate_variables(
1616
self, list_issues: list[Issue]

src/linear/linear_update_issues.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88

99
class LinearUpdateIssueService:
10-
def __init__(self):
11-
self.linear_service = LinearService()
10+
def __init__(self, linear_service: LinearService):
11+
self.linear_service = linear_service
1212

1313
def check_all_linear_ticket_statuses(self) -> None:
1414
"""Check and update the Linear ticket status for all issues in Redis."""

src/tests/linear/test_linear_create_issues.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import pytest
22
from unittest.mock import patch, MagicMock
33
from src.linear.linear_create_issues import LinearCreateIssueService
4+
from src.linear.linear import LinearService
45

56

67
# Test for get_data_and_populate_variables
@@ -15,7 +16,8 @@ def test_get_data_and_populate_variables_raises_exception(mock_post):
1516
}
1617
mock_post.return_value = mock_response
1718

18-
linear_service = LinearCreateIssueService()
19+
service = LinearService()
20+
linear_service = LinearCreateIssueService(service)
1921
issue1 = MagicMock()
2022
issue1.title = "t1"
2123
issue1.body = "b1"
@@ -36,9 +38,9 @@ def test_get_data_and_populate_variables_success(mock_post):
3638
"data": {"teams": {"nodes": [{"id": valid_uuid, "name": "tid"}]}}
3739
}
3840
mock_post.return_value = mock_response
39-
service = LinearCreateIssueService()
40-
# Set the private attribute directly
41-
service.linear_service.team_id = valid_uuid
41+
linear = LinearService()
42+
linear.team_id = valid_uuid
43+
service = LinearCreateIssueService(linear)
4244
issue1 = MagicMock()
4345
issue1.title = "t1"
4446
issue1.body = "b1"
@@ -78,8 +80,9 @@ def test_run_query_creates_new(mock_post, mock_redis):
7880
mock_exists = MagicMock()
7981
mock_exists.return_value = False
8082

81-
linear_create = LinearCreateIssueService()
82-
linear_create.linear_service.confirm_if_ticket_exists = mock_exists
83+
service = LinearService()
84+
service.confirm_if_ticket_exists = mock_exists
85+
linear_create = LinearCreateIssueService(service)
8386
var = MagicMock()
8487
var.title = "title"
8588
var.as_input.return_value = {"foo": "bar"}
Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
from unittest.mock import patch, MagicMock
22
from datetime import datetime
33
from src.linear.linear_update_issues import LinearUpdateIssueService
4+
from src.linear.linear import LinearService
45

56

67
def test_check_all_linear_ticket_statuses_internal_mocks():
7-
service = LinearUpdateIssueService()
8+
linear = LinearService()
9+
# make these methods callables returning the expected values
10+
linear.get_ticket_if_it_exists = MagicMock(
11+
return_value=[{"identifier": "TICKET-1"}]
12+
)
13+
linear.get_ticket_status = MagicMock(return_value="Done")
14+
15+
service = LinearUpdateIssueService(linear)
816

917
# Mock redis_client.scan_iter and redis_client.get/set
1018
with patch("src.linear.linear_update_issues.redis_client") as mock_redis:
@@ -16,21 +24,10 @@ def test_check_all_linear_ticket_statuses_internal_mocks():
1624
"updated_at": datetime.utcnow().isoformat(),
1725
}
1826

19-
# Mock internal methods on the service instance
20-
service.linear_service = MagicMock()
21-
service.linear_service.get_ticket_if_it_exists.return_value = [
22-
{"identifier": "TICKET-1"}
23-
]
24-
with (
25-
patch.object(
26-
service.linear_service,
27-
"get_ticket_status",
28-
return_value="Done",
29-
),
30-
patch.object(
31-
service, "_LinearUpdateIssueService__update_ticket_status_in_redis"
32-
) as mock_update,
33-
):
27+
# Mock internal update method on the service instance
28+
with patch.object(
29+
service, "_LinearUpdateIssueService__update_ticket_status_in_redis"
30+
) as mock_update:
3431
service.check_all_linear_ticket_statuses()
3532
# Assert update was called with correct arguments
3633
mock_update.assert_called_with("Test Issue", "Done")

0 commit comments

Comments
 (0)