Skip to content

Commit 32449e9

Browse files
authored
feat: add has_approvals() helper to ChangeRequest model (#7241)
1 parent 0cb47c8 commit 32449e9

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

api/features/workflows/core/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ def is_approved(self) -> bool:
153153
return self.is_approved_via_environment()
154154
return self.is_approved_via_project()
155155

156+
def has_approvals(self) -> bool:
157+
return self.approvals.filter(approved_at__isnull=False).exists()
158+
156159
def is_approved_via_project(self) -> bool:
157160
return self.project.minimum_change_request_approvals is None or (
158161
self.approvals.filter(approved_at__isnull=False).count()

api/tests/unit/features/workflows/core/test_unit_workflows_models.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,42 @@ def test_change_request_is_approved__minimum_approvals_is_none__returns_true( #
141141
assert result is True
142142

143143

144+
def test_change_request_has_approvals__approved_approval__returns_true(
145+
change_request_no_required_approvals: ChangeRequest,
146+
) -> None:
147+
# Given
148+
approver = FFAdminUser.objects.create(email="approver@example.com")
149+
ChangeRequestApproval.objects.create(
150+
user=approver,
151+
change_request=change_request_no_required_approvals,
152+
approved_at=timezone.now(),
153+
)
154+
155+
# When
156+
result = change_request_no_required_approvals.has_approvals()
157+
158+
# Then
159+
assert result is True
160+
161+
162+
def test_change_request_has_approvals__pending_approval_only__returns_false(
163+
change_request_no_required_approvals: ChangeRequest,
164+
) -> None:
165+
# Given
166+
assignee = FFAdminUser.objects.create(email="assignee@example.com")
167+
ChangeRequestApproval.objects.create(
168+
user=assignee,
169+
change_request=change_request_no_required_approvals,
170+
approved_at=None,
171+
)
172+
173+
# When
174+
result = change_request_no_required_approvals.has_approvals()
175+
176+
# Then
177+
assert result is False
178+
179+
144180
def test_change_request_commit__not_approved__raises_exception( # type: ignore[no-untyped-def]
145181
change_request_1_required_approvals,
146182
):

0 commit comments

Comments
 (0)