package validator

import (
	"testing"

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

	"github.com/authelia/authelia/v4/internal/configuration/schema"
)

func TestShouldSetDefaultTOTPValues(t *testing.T) {
	validator := schema.NewStructValidator()
	config := schema.TOTPConfiguration{}

	ValidateTOTP(&config, validator)

	require.Len(t, validator.Errors(), 0)
	assert.Equal(t, "Authelia", config.Issuer)
	assert.Equal(t, *schema.DefaultTOTPConfiguration.Skew, *config.Skew)
	assert.Equal(t, schema.DefaultTOTPConfiguration.Period, config.Period)
}

func TestShouldRaiseErrorWhenInvalidTOTPMinimumValues(t *testing.T) {
	var badSkew = -1

	validator := schema.NewStructValidator()
	config := schema.TOTPConfiguration{
		Period: -5,
		Skew:   &badSkew,
	}
	ValidateTOTP(&config, validator)
	assert.Len(t, validator.Errors(), 2)
	assert.EqualError(t, validator.Errors()[0], "TOTP Period must be 1 or more")
	assert.EqualError(t, validator.Errors()[1], "TOTP Skew must be 0 or more")
}