package kolide

import (
	"fmt"
	"testing"

	"github.com/stretchr/testify/assert"
	"golang.org/x/crypto/bcrypt"
)

func TestValidatePassword(t *testing.T) {

	var passwordTests = []struct {
		Username, Password, Email string
		Admin, PasswordReset      bool
	}{
		{"marpaia", "foobar", "mike@kolide.co", true, false},
		{"jason", "bar0baz!?", "jason@kolide.co", true, false},
	}

	const bcryptCost = 6

	for _, tt := range passwordTests {
		user := newTestUser(t, tt.Username, tt.Password, tt.Email)

		err := user.ValidatePassword(tt.Password)
		assert.Nil(t, err)

		err = user.ValidatePassword("different")
		assert.NotNil(t, err)
	}
}

func newTestUser(t *testing.T, username, password, email string) *User {
	var (
		salt = "test-salt"
		cost = 10
	)
	withSalt := []byte(fmt.Sprintf("%s%s", password, salt))
	hashed, _ := bcrypt.GenerateFromPassword(withSalt, cost)
	return &User{
		Username: username,
		Salt:     salt,
		Password: hashed,
		Email:    email,
	}
}
