Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/sentry/web/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,9 @@
JavaScriptSdkLoader.as_view(),
name="sentry-js-sdk-loader",
),
re_path(r"^agent-handoff/$", AgentHandoffView.as_view(), name="sentry-agent-handoff"),
re_path(r"^agent-handoff\.md$", AgentHandoffView.as_view(), name="sentry-agent-handoff"),
# Prompts copied before the .md URL still point here.
re_path(r"^agent-handoff/$", AgentHandoffView.as_view(), name="sentry-agent-handoff-legacy"),
# docs reference this for acquiring the sentry cli
re_path(r"^get-cli/$", get_cli, name="get_cli_script"),
re_path(
Expand Down
1 change: 1 addition & 0 deletions static/app/data/controlsiloUrlPatterns.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ export const controlsiloUrlPatterns: RegExp[] = [
new RegExp('^_admin/'),
new RegExp('^debug/mail/relocate-account/$'),
new RegExp('^service-worker\\.js$'),
new RegExp('^agent-handoff\\.md$'),
new RegExp('^agent-handoff/$'),
new RegExp('^get-cli/$'),
new RegExp('^get-cli/[^/]+/[^/]+/?$'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def test_create_prompt(self) -> None:
status_code=201,
)
url = urlsplit(response.data["guideUrl"])
assert url.path == "/agent-handoff/"
assert url.path == "/agent-handoff.md"
assert not url.query
assert not url.fragment
code = response.data["code"]
Expand Down
16 changes: 8 additions & 8 deletions tests/sentry/agent_handoff/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def issue(

def claim(self, code: str, ip_address: str = "127.0.0.1") -> HttpResponse:
return self.client.post(
"/agent-handoff/",
"/agent-handoff.md",
urlencode({"handoff_code": code}),
content_type="application/x-www-form-urlencoded",
REMOTE_ADDR=ip_address,
Expand All @@ -70,7 +70,7 @@ def claim(self, code: str, ip_address: str = "127.0.0.1") -> HttpResponse:
def test_claim_mints_once_and_returns_the_private_guide(self) -> None:
code = self.issue()
response = self.client.post(
"/agent-handoff/",
"/agent-handoff.md",
urlencode({"handoff_code": code}),
content_type="application/x-www-form-urlencoded",
HTTP_ACCEPT="text/markdown",
Expand Down Expand Up @@ -221,7 +221,7 @@ def test_membership_revocation_prevents_claim(self) -> None:

def test_preview_is_public_and_preserves_the_code(self) -> None:
code = self.issue()
response = self.client.get("/agent-handoff/", HTTP_ACCEPT="text/markdown")
response = self.client.get("/agent-handoff.md", HTTP_ACCEPT="text/markdown")
assert response.status_code == 200
assert "The user initiated this agent handoff in Sentry" in response.content.decode()
assert "It does not run those instructions" in response.content.decode()
Expand Down Expand Up @@ -273,7 +273,7 @@ def test_unpinned_handoff_accepts_remote_agent(self) -> None:
@control_silo_test
class AgentHandoffPreviewTest(TestCase):
def test_public_preview_uses_placeholders(self) -> None:
response = self.client.get("/agent-handoff/", {"preview": "1"})
response = self.client.get("/agent-handoff.md", {"preview": "1"})

assert response.status_code == 200
body = response.content.decode()
Expand All @@ -291,7 +291,7 @@ def test_onboarding_preview_does_not_issue_reporting_code(self) -> None:
with patch(
"sentry.agent_handoff.flows.onboarding.organization_service.issue_onboarding_reporting_code"
) as issue:
response = self.client.get("/agent-handoff/", {"preview": "1", "flow": "onboarding"})
response = self.client.get("/agent-handoff.md", {"preview": "1", "flow": "onboarding"})

assert response.status_code == 200
body = response.content.decode()
Expand All @@ -300,15 +300,15 @@ def test_onboarding_preview_does_not_issue_reporting_code(self) -> None:
issue.assert_not_called()

def test_preview_is_independent_of_the_session(self) -> None:
anonymous = self.client.get("/agent-handoff/", {"preview": "1"})
anonymous = self.client.get("/agent-handoff.md", {"preview": "1"})
self.login_as(self.user)
authenticated = self.client.get("/agent-handoff/", {"preview": "1"})
authenticated = self.client.get("/agent-handoff.md", {"preview": "1"})

assert anonymous.status_code == authenticated.status_code == 200
assert anonymous.content == authenticated.content

def test_unknown_preview_flow(self) -> None:
response = self.client.get("/agent-handoff/", {"preview": "1", "flow": "unknown"})
response = self.client.get("/agent-handoff.md", {"preview": "1", "flow": "unknown"})

assert response.status_code == 400
assert "Unknown Handoff Flow" in response.content.decode()
Loading