feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
Этот коммит содержится в:
88
internal/sender/event_table_test.go
Обычный файл
88
internal/sender/event_table_test.go
Обычный файл
@@ -0,0 +1,88 @@
|
||||
package sender
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/icrowley/fake"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"rsgit.ru/rsmon/rsmon/app/models"
|
||||
"rsgit.ru/rsmon/rsmon/config/database"
|
||||
"rsgit.ru/rsmon/rsmon/internal/notifier"
|
||||
"rsgit.ru/rsmon/rsmon/spec/factories"
|
||||
)
|
||||
|
||||
func init() {
|
||||
database.Init()
|
||||
}
|
||||
|
||||
var asciiTableExample = strings.TrimLeft(`
|
||||
┌─────────┬──────────┬─────────────────────┬─────────────────┬───────────────────┬─────────┬──────────────┐
|
||||
│ МОНИТОР │ ПРОВЕРКА │ ВРЕМЯ НАЧАЛА │ ВРЕМЯ ОКОНЧАНИЯ │ ПРОДОЛЖИТЕЛЬНОСТЬ │ СТАТУС │ ОШИБКА │
|
||||
├─────────┼──────────┼─────────────────────┼─────────────────┼───────────────────┼─────────┼──────────────┤
|
||||
│ Tagopia │ │ 02.01.2018 03:04:05 │ │ 24 часа, 0 минут │ current │ test event 1 │
|
||||
└─────────┴──────────┴─────────────────────┴─────────────────┴───────────────────┴─────────┴──────────────┘
|
||||
`, "\n")
|
||||
|
||||
var markdownTableExample = strings.TrimLeft(`
|
||||
| Монитор | Проверка | Время начала | Время окончания | Продолжительность | Статус | Ошибка |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| Tagopia | | 02.01.2018 03:04:05 | | 24 часа, 0 минут | current | test event 1 |
|
||||
`, "\n")
|
||||
|
||||
func TestEventTable(t *testing.T) {
|
||||
models.Drop()
|
||||
models.Migrate()
|
||||
user := factories.PersistedUser("test@test.ru", "123")
|
||||
account, err := models.CreateAccountForUser(fake.Company(), &user)
|
||||
|
||||
contact := factories.PersistedContact(account, &user)
|
||||
group := factories.PersistedGroup(account)
|
||||
factories.PersistedNotification(account, []int64{contact.ID}, []int64{group.ID}, 300, false)
|
||||
|
||||
monitor := factories.PersistedMonitor(&group)
|
||||
n := "Tagopia"
|
||||
monitor.Name = &n
|
||||
err = models.DB().Save(&monitor).Error
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
event := factories.PersistedEvent(&monitor, "current", "test event 1")
|
||||
tStart := time.Date(2018, time.January, 2, 3, 4, 5, 0, time.Local)
|
||||
tNow := time.Date(2018, time.January, 3, 3, 4, 5, 0, time.Local)
|
||||
|
||||
event.StartTime = &tStart
|
||||
err = models.DB().Save(&event).Error
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
notifier.Run()
|
||||
|
||||
messages := make([]models.Message, 0)
|
||||
err = models.MessageScope(models.DB()).Where("state IN ('queued')").Find(&messages).Error
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if len(messages) == 0 {
|
||||
t.Fatal("no message sent")
|
||||
}
|
||||
|
||||
if len(messages) > 1 {
|
||||
spew.Dump(messages)
|
||||
t.Fatal("found more than one message")
|
||||
}
|
||||
|
||||
asciiTable, markdownTable := RenderEventsTable(&messages[0], tNow)
|
||||
|
||||
// fmt.Println(asciiTable)
|
||||
// fmt.Println(markdownTable)
|
||||
|
||||
assert.Equal(t, asciiTableExample, asciiTable, "rendered table should match example")
|
||||
assert.Equal(t, markdownTableExample, markdownTable, "rendered table should match example")
|
||||
}
|
||||
Ссылка в новой задаче
Block a user