package config

import (
	"testing"

	"github.com/stretchr/testify/require"
)

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

	cases := []struct {
		cfg *TiflowClusterMasterConfig
		out map[string]interface{}
		err error
	}{
		{
			cfg: &TiflowClusterMasterConfig{
				Storage: Storage{
					S3: &S3Storage{
						Bucket: "s3-test",
					},
				},
			},
			out: map[string]interface{}{"business-meta": map[string]interface{}{"password": "", "schema": "", "user": ""},
				"framework-meta": map[string]interface{}{"password": "", "schema": "", "user": ""},
				"storage":        map[string]interface{}{"s3": map[string]interface{}{"bucket": "s3-test"}}},
			err: nil,
		},
		{
			cfg: &TiflowClusterMasterConfig{
				Storage: Storage{
					GCS: &GCSConfig{
						Bucket: "gcs-test",
					},
				},
			},
			out: map[string]interface{}{"business-meta": map[string]interface{}{"password": "", "schema": "", "user": ""},
				"framework-meta": map[string]interface{}{"password": "", "schema": "", "user": ""},
				"storage":        map[string]interface{}{"gcs": map[string]interface{}{"bucket": "gcs-test"}}},
			err: nil,
		},
	}

	for _, cs := range cases {
		out, err := ConvertTiflowMasterConfig(cs.cfg)
		require.Equal(t, cs.out, out)
		if cs.err != nil {
			require.Error(t, err)
		} else {
			require.NoError(t, err)
		}
	}
}
