package retailcrm

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"testing"

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

type ConnectRequestTest struct {
	suite.Suite
}

func TestConnectRequest(t *testing.T) {
	suite.Run(t, new(ConnectRequestTest))
}

func (t *ConnectRequestTest) Test_SystemURL() {
	t.Assert().Equal("", ConnectRequest{}.SystemURL())
	t.Assert().Equal("https://test.retailcrm.pro", ConnectRequest{URL: "https://test.retailcrm.pro"}.SystemURL())
	t.Assert().Equal("https://test.retailcrm.pro", ConnectRequest{URL: "https://test.retailcrm.pro/"}.SystemURL())
}

func (t *ConnectRequestTest) Test_Verify() {
	t.Assert().True(ConnectRequest{
		APIKey: "key",
		Token:  createConnectToken("key", "secret"),
	}.Verify("secret"))
	t.Assert().False(ConnectRequest{
		APIKey: "key",
		Token:  createConnectToken("key", "secret2"),
	}.Verify("secret"))
}

func createConnectToken(apiKey, secret string) string {
	mac := hmac.New(sha256.New, []byte(secret))
	if _, err := mac.Write([]byte(apiKey)); err != nil {
		panic(err)
	}
	return hex.EncodeToString(mac.Sum(nil))
}