43 lines
1.1 KiB
Go
43 lines
1.1 KiB
Go
package testkit
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"galaxy/authsession/internal/domain/common"
|
|
"galaxy/authsession/internal/ports"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestInMemorySendEmailCodeAbuseProtector(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
protector := &InMemorySendEmailCodeAbuseProtector{}
|
|
email := common.Email("pilot@example.com")
|
|
now := time.Unix(10, 0).UTC()
|
|
|
|
result, err := protector.CheckAndReserve(context.Background(), ports.SendEmailCodeAbuseInput{
|
|
Email: email,
|
|
Now: now,
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, ports.SendEmailCodeAbuseOutcomeAllowed, result.Outcome)
|
|
|
|
result, err = protector.CheckAndReserve(context.Background(), ports.SendEmailCodeAbuseInput{
|
|
Email: email,
|
|
Now: now.Add(30 * time.Second),
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, ports.SendEmailCodeAbuseOutcomeThrottled, result.Outcome)
|
|
|
|
result, err = protector.CheckAndReserve(context.Background(), ports.SendEmailCodeAbuseInput{
|
|
Email: email,
|
|
Now: now.Add(time.Minute),
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, ports.SendEmailCodeAbuseOutcomeAllowed, result.Outcome)
|
|
}
|