package inmemoryexporter

import (
	"testing"

	"github.com/stretchr/testify/require"
	"go.opentelemetry.io/collector/component"
	"go.opentelemetry.io/collector/confmap"
)

func TestValidate(t *testing.T) {
	tests := []struct {
		name          string
		rawConf       *confmap.Conf
		errorExpected bool
	}{
		{
			name: "with id",
			rawConf: confmap.NewFromStringMap(map[string]interface{}{
				"id": "test_exporter",
			}),
			errorExpected: false,
		},
		{
			name: "empty id",
			rawConf: confmap.NewFromStringMap(map[string]interface{}{
				"id": "",
			}),
			errorExpected: true,
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			factory := NewFactory()
			cfg := factory.CreateDefaultConfig()
			err := component.UnmarshalConfig(tt.rawConf, cfg)
			require.NoError(t, err, "could not UnmarshalConfig")

			err = component.ValidateConfig(cfg)
			if tt.errorExpected {
				require.NotNilf(t, err, "Invalid config did not return validation error: %v", cfg)
			} else {
				require.NoErrorf(t, err, "Valid config returned validation error: %v", cfg)
			}
		})
	}
}
