package registry

import (
	"strings"
	"testing"
)

func TestBuildLoadLatestInstallableMetadataQueryUsesPortableRequestedAppsCTE(t *testing.T) {
	query, args, err := BuildLoadLatestInstallableMetadataQuery([]string{" app-2 ", "", "app-1", "app-2"})
	if err != nil {
		t.Fatalf("BuildLoadLatestInstallableMetadataQuery returned error: %v", err)
	}
	if strings.TrimSpace(query) == "" {
		t.Fatal("expected non-empty query")
	}
	for _, want := range []string{
		"WITH requested_apps AS",
		"SELECT $1 AS app_id",
		"UNION ALL",
		"SELECT $2 AS app_id",
		"av.version = a.latest_version",
	} {
		if !strings.Contains(query, want) {
			t.Fatalf("query missing %q:\n%s", want, query)
		}
	}
	for _, unwanted := range []string{"$3", "review_status", "developer_id"} {
		if strings.Contains(query, unwanted) {
			t.Fatalf("expected query not to contain %q, got:\n%s", unwanted, query)
		}
	}
	if strings.Contains(query, "$4") {
		t.Fatalf("expected duplicate/empty app IDs to be removed, got query:\n%s", query)
	}
	if got, want := len(args), 2; got != want {
		t.Fatalf("args length = %d, want %d (%#v)", got, want, args)
	}
	if args[0] != "app-2" || args[1] != "app-1" {
		t.Fatalf("args = %#v, want deduplicated app IDs without a review-user argument", args)
	}
}

func TestBuildLoadLatestInstallableMetadataQueryEmptyApps(t *testing.T) {
	query, args, err := BuildLoadLatestInstallableMetadataQuery([]string{"", " "})
	if err != nil {
		t.Fatalf("BuildLoadLatestInstallableMetadataQuery returned error: %v", err)
	}
	if query != "" {
		t.Fatalf("query = %q, want empty", query)
	}
	if args != nil {
		t.Fatalf("args = %#v, want nil", args)
	}
}
