package rest

import (
	"testing"

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

func assertNoDeployAuditFields(t *testing.T, record models.SObject) {
	t.Helper()
	for _, forbidden := range []string{"CreatedDate", "CreatedById", "LastModifiedDate", "LastModifiedById"} {
		if _, exists := record[forbidden]; exists {
			t.Fatalf("record unexpectedly contains %s: %#v", forbidden, record[forbidden])
		}
	}
}

func TestBuildProcessDefinitionUpdateRecord_OmitsAuditFields(t *testing.T) {
	record := buildProcessDefinitionUpdateRecord(&ApprovalProcessXML{
		Label:       "Manager Approval",
		Description: "desc",
		Active:      true,
		EntryCriteria: &EntryCriteriaXML{
			Formula: "Amount > 1000",
		},
	}, []byte("<ApprovalProcess/>"), approvalProcessState(true))

	assertNoDeployAuditFields(t, record)
	if got := record["Metadata"]; got != "<ApprovalProcess/>" {
		t.Fatalf("Metadata = %#v, want %q", got, "<ApprovalProcess/>")
	}
}

func TestBuildProcessDefinitionInsertRecord_OmitsAuditFields(t *testing.T) {
	record := buildProcessDefinitionInsertRecord(&ApprovalProcessXML{
		Label:       "Manager Approval",
		Description: "desc",
		Active:      false,
	}, []byte("<ApprovalProcess/>"), "Manager_Approval", "Opportunity", approvalProcessState(false))

	assertNoDeployAuditFields(t, record)
	if got := record["AllowRecall"]; got != true {
		t.Fatalf("AllowRecall = %#v, want true", got)
	}
}
