Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c026d24d11 | |||
| d34916c276 |
@@ -489,6 +489,78 @@ func TestIntegration_PullDetail_InvalidIndex(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// --- Issue #217: HTMX fragment assertions for IssueDetail and PullDetail ---
|
||||
|
||||
func TestIntegration_IssueDetail_HTMX(t *testing.T) {
|
||||
h, srv := newTestHandlerWithMock(t)
|
||||
defer srv.Close()
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("GET /issues/{owner}/{repo}/{index}", h.IssueDetail)
|
||||
|
||||
req := reqWithToken(http.MethodGet, "/issues/test-org/repo1/1", "")
|
||||
req.Header.Set("HX-Request", "true")
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
mux.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("status = %d, want %d", w.Code, http.StatusOK)
|
||||
}
|
||||
body := w.Body.String()
|
||||
|
||||
// HTMX response must NOT contain layout boilerplate.
|
||||
if contains(body, "<html") {
|
||||
t.Error("HTMX response should not contain <html tag")
|
||||
}
|
||||
if contains(body, "<!DOCTYPE") {
|
||||
t.Error("HTMX response should not contain <!DOCTYPE")
|
||||
}
|
||||
if contains(body, `class="bottom-nav"`) {
|
||||
t.Error("HTMX response should not contain bottom-nav")
|
||||
}
|
||||
|
||||
// HTMX response MUST contain issue-specific content.
|
||||
if !contains(body, "Test issue #1") {
|
||||
t.Errorf("expected issue title 'Test issue #1' in HTMX fragment, got: %s", body[:min(300, len(body))])
|
||||
}
|
||||
}
|
||||
|
||||
func TestIntegration_PullDetail_HTMX(t *testing.T) {
|
||||
h, srv := newTestHandlerWithMock(t)
|
||||
defer srv.Close()
|
||||
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("GET /pulls/{owner}/{repo}/{index}", h.PullDetail)
|
||||
|
||||
req := reqWithToken(http.MethodGet, "/pulls/test-org/repo1/1", "")
|
||||
req.Header.Set("HX-Request", "true")
|
||||
w := httptest.NewRecorder()
|
||||
|
||||
mux.ServeHTTP(w, req)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Errorf("status = %d, want %d", w.Code, http.StatusOK)
|
||||
}
|
||||
body := w.Body.String()
|
||||
|
||||
// HTMX response must NOT contain layout boilerplate.
|
||||
if contains(body, "<html") {
|
||||
t.Error("HTMX response should not contain <html tag")
|
||||
}
|
||||
if contains(body, "<!DOCTYPE") {
|
||||
t.Error("HTMX response should not contain <!DOCTYPE")
|
||||
}
|
||||
if contains(body, `class="bottom-nav"`) {
|
||||
t.Error("HTMX response should not contain bottom-nav")
|
||||
}
|
||||
|
||||
// HTMX response MUST contain PR-specific content.
|
||||
if !contains(body, "Test PR #1") {
|
||||
t.Errorf("expected PR title 'Test PR #1' in HTMX fragment, got: %s", body[:min(300, len(body))])
|
||||
}
|
||||
}
|
||||
|
||||
// --- Issue #138: Integration tests for GET /issues/new and GET /issues/new/labels ---
|
||||
|
||||
func TestIntegration_NewIssue_WithToken(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user