package voter import ( "context" "testing" ) func TestStrategyUnanimous(t *testing.T) { testCases := []struct { Decisions []Decision Expect Decision }{ { Decisions: []Decision{Allow, Allow, Allow}, Expect: Allow, }, { Decisions: []Decision{Abstain, Abstain, Abstain}, Expect: Abstain, }, { Decisions: []Decision{Deny, Abstain, Abstain}, Expect: Deny, }, { Decisions: []Decision{Deny, Allow, Abstain}, Expect: Deny, }, } for _, tc := range testCases { ctx := context.Background() result, err := StrategyUnanimous(ctx, tc.Decisions) if err != nil { t.Error(err) } if e, g := tc.Expect, result; e != g { t.Errorf("result: expected '%v', got '%v'", AsString(e), AsString(g)) } } } func TestStrategyAffirmative(t *testing.T) { testCases := []struct { Decisions []Decision Expect Decision }{ { Decisions: []Decision{Allow, Allow, Allow}, Expect: Allow, }, { Decisions: []Decision{Abstain, Abstain, Abstain}, Expect: Abstain, }, { Decisions: []Decision{Deny, Abstain, Abstain}, Expect: Deny, }, { Decisions: []Decision{Deny, Allow, Abstain}, Expect: Allow, }, } for _, tc := range testCases { ctx := context.Background() result, err := StrategyAffirmative(ctx, tc.Decisions) if err != nil { t.Error(err) } if e, g := tc.Expect, result; e != g { t.Errorf("result: expected '%v', got '%v'", AsString(e), AsString(g)) } } } func TestStrategyConsensus(t *testing.T) { testCases := []struct { Decisions []Decision Expect Decision }{ { Decisions: []Decision{Allow, Allow, Allow}, Expect: Allow, }, { Decisions: []Decision{Abstain, Abstain, Abstain}, Expect: Abstain, }, { Decisions: []Decision{Deny, Allow, Abstain}, Expect: Abstain, }, { Decisions: []Decision{Deny, Deny, Allow}, Expect: Deny, }, { Decisions: []Decision{Deny, Deny, Allow, Allow}, Expect: Abstain, }, { Decisions: []Decision{Deny, Deny, Allow, Allow, Allow}, Expect: Allow, }, } for _, tc := range testCases { ctx := context.Background() result, err := StrategyConsensus(ctx, tc.Decisions) if err != nil { t.Error(err) } if e, g := tc.Expect, result; e != g { t.Errorf("result: expected '%v', got '%v'", AsString(e), AsString(g)) } } }