61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package local
|
|
|
|
import (
|
|
"regexp"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestClockNowReturnsUTC(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
now := Clock{}.Now()
|
|
|
|
assert.Equal(t, time.UTC, now.Location())
|
|
}
|
|
|
|
func TestIDGeneratorProducesValidOpaqueIDs(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
generator := IDGenerator{}
|
|
|
|
challengeID, err := generator.NewChallengeID()
|
|
require.NoError(t, err)
|
|
require.NoError(t, challengeID.Validate())
|
|
assert.Regexp(t, regexp.MustCompile(`^challenge-[A-Za-z0-9_-]+$`), challengeID.String())
|
|
|
|
deviceSessionID, err := generator.NewDeviceSessionID()
|
|
require.NoError(t, err)
|
|
require.NoError(t, deviceSessionID.Validate())
|
|
assert.Regexp(t, regexp.MustCompile(`^device-session-[A-Za-z0-9_-]+$`), deviceSessionID.String())
|
|
}
|
|
|
|
func TestCodeGeneratorProducesSixDigitNumericCodes(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
code, err := CodeGenerator{}.Generate()
|
|
require.NoError(t, err)
|
|
assert.Regexp(t, regexp.MustCompile(`^\d{6}$`), code)
|
|
}
|
|
|
|
func TestCodeHasherHashesAndComparesCodes(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
hasher := CodeHasher{}
|
|
|
|
hash, err := hasher.Hash("123456")
|
|
require.NoError(t, err)
|
|
require.NotEmpty(t, hash)
|
|
|
|
match, err := hasher.Compare(hash, "123456")
|
|
require.NoError(t, err)
|
|
assert.True(t, match)
|
|
|
|
match, err = hasher.Compare(hash, "000000")
|
|
require.NoError(t, err)
|
|
assert.False(t, match)
|
|
}
|