package worker

import "testing"

func TestFamilyClassValidate(t *testing.T) {
	t.Parallel()

	valid := []FamilyClass{
		{Durability: DurabilityDurableCritical, Effect: EffectTransactional},
		{Durability: DurabilityDurableCritical, Effect: EffectIdempotent},
		{Durability: DurabilityDurableCritical, Effect: EffectOutcomeUncertain},
		{Durability: DurabilityDerivedReconcilable, Effect: EffectConvergent},
		{Durability: DurabilityBestEffort, Effect: EffectLossTolerant},
	}
	for _, class := range valid {
		if err := class.Validate(); err != nil {
			t.Fatalf("Validate(%+v): %v", class, err)
		}
	}

	invalid := []FamilyClass{
		{},
		{Durability: DurabilityDurableCritical, Effect: EffectConvergent},
		{Durability: DurabilityDerivedReconcilable, Effect: EffectTransactional},
		{Durability: DurabilityBestEffort, Effect: EffectIdempotent},
	}
	for _, class := range invalid {
		if err := class.Validate(); err == nil {
			t.Fatalf("Validate(%+v) succeeded, want rejection", class)
		}
	}
}
