package server_test import ( "context" "net/http" "net/http/httptest" "strings" "testing" "time" "cmbuyer/admin/internal/deviceauth" "cmbuyer/admin/internal/taskdetail" ) const detailTaskID = "a3c9f507-7473-4fa6-8d71-8786c34c6301" func TestTaskDetailRequiresAdminBeforeLookup(t *testing.T) { details := &recordingDetailStore{detail: taskDetailFixture()} router, _ := newRouterWithDependencies(t, &memoryStore{}, details, emptyEvidenceStore{}, deviceauth.RejectAllAuthenticator{}) response := serve(router, http.MethodGet, "/tasks/"+detailTaskID, nil, nil) if response.Code != http.StatusSeeOther || !strings.HasPrefix(response.Header().Get("Location"), "/login?return_to=") || details.calls != 0 { t.Fatalf("anonymous detail = %d/%q, calls=%d", response.Code, response.Header().Get("Location"), details.calls) } } func TestTaskDetailFullPageAndDrawerShareAuditContent(t *testing.T) { details := &recordingDetailStore{detail: taskDetailFixture()} router, _ := newRouterWithDependencies(t, &memoryStore{}, details, emptyEvidenceStore{}, deviceauth.RejectAllAuthenticator{}) cookie := authenticate(t, router) full := serve(router, http.MethodGet, "/tasks/"+detailTaskID, nil, cookie) if full.Code != http.StatusOK || !strings.Contains(full.Body.String(), "") || !strings.Contains(full.Body.String(), `data-task-detail-content`) { t.Fatalf("full detail = %d/%q", full.Code, full.Body.String()) } request := httptest.NewRequest(http.MethodGet, "/tasks/"+detailTaskID, nil) request.AddCookie(cookie) request.Header.Set("X-CMBuyer-View", "drawer") request.Header.Set("Accept", "text/html") request.Header.Set("Sec-Fetch-Site", "same-origin") fragment := httptest.NewRecorder() router.ServeHTTP(fragment, request) if fragment.Code != http.StatusOK || strings.Contains(fragment.Body.String(), "") || !strings.Contains(fragment.Body.String(), `data-task-detail-content`) { t.Fatalf("fragment detail = %d/%q", fragment.Code, fragment.Body.String()) } for _, text := range []string{"测试<script>", "订单已创建,系统尚未付款", "SKU_PANEL_GATE_1", "/evidence/b3c9f507-7473-4fa6-8d71-8786c34c6301", "暂无规格、价格或数量读数", "本页没有重试、再次提交或付款动作"} { if !strings.Contains(full.Body.String(), text) || !strings.Contains(fragment.Body.String(), text) { t.Fatalf("shared detail missing %q", text) } } if strings.Contains(full.Body.String(), "