67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
package httpapi
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"net/http"
|
||
|
|
"net/http/httptest"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestOKEnvelope(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
rec := httptest.NewRecorder()
|
||
|
|
v1OK(rec, http.StatusOK, []string{"a"}, map[string]any{"page": 1, "limit": 25, "total": 1})
|
||
|
|
if rec.Code != http.StatusOK {
|
||
|
|
t.Fatalf("status = %d", rec.Code)
|
||
|
|
}
|
||
|
|
var body map[string]any
|
||
|
|
if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if _, ok := body["data"]; !ok {
|
||
|
|
t.Fatalf("missing data: %#v", body)
|
||
|
|
}
|
||
|
|
meta, _ := body["meta"].(map[string]any)
|
||
|
|
if meta["page"] != float64(1) || meta["limit"] != float64(25) {
|
||
|
|
t.Fatalf("meta = %#v", body["meta"])
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestPresentV1ExportFeedPublicURLs(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
out := presentV1ExportFeed(map[string]any{
|
||
|
|
"id": "799ba83a-6a7e-4e1d-b5de-c02182aacec5",
|
||
|
|
"name": "XML",
|
||
|
|
"format": "xml",
|
||
|
|
"public_token": "9bf8905985e4c2bb2e5f6a0f89ddc1b6",
|
||
|
|
"is_active": true,
|
||
|
|
})
|
||
|
|
urls, _ := out["public_urls"].(map[string]string)
|
||
|
|
if urls["xml"] != "/api/public/export-feeds/9bf8905985e4c2bb2e5f6a0f89ddc1b6.xml" {
|
||
|
|
t.Fatalf("public_urls = %#v", urls)
|
||
|
|
}
|
||
|
|
if urls["token"] != urls["xml"] {
|
||
|
|
t.Fatalf("token url should match format: %#v", urls)
|
||
|
|
}
|
||
|
|
if _, hasCSV := urls["csv"]; hasCSV {
|
||
|
|
t.Fatalf("must not advertise wrong-format url: %#v", urls)
|
||
|
|
}
|
||
|
|
if out["root_xpath"] != nil || out["mappings"] == nil {
|
||
|
|
t.Fatalf("legacy fields missing: %#v", out)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestParsePageLimitOffset(t *testing.T) {
|
||
|
|
t.Parallel()
|
||
|
|
r := httptest.NewRequest(http.MethodGet, "/x?page=2&limit=10", nil)
|
||
|
|
page, limit, offset := ParsePageLimitOffset(r)
|
||
|
|
if page != 2 || limit != 10 || offset != 10 {
|
||
|
|
t.Fatalf("page=%d limit=%d offset=%d", page, limit, offset)
|
||
|
|
}
|
||
|
|
r2 := httptest.NewRequest(http.MethodGet, "/x?offset=5&limit=10", nil)
|
||
|
|
page, limit, offset = ParsePageLimitOffset(r2)
|
||
|
|
if page != 1 || limit != 10 || offset != 5 {
|
||
|
|
t.Fatalf("offset mode: page=%d limit=%d offset=%d", page, limit, offset)
|
||
|
|
}
|
||
|
|
}
|