hswro-alarm-bot/sender_worker_test.go

77 wiersze
2.4 KiB
Go
Czysty Zwykły widok Historia

2024-02-10 23:13:31 +00:00
package main
import (
2024-02-19 18:52:40 +00:00
"html/template"
2024-02-11 21:48:05 +00:00
"io"
"log"
2024-02-10 23:13:31 +00:00
"sync"
"testing"
2024-02-11 21:48:05 +00:00
2024-03-04 20:11:34 +00:00
"git.sr.ht/~michalr/go-satel"
2024-02-11 21:48:05 +00:00
"github.com/stretchr/testify/assert"
2024-02-10 23:13:31 +00:00
)
type MockSender struct {
messages []GenericMessage
}
2024-02-19 18:52:40 +00:00
func (self *MockSender) Send(msg GenericMessage, tpl *template.Template) error {
2024-02-10 23:13:31 +00:00
self.messages = append(self.messages, msg)
return nil
}
2024-02-11 10:51:41 +00:00
type MockSleeper struct {
2024-02-11 13:56:03 +00:00
ch *chan<- interface{}
callCount int
2024-02-11 10:51:41 +00:00
}
func (self *MockSleeper) Sleep(ch chan<- interface{}) {
if self.ch == nil {
self.ch = &ch
}
2024-02-11 13:56:03 +00:00
self.callCount += 1
2024-02-11 10:51:41 +00:00
}
type FakeChatId struct {
FakeId int64
}
func (self FakeChatId) GetTgIds() *[]int64 {
return nil
}
2024-02-19 18:52:40 +00:00
var (
messageTest1 = satel.Event{Type: satel.ArmedPartition, Index: 1, Value: true}
messageTest2 = satel.Event{Type: satel.ArmedPartition, Index: 2, Value: true}
messageTest3 = satel.Event{Type: satel.ArmedPartition, Index: 3, Value: true}
messageTest4 = satel.Event{Type: satel.ArmedPartition, Index: 4, Value: true}
messageTest5 = satel.Event{Type: satel.ArmedPartition, Index: 5, Value: true}
messageTest6 = satel.Event{Type: satel.ArmedPartition, Index: 6, Value: true}
)
2024-02-10 23:13:31 +00:00
func TestMessageThrottling(t *testing.T) {
testEvents := make(chan GenericMessage)
wg := sync.WaitGroup{}
mockSender := MockSender{make([]GenericMessage, 0)}
2024-02-11 13:56:03 +00:00
mockSleeper := MockSleeper{nil, 0}
2024-02-18 00:44:10 +00:00
Consume(SendToTg(tgSenderWorker(testEvents, &wg, &mockSleeper, log.New(io.Discard, "", log.Ltime)),
2024-02-19 18:52:40 +00:00
&mockSender, &wg, log.New(io.Discard, "", log.Ltime), nil))
testEvents <- GenericMessage{TgChatId{123}, []MsgContent{{messageTest1}}}
testEvents <- GenericMessage{TgChatId{124}, []MsgContent{{messageTest3}}}
testEvents <- GenericMessage{TgChatId{123}, []MsgContent{{messageTest2}}}
testEvents <- GenericMessage{TgChatId{124}, []MsgContent{{messageTest4}}}
testEvents <- GenericMessage{FakeChatId{123}, []MsgContent{{messageTest6}}}
2024-02-11 13:56:03 +00:00
assert.Equal(t, 1, mockSleeper.callCount)
2024-02-11 10:51:41 +00:00
*mockSleeper.ch <- nil
2024-02-11 13:56:03 +00:00
assert.Equal(t, 1, mockSleeper.callCount)
2024-02-19 18:52:40 +00:00
testEvents <- GenericMessage{TgChatId{123}, []MsgContent{{messageTest5}}}
2024-02-10 23:13:31 +00:00
close(testEvents)
wg.Wait()
2024-02-11 13:56:03 +00:00
assert.Equal(t, 2, mockSleeper.callCount)
2024-02-10 23:13:31 +00:00
assert.Len(t, mockSender.messages, 4)
2024-02-19 18:52:40 +00:00
assert.Contains(t, mockSender.messages, GenericMessage{TgChatId{123}, []MsgContent{{messageTest1}, {messageTest2}}})
assert.Contains(t, mockSender.messages, GenericMessage{TgChatId{124}, []MsgContent{{messageTest3}, {messageTest4}}})
assert.Contains(t, mockSender.messages, GenericMessage{FakeChatId{123}, []MsgContent{{messageTest6}}})
2024-02-10 23:13:31 +00:00
}