Skip to content

Commit

Permalink
refactor request_view
Browse files Browse the repository at this point in the history
  • Loading branch information
madwort committed Mar 28, 2024
1 parent f5a9e23 commit 11117af
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 13 deletions.
10 changes: 10 additions & 0 deletions airlock/business_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,16 @@ def output_files_set(self):
for request_file in filegroup.output_files
}

def get_file_review_for_reviewer(self, urlpath: UrlPath, reviewer: str):
return next(
(
r
for r in self.get_request_file(urlpath).reviews
if r.reviewer == reviewer
),
None,
)

def is_supporting_file(self, urlpath: UrlPath):
try:
return self.get_request_file(urlpath).filetype == RequestFileType.SUPPORTING
Expand Down
19 changes: 6 additions & 13 deletions airlock/views/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,6 @@ def request_view(request, request_id: str, path: str = ""):
file_approve_url = None
file_reject_url = None
else:
# get_path_item_from_tree_or_404() guarantees this file exists
group, request_file = release_request.get_request_group_and_file(path)

file_approve_url = reverse(
"file_approve",
kwargs={"request_id": request_id, "path": path},
Expand All @@ -98,17 +95,13 @@ def request_view(request, request_id: str, path: str = ""):
kwargs={"request_id": request_id, "path": path},
)

existing_reviews = [
r
for r in release_request.filegroups[group]
.files[request_file.relpath]
.reviews
if r.reviewer == request.user.username
]
if existing_reviews != []:
if existing_reviews[0].status == FileReviewStatus.APPROVED:
existing_review = release_request.get_file_review_for_reviewer(
path, request.user.username
)
if existing_review:
if existing_review.status == FileReviewStatus.APPROVED:
file_approve_url = None
else:
elif existing_review.status == FileReviewStatus.REJECTED:
file_reject_url = None

context = {
Expand Down
41 changes: 41 additions & 0 deletions tests/unit/test_business_logic.py
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,47 @@ def test_approve_then_reject_file(bll):
assert len(current_reviews) == 1


def test_get_file_review_for_reviewer(bll):
release_request, path, author = setup_empty_release_request()
checker = factories.create_user("checker", [], True)
checker2 = factories.create_user("checker2", [], True)

bll.add_file_to_request(release_request, path, author, "default")
bll.set_status(
release_request=release_request, to_status=RequestStatus.SUBMITTED, user=author
)

assert len(_get_current_file_reviews(bll, release_request, path, checker)) == 0
fullpath = "default" / path
assert release_request.get_file_review_for_reviewer(fullpath, "checker") is None

bll.approve_file(release_request, path, checker)
bll.reject_file(release_request, path, checker2)
release_request = factories.refresh_release_request(release_request, author)

assert (
release_request.get_file_review_for_reviewer(fullpath, "checker").status
is FileReviewStatus.APPROVED
)
assert (
release_request.get_file_review_for_reviewer(fullpath, "checker2").status
is FileReviewStatus.REJECTED
)

bll.reject_file(release_request, path, checker)
bll.approve_file(release_request, path, checker2)
release_request = factories.refresh_release_request(release_request, author)

assert (
release_request.get_file_review_for_reviewer(fullpath, "checker").status
is FileReviewStatus.REJECTED
)
assert (
release_request.get_file_review_for_reviewer(fullpath, "checker2").status
is FileReviewStatus.APPROVED
)


# add DAL method names to this if they do not require auditing
DAL_AUDIT_EXCLUDED = {
"get_release_request",
Expand Down

0 comments on commit 11117af

Please sign in to comment.