package schemautil

import (
	"reflect"
	"testing"

	"github.com/nexuscrm/shared/pkg/models"
)

func TestRequiredCreateInputFieldsUsesCallerDemand(t *testing.T) {
	defaultValue, emptyDefault := "generated", ""
	schema := &models.ObjectMetadata{Fields: []models.FieldMetadata{
		{APIName: "Title", Type: "text", Required: true, Createable: true},
		{APIName: "Optional", Type: "text", Createable: true},
		{APIName: "ReadOnly", Type: "text", Required: true},
		{APIName: "Generated", Type: "text", Required: true, Createable: true, DefaultedOnCreate: true},
		{APIName: "Defaulted", Type: "text", Required: true, Createable: true, DefaultValue: &defaultValue},
		{APIName: "EmptyDefault", Type: "text", Required: true, Createable: true, DefaultValue: &emptyDefault},
		{APIName: "Calculated", Type: "Formula", Required: true, Createable: true},
		{APIName: "Numbered", Type: "AutoNumber", Required: true, Createable: true},
		{APIName: "Summed", Type: "RollupSummary", Required: true, Createable: true},
		{APIName: "Compound", Type: "text", Required: true, Createable: true, IsCompound: true, ComposedFrom: []string{"Part"}},
	}}
	want := []string{"Compound", "EmptyDefault", "Title"}
	if got := RequiredCreateInputFields(schema); !reflect.DeepEqual(got, want) {
		t.Fatalf("caller input fields = %v, want %v", got, want)
	}
	if got := RequiredCreateInputFields(&models.ObjectMetadata{}); got == nil || len(got) != 0 {
		t.Fatalf("known empty object demand = %#v", got)
	}
}
