package query

import (
	"net/http"
	"strings"
	"testing"

	"github.com/stretchr/testify/require"

	"go.skia.org/infra/go/paramtools"
	"go.skia.org/infra/go/testutils"
	"go.skia.org/infra/go/testutils/unittest"
)

// TestParseQuery spot checks the parsing of a string and makes sure the object produced
// is consistent.
func TestParseQuery(t *testing.T) {
	unittest.SmallTest(t)

	q := &Search{}
	err := clearParseQuery(q, "fdiffmax=-1&fref=false&frgbamax=-1&head=true&include=false&issue=2370153003&limit=50&match=gamma_correct&match=name&metric=combined&neg=false&pos=false&query=source_type%3Dgm&sort=desc&unt=true")
	require.NoError(t, err)

	require.Equal(t, &Search{
		Metric:                           "combined",
		Sort:                             "desc",
		Match:                            []string{"gamma_correct", "name"},
		BlameGroupID:                     "",
		IncludePositiveDigests:           false,
		IncludeNegativeDigests:           false,
		OnlyIncludeDigestsProducedAtHead: true,
		IncludeUntriagedDigests:          true,
		IncludeIgnoredTraces:             false,
		QueryStr:                         "",
		TraceValues: paramtools.ParamSet{
			"source_type": []string{"gm"},
		},
		RightQueryStr:                  "",
		RightTraceValues:               paramtools.ParamSet{},
		ChangelistID:                   "2370153003",
		PatchsetsStr:                   "",
		Patchsets:                      []int64(nil),
		IncludeDigestsProducedOnMaster: false,
		RGBAMinFilter:                  0,
		RGBAMaxFilter:                  -1,
		MustIncludeReferenceFilter:     false,
		Offset:                         0,
		Limit:                          50,
	}, q)
}

// TestParseSearchValidList checks a list of queries from live data
// processes as valid.
func TestParseSearchValidList(t *testing.T) {
	unittest.SmallTest(t)

	// Load the list of of live queries.
	contents := testutils.ReadFile(t, "valid_queries.txt")

	queries := strings.Split(contents, "\n")

	for _, qStr := range queries {
		q := &Search{}
		require.NoError(t, clearParseQuery(q, qStr), qStr)
	}
}

func clearParseQuery(q *Search, qStr string) error {
	*q = Search{}
	r, err := http.NewRequest("GET", "/?"+qStr, nil)
	if err != nil {
		return err
	}
	return ParseSearch(r, q)
}
