package processor import ( "testing" "time" "github.com/stretchr/testify/assert" ) func TestCheckNewPin(t *testing.T) { birth := time.Date(1990, 3, 14, 0, 0, 0, 0, time.UTC) for _, ok := range []string{"482913", "019283", "135790", "112233"} { assert.NoError(t, checkNewPin(ok, ok, &birth), ok) } for name, c := range map[string][2]string{ "too short": {"12345", "12345"}, "too long": {"1234567", "1234567"}, "not digits": {"12a456", "12a456"}, "confirmation": {"482913", "482914"}, "one digit": {"111111", "111111"}, "zeros": {"000000", "000000"}, "run up": {"123456", "123456"}, "run up from 4": {"456789", "456789"}, "run down": {"654321", "654321"}, "run down from 9": {"987654", "987654"}, "birth date DDMMYY": {"140390", "140390"}, "birth date YYMMDD": {"900314", "900314"}, } { err := checkNewPin(c[0], c[1], &birth) assert.ErrorIs(t, err, ErrInvalidPinInput, name) assert.NotContains(t, err.Error(), c[0], "%s: the message must not echo the PIN", name) } // Without a birth date only the other rules apply. assert.NoError(t, checkNewPin("140390", "140390", nil)) }