1- from unittest .mock import Mock , patch
1+ from unittest .mock import MagicMock , patch
22
33import pytest
44
55from apps .owasp .graphql .nodes .project_health_metrics import ProjectHealthMetricsNode
66from apps .owasp .graphql .queries .project_health_metrics import ProjectHealthMetricsQuery
7+ from apps .owasp .models .project import Project
8+ from apps .owasp .models .project_health_metrics import ProjectHealthMetrics
79
810
911class TestProjectHealthMetricsQuery :
@@ -57,12 +59,12 @@ def _setup(self):
5759
5860 def test_resolve_unhealthy_projects_without_filters (self ):
5961 """Test the resolution of unhealthy projects."""
60- # Mock the queryset
61- mock_queryset = Mock ()
62+ # MagicMock the queryset
63+ mock_queryset = MagicMock ()
6264 self .mocked_objects .select_related .return_value = mock_queryset
6365 mock_queryset .order_by .return_value .distinct .return_value = mock_queryset
6466 # Filters
65- mock_filter = Mock ()
67+ mock_filter = MagicMock ()
6668 mock_queryset .filter .return_value = mock_filter
6769 mock_filter .select_related .return_value = [mock_filter ]
6870 # Create an instance of the query class
@@ -78,37 +80,81 @@ def test_resolve_unhealthy_projects_without_filters(self):
7880 assert isinstance (result , list )
7981 mock_filter .select_related .assert_called_with ("project" )
8082
81- # def test_resolve_unhealthy_projects_with_filters(self):
82- # """Test the resolution of unhealthy projects with filters."""
83- # # Mock the queryset
84- # mock_queryset = Mock()
85- # self.mocked_objects.select_related.return_value = mock_queryset
86- # mock_queryset.order_by.return_value.distinct.return_value = mock_queryset
87- # # Filters
88- # mock_filter = Mock()
89- # mock_queryset.filter.return_value = mock_filter
90- # mock_filter.select_related.return_value = [mock_filter]
91-
92- # # Create an instance of the query class
93- # query_instance = ProjectHealthMetricsQuery()
94-
95- # # Call the method with filters
96- # result = query_instance.unhealthy_projects(
97- # is_contributors_requirement_compliant=True,
98- # is_funding_requirements_compliant=False,
99- # has_recent_commits=True,
100- # has_recent_releases=False,
101- # is_leaders_requirement_compliant=True,
102- # limit=10,
103- # has_long_open_issues=False,
104- # has_long_unanswered_issues=True,
105- # has_long_unassigned_issues=False,
106- # has_low_score=True,
107- # )
108-
109- # # Assert that the mocked queryset was called correctly with filters
110- # self.mocked_objects.select_related.assert_called_with("project")
111- # mock_queryset.order_by.assert_called_with("project__key", "-nest_created_at")
112-
113- # assert isinstance(result, list)
114- # mock_filter.select_related.assert_called_with("project")
83+ def test_resolve_unhealthy_projects_with_filters (self ):
84+ """Test the resolution of unhealthy projects with filters."""
85+ # MagicMock the queryset
86+ mock_queryset = MagicMock ()
87+ mock_metrics = MagicMock (spec = ProjectHealthMetrics )
88+ mock_metrics .project = MagicMock (spec = Project )
89+ mock_metrics .project .key = "test_project_key"
90+ mock_metrics .nest_created_at = "2023-10-01T00:00:00Z"
91+ mock_metrics .score = 45.0
92+ mock_metrics .contributors_count = 3
93+ mock_metrics .is_funding_requirements_compliant = False
94+ mock_metrics .is_leader_requirements_compliant = True
95+ mock_metrics .has_recent_commits = True
96+ mock_metrics .has_long_open_issues = True
97+ mock_metrics .has_long_unanswered_issues = True
98+ mock_metrics .has_long_unassigned_issues = True
99+ mock_metrics .recent_releases_count = 2
100+
101+ mock_metrics_filtered_same_project = MagicMock (spec = ProjectHealthMetrics )
102+ mock_metrics_filtered_same_project .project = mock_metrics .project
103+ mock_metrics_filtered_same_project .nest_created_at = "2023-09-01T00:00:00Z"
104+
105+ mock_metrics_filtered_different_project = MagicMock (spec = ProjectHealthMetrics )
106+ mock_metrics_filtered_different_project .project = MagicMock (spec = Project )
107+ mock_metrics_filtered_different_project .project .key = "different_project_key"
108+ mock_metrics_filtered_different_project .has_recent_commits = False
109+
110+ self .mocked_objects .select_related .return_value = mock_queryset
111+ mock_queryset .__iter__ .return_value = iter (
112+ [
113+ mock_metrics ,
114+ mock_metrics_filtered_same_project ,
115+ mock_metrics_filtered_different_project ,
116+ ]
117+ )
118+ mock_queryset .order_by .return_value .distinct .return_value = mock_queryset
119+
120+ # Filters
121+ mock_filter = MagicMock ()
122+ mock_queryset .filter .return_value = mock_filter
123+ mock_filter .select_related .return_value = [mock_metrics ]
124+
125+ # Create an instance of the query class
126+ query_instance = ProjectHealthMetricsQuery ()
127+
128+ # Call the method with filters
129+ result = query_instance .unhealthy_projects (
130+ is_contributors_requirement_compliant = True ,
131+ is_funding_requirements_compliant = False ,
132+ has_recent_commits = True ,
133+ has_recent_releases = True ,
134+ is_leader_requirements_compliant = True ,
135+ limit = 10 ,
136+ has_long_open_issues = True ,
137+ has_long_unanswered_issues = True ,
138+ has_long_unassigned_issues = True ,
139+ has_low_score = True ,
140+ )
141+
142+ # Assert that the mocked queryset was called correctly with filters
143+ self .mocked_objects .select_related .assert_called_with ("project" )
144+ mock_queryset .order_by .assert_called_with ("project__key" , "-nest_created_at" )
145+ mock_queryset .filter .assert_called_with (
146+ contributors_count__gte = 2 ,
147+ has_recent_commits = True ,
148+ has_long_open_issues = True ,
149+ has_long_unanswered_issues = True ,
150+ has_long_unassigned_issues = True ,
151+ is_funding_requirements_compliant = False ,
152+ is_leader_requirements_compliant = True ,
153+ recent_releases_count__gt = 0 ,
154+ score__lt = 50 ,
155+ )
156+ mock_filter .select_related .assert_called_with ("project" )
157+ assert len (result ) == 1
158+ assert result [0 ].project .key == "test_project_key"
159+ assert result [0 ].score == mock_metrics .score
160+ assert result [0 ].contributors_count == mock_metrics .contributors_count
0 commit comments