-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwatcher_test.go
108 lines (102 loc) · 2.48 KB
/
watcher_test.go
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
106
107
108
package main
import (
"context"
"net/url"
"testing"
"time"
"github.com/jonathanwthom/meminders/mocks"
"github.com/kevinburke/twilio-go"
)
func TestWatcherWatchReminders(t *testing.T) {
tests := []struct {
reminders []Reminder
client Client
expected bool
description string
calls *mocks.Caller
messages *mocks.Sender
}{
{
reminders: []Reminder{
{
Frequency: Daily,
Hour: time.Now().Hour(),
Minute: time.Now().Minute(),
Second: time.Now().Second() + 1,
Zone: time.Now().Location().String(),
},
},
client: &CommsClient{},
expected: true,
description: "Calls sender.SendSMS when reminder is due",
calls: &mocks.Caller{},
messages: &mocks.Sender{},
},
{
reminders: []Reminder{
{
Call: true,
Frequency: Daily,
Hour: time.Now().Hour(),
Minute: time.Now().Minute(),
Second: time.Now().Second() + 3,
Zone: time.Now().Location().String(),
},
},
client: &CommsClient{},
expected: true,
description: "Calls caller.Create when reminder is due",
calls: &mocks.Caller{},
messages: &mocks.Sender{},
},
}
for _, test := range tests {
t.Run(test.description, func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
watcher := Watcher{
ctx: ctx,
}
client := &CommsClient{messages: test.messages, calls: test.calls}
test.messages.On(
"SendMessage",
twilioFromNumber,
twilioToNumber,
"",
[]*url.URL(nil),
).Return(&twilio.Message{}, nil)
test.calls.On(
"Create",
context.Background(),
url.Values{"From": []string{twilioFromNumber},
"To": []string{twilioToNumber},
"Twiml": []string{"<Response><Say voice=\"Polly.Joanna\"></Say></Response>"}},
).Return(&twilio.Call{}, nil)
go func() {
time.Sleep(time.Second * 2)
cancel()
}()
watcher.reminders = test.reminders
watcher.WatchReminders(client)
// TODO: Could maybe move this to reminders spec
if test.reminders[0].Call {
test.calls.AssertCalled(
t,
"Create",
context.Background(),
url.Values{"From": []string{twilioFromNumber},
"To": []string{twilioToNumber},
"Twiml": []string{"<Response><Say voice=\"Polly.Joanna\"></Say></Response>"}},
)
} else {
test.messages.AssertCalled(
t,
"SendMessage",
twilioFromNumber,
twilioToNumber,
"",
[]*url.URL(nil),
)
}
})
}
}