package connector

import (
	"strings"
	"testing"
)

func TestParseConnectorPushRecoverySourceEligibilityIsStrictAndOptional(t *testing.T) {
	without, err := ParseConnectorPushRecoverySourceEligibilityFromPayload([]byte(`{"flowDeveloperName":"F"}`))
	if err != nil || without != nil {
		t.Fatalf("absent sidecar = %#v, %v; want nil, nil", without, err)
	}

	with, err := ParseConnectorPushRecoverySourceEligibilityFromPayload([]byte(`{
  "recoverySourceEligibility": {
    "requiredFalseBooleanFields": ["IsDeleted", "IsConverted"]
  }
}`))
	if err != nil {
		t.Fatalf("parse sidecar: %v", err)
	}
	if got := strings.Join(with.RequiredFalseBooleanFields, ","); got != "IsDeleted,IsConverted" {
		t.Fatalf("fields = %q", got)
	}

	for _, raw := range []string{
		`{"recoverySourceEligibility":{"requiredFalseBooleanFields":[]}}`,
		`{"recoverySourceEligibility":{"requiredFalseBooleanFields":["IsDeleted","isdeleted"]}}`,
		`{"recoverySourceEligibility":{"requiredFalseBooleanFields":["{!record.IsDeleted}"]}}`,
		`{"recoverySourceEligibility":{"requiredFalseBooleanFields":["IsDeleted"],"future":true}}`,
	} {
		if _, err := ParseConnectorPushRecoverySourceEligibilityFromPayload([]byte(raw)); err == nil {
			t.Fatalf("ParseConnectorPushRecoverySourceEligibilityFromPayload(%s) error = nil", raw)
		}
	}
}
