Skip to content

Commit

Permalink
Feature/44 show content size (#46)
Browse files Browse the repository at this point in the history
* [#44] Add response_content_length in models and admin

* [#44] Fixed tests
  • Loading branch information
danielmursa-dev authored Jan 23, 2025
1 parent 988e2c9 commit 8888327
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 0 deletions.
3 changes: 3 additions & 0 deletions log_outgoing_requests/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ class OutgoingRequestsLogAdmin(admin.ModelAdmin):
"method",
"response_ms",
"timestamp",
"response_content_length",
)
list_filter = ("method", "timestamp", "status_code", "hostname")
search_fields = ("url", "params", "hostname")
Expand Down Expand Up @@ -57,6 +58,7 @@ class OutgoingRequestsLogAdmin(admin.ModelAdmin):
"res_headers",
"res_content_type",
"res_body_encoding",
"response_content_length",
"response_body",
)
},
Expand All @@ -76,6 +78,7 @@ class OutgoingRequestsLogAdmin(admin.ModelAdmin):
"response_ms",
"res_headers",
"res_content_type",
"response_content_length",
"response_body",
"trace",
)
Expand Down
9 changes: 9 additions & 0 deletions log_outgoing_requests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,15 @@ def response_body_decoded(self) -> str:

response_body_decoded.short_description = _("Response body") # type: ignore

@cached_property
def response_content_length(self) -> int:
"""
Get Response content length by reading `len(response_body_decoded)`.
"""
return len(self.response_body_decoded)

response_content_length.short_description = _("Response content length") # type: ignore


def get_default_max_content_length():
"""
Expand Down
77 changes: 77 additions & 0 deletions tests/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,80 @@ def test_list_url_is_not_trucated_under_200_chars(admin_client):
truncated_url = doc.find(".field-truncated_url").text()

assert truncated_url == "/a1b2c3d4e/some-path"


@pytest.mark.django_db
def test_response_content_length_empty_changelist_view(admin_client):
"""Assert the length of the content of the response is empty in changelist_view"""

log = OutgoingRequestsLog.objects.create(
id=1,
req_body=b"",
res_body=b"",
timestamp=timezone.now(),
)

url = reverse("admin:log_outgoing_requests_outgoingrequestslog_changelist")

response = admin_client.get(url)
assert response.status_code == 200

html = response.content.decode("utf-8")
doc = PyQuery(html)
content_length = doc.find(".field-response_content_length").text()

assert content_length == "0"
assert log.response_content_length == 0


@pytest.mark.django_db
def test_response_content_length_displayed_changelist_view(admin_client):
"""Assert the length of the content of the response is displayed in changelist_view"""

log = OutgoingRequestsLog.objects.create(
id=1,
req_body=b"Test request list view",
res_body=b"Test Response list view",
timestamp=timezone.now(),
)

url = reverse("admin:log_outgoing_requests_outgoingrequestslog_changelist")

response = admin_client.get(url)
assert response.status_code == 200

html = response.content.decode("utf-8")
doc = PyQuery(html)
content_length = doc.find(".field-response_content_length").text()

assert content_length == "23"
assert log.response_content_length == 23


@pytest.mark.django_db
def test_response_content_length_displayed_change_view(admin_client):
"""Assert the length of the content of the response is displayed in change_view"""

log = OutgoingRequestsLog.objects.create(
id=1,
req_body=b"Test request list view",
res_body=b"Test Response list view",
timestamp=timezone.now(),
)
url = reverse(
"admin:log_outgoing_requests_outgoingrequestslog_change", args=(log.pk,)
)

response = admin_client.get(url)
assert response.status_code == 200

html = response.content.decode("utf-8")
doc = PyQuery(html)
request_body = doc.find(".field-request_body .readonly").text()
response_body = doc.find(".field-response_body .readonly").text()
content_length = doc.find(".field-response_content_length .readonly").text()

assert request_body == "Test request list view"
assert response_body == "Test Response list view"
assert content_length == "23"
assert log.response_content_length == 23

0 comments on commit 8888327

Please sign in to comment.