package hasher

import (
	"testing"

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

const ITERATIONS = 200

func Test_NewToken(t *testing.T) {
	t.Parallel()
	tokens := make([]Token, ITERATIONS)
	for i := 0; i < ITERATIONS; i++ {
		tokens[i] = GenerateToken()
	}

	// Check if they are unique
	for i := 0; i < 5; i++ {
		for j := i + 1; j < 5; j++ {
			if tokens[i].Raw == tokens[j].Raw {
				t.Errorf("NewToken() failed to generate unique tokens")
			}
		}
	}
}

func Test_HashToken_CheckTokenHash(t *testing.T) {
	t.Parallel()
	for i := 0; i < ITERATIONS; i++ {
		token := GenerateToken()

		// Check raw text is reltively random
		for j := 0; j < 5; j++ {
			assert.NotEqual(t, token.Raw, GenerateToken().Raw)
		}

		// Check token length is less than 32 characters
		assert.Less(t, len(token.Raw), 32)

		// Check hash is the same
		assert.Equal(t, token.Hash, HashToken(token.Raw))
	}
}