forked from NdoleStudio/httpsms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmessage_service_test.go
More file actions
105 lines (76 loc) · 3.33 KB
/
Copy pathmessage_service_test.go
File metadata and controls
105 lines (76 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package services
import (
"testing"
"time"
"github.com/NdoleStudio/httpsms/pkg/events"
"github.com/NdoleStudio/httpsms/pkg/telemetry"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/otel/trace"
)
func TestGetSendDelay_WithSendAt_ReturnsTimeUntil(t *testing.T) {
service := &MessageService{}
logger := &noopLogger{}
sendAt := time.Now().UTC().Add(5 * time.Minute)
params := MessageSendParams{SendAt: &sendAt}
payload := events.MessageAPISentPayload{MessageID: uuid.New()}
delay := service.getSendDelay(logger, payload, params, 10)
// Should be approximately 5 minutes (within 2 seconds tolerance)
assert.InDelta(t, float64(5*time.Minute), float64(delay), float64(2*time.Second))
}
func TestGetSendDelay_WithSendAtInPast_ReturnsZero(t *testing.T) {
service := &MessageService{}
logger := &noopLogger{}
sendAt := time.Now().UTC().Add(-5 * time.Minute)
params := MessageSendParams{SendAt: &sendAt}
payload := events.MessageAPISentPayload{MessageID: uuid.New()}
delay := service.getSendDelay(logger, payload, params, 10)
assert.Equal(t, time.Duration(0), delay)
}
func TestGetSendDelay_BulkIndex_RateBasedDelay(t *testing.T) {
service := &MessageService{}
logger := &noopLogger{}
params := MessageSendParams{Index: 3}
payload := events.MessageAPISentPayload{MessageID: uuid.New()}
// 10 messages per minute = 6 seconds interval
delay := service.getSendDelay(logger, payload, params, 10)
expected := time.Duration(3) * (time.Minute / time.Duration(10))
assert.Equal(t, expected, delay)
}
func TestGetSendDelay_BulkIndex_ZeroRate_ReturnsZero(t *testing.T) {
service := &MessageService{}
logger := &noopLogger{}
params := MessageSendParams{Index: 5}
payload := events.MessageAPISentPayload{MessageID: uuid.New()}
delay := service.getSendDelay(logger, payload, params, 0)
assert.Equal(t, time.Duration(0), delay)
}
func TestGetSendDelay_IndexZero_ReturnsZero(t *testing.T) {
service := &MessageService{}
logger := &noopLogger{}
params := MessageSendParams{Index: 0}
payload := events.MessageAPISentPayload{MessageID: uuid.New()}
delay := service.getSendDelay(logger, payload, params, 10)
assert.Equal(t, time.Duration(0), delay)
}
func TestGetSendDelay_NoSendAtNoIndex_ReturnsZero(t *testing.T) {
service := &MessageService{}
logger := &noopLogger{}
params := MessageSendParams{}
payload := events.MessageAPISentPayload{MessageID: uuid.New()}
delay := service.getSendDelay(logger, payload, params, 10)
assert.Equal(t, time.Duration(0), delay)
}
// noopLogger implements telemetry.Logger for testing
type noopLogger struct{}
var _ telemetry.Logger = (*noopLogger)(nil)
func (l *noopLogger) Error(_ error) {}
func (l *noopLogger) WithService(_ string) telemetry.Logger { return l }
func (l *noopLogger) WithString(_, _ string) telemetry.Logger { return l }
func (l *noopLogger) WithSpan(_ trace.SpanContext) telemetry.Logger { return l }
func (l *noopLogger) Trace(_ string) {}
func (l *noopLogger) Info(_ string) {}
func (l *noopLogger) Warn(_ error) {}
func (l *noopLogger) Debug(_ string) {}
func (l *noopLogger) Fatal(_ error) {}
func (l *noopLogger) Printf(_ string, _ ...interface{}) {}