ZDDC/zddc/internal/handler/appsvirtual_test.go
2026-06-11 13:32:31 -05:00

42 lines
1.3 KiB
Go

package handler
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestServeApps(t *testing.T) {
// Index lists the tools.
rec := httptest.NewRecorder()
ServeApps(nil, rec, httptest.NewRequest(http.MethodGet, AppsVirtualPrefix, nil))
if rec.Code != http.StatusOK {
t.Fatalf("index: want 200, got %d", rec.Code)
}
if !strings.Contains(rec.Body.String(), "Classifier") {
t.Errorf("index should list Classifier")
}
// A known tool resolves to HTML (embedded bytes may be empty in a fresh
// checkout, so accept 200 with a body OR 404 only when the slot is empty).
rec = httptest.NewRecorder()
ServeApps(nil, rec, httptest.NewRequest(http.MethodGet, AppsVirtualPrefix+"classifier.html", nil))
if rec.Code != http.StatusOK && rec.Code != http.StatusNotFound {
t.Errorf("classifier.html: unexpected %d", rec.Code)
}
// Unknown name → 404.
rec = httptest.NewRecorder()
ServeApps(nil, rec, httptest.NewRequest(http.MethodGet, AppsVirtualPrefix+"nope.html", nil))
if rec.Code != http.StatusNotFound {
t.Errorf("unknown: want 404, got %d", rec.Code)
}
// Path traversal / subpath → 404.
rec = httptest.NewRecorder()
ServeApps(nil, rec, httptest.NewRequest(http.MethodGet, AppsVirtualPrefix+"a/b.html", nil))
if rec.Code != http.StatusNotFound {
t.Errorf("subpath: want 404, got %d", rec.Code)
}
}