package rest

import "testing"

func TestRepositorySyncOpenAPIPathsArePublished(t *testing.T) {
	paths := buildRESTOpenAPIPaths()
	required := map[string][]string{
		"/api/ext/v1/sync/github/authorize/start":        {"post"},
		"/api/ext/v1/sync/github/install/start":          {"post"},
		"/api/ext/v1/sync/github/install/callback":       {"get"},
		"/api/ext/v1/sync/github/installations":          {"get"},
		"/api/ext/v1/sync/github/account":                {"delete"},
		"/api/ext/v1/sync/github/repositories":           {"get"},
		"/api/ext/v1/sync/overview":                      {"get"},
		"/api/ext/v1/sync/bindings":                      {"get", "post"},
		"/api/ext/v1/sync/bindings/{binding_id}":         {"get", "patch"},
		"/api/ext/v1/sync/bindings/{binding_id}/runs":    {"get", "post"},
		"/api/ext/v1/sync/bindings/{binding_id}/handoff": {"post"},
		"/api/ext/v1/sync/runs":                          {"get"},
		"/api/ext/v1/sync/runs/{run_id}":                 {"get"},
		"/api/ext/v1/sync/runs/{run_id}/progress":        {"get"},
		"/api/ext/v1/sync/runs/{run_id}/items":           {"get"},
		"/api/ext/v1/sync/runs/{run_id}/cancel":          {"post"},
		"/api/ext/v1/sync/runs/{run_id}/recover":         {"post"},
	}
	for path, methods := range required {
		operations, ok := paths[path].(map[string]any)
		if !ok {
			t.Fatalf("sync OpenAPI path %s is missing", path)
		}
		for _, method := range methods {
			if _, ok := operations[method]; !ok {
				t.Fatalf("sync OpenAPI operation %s %s is missing", method, path)
			}
		}
	}
}
