package config

import "testing"

func TestResolveInfraClientRequirements(t *testing.T) {
	cases := []struct {
		name              string
		enableMySQLClient bool
		enableDoubleWrite bool
		expected          InfraClientRequirements
	}{
		{
			name: "legacy primary",
			expected: InfraClientRequirements{
				LegacyClient: true,
				LegacyCache:  true,
			},
		},
		{
			name:              "legacy primary with double write",
			enableDoubleWrite: true,
			expected: InfraClientRequirements{
				MySQLClient:  true,
				LegacyClient: true,
				LegacyCache:  true,
			},
		},
		{
			name:              "mysql primary",
			enableMySQLClient: true,
			expected: InfraClientRequirements{
				MySQLClient: true,
			},
		},
		{
			name:              "mysql primary with double write",
			enableMySQLClient: true,
			enableDoubleWrite: true,
			expected: InfraClientRequirements{
				MySQLClient:  true,
				LegacyClient: true,
			},
		},
	}

	for _, c := range cases {
		t.Run(c.name, func(t *testing.T) {
			actual := ResolveInfraClientRequirements(c.enableMySQLClient, c.enableDoubleWrite)
			if actual != c.expected {
				t.Fatalf("ResolveInfraClientRequirements() = %+v, want %+v", actual, c.expected)
			}
		})
	}
}
