package appmetrics

import (
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/xeipuuv/gojsonschema"
)

func TestNavigateToCofxSchema(t *testing.T) {
	NavigateToCofxLoader := gojsonschema.NewGoLoader(NavigateToCofxSchema)
	schema, _ := gojsonschema.NewSchema(NavigateToCofxLoader)

	// test correct json
	validSampleVal := `{"view_id": "less-than-32", "params": {"screen": ""}}`
	doc := gojsonschema.NewStringLoader(validSampleVal)
	result, err := schema.Validate(doc)
	require.NoError(t, err)
	require.True(t, result.Valid())

	// test in-correct json
	invalidSampleVal := `{"view_id": "more-than-32-chars-3232323232323232323232", "params": {"screen": "not-login"}}`
	doc = gojsonschema.NewStringLoader(invalidSampleVal)
	result, err = schema.Validate(doc)
	require.NoError(t, err)
	require.False(t, result.Valid())

	// test extra params
	extraParamsVal := `{"view_id": "valid-view", "params": {"screen": "login"}, "fishy-key": "fishy-val"}`
	doc = gojsonschema.NewStringLoader(extraParamsVal)
	result, err = schema.Validate(doc)
	require.NoError(t, err)
	require.False(t, result.Valid())

	// test less params
	lessParamsVal := `{"view_id": "valid-view"}`
	doc = gojsonschema.NewStringLoader(lessParamsVal)
	result, err = schema.Validate(doc)
	require.NoError(t, err)
	require.False(t, result.Valid())
}