// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

package kibana

import (
	"fmt"
	"testing"

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

func TestClientConfigValdiate(t *testing.T) {
	tests := []struct {
		name string
		c    *ClientConfig
		err  error
	}{{
		name: "empty params",
		c:    &ClientConfig{},
		err:  nil,
	}, {
		name: "username and password",
		c: &ClientConfig{
			Username: "user",
			Password: "pass",
		},
		err: nil,
	}, {
		name: "api_key",
		c: &ClientConfig{
			APIKey: "api-key",
		},
		err: nil,
	}, {
		name: "service_token",
		c: &ClientConfig{
			ServiceToken: "service_token",
		},
		err: nil,
	}, {
		name: "username and api_key",
		c: &ClientConfig{
			Username: "user",
			APIKey:   "apiKey",
		},
		err: fmt.Errorf("cannot set both api_key and username/password"),
	}}

	for _, tt := range tests {
		tt := tt
		t.Run(tt.name, func(t *testing.T) {
			err := tt.c.Validate()
			if tt.err == nil {
				assert.Nil(t, err)
			} else {
				assert.EqualError(t, err, tt.err.Error())
			}
		})
	}

}
