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) }