package sender import ( "strings" "testing" "time" "github.com/davecgh/go-spew/spew" "github.com/icrowley/fake" "github.com/stretchr/testify/assert" "rocketgit.ru/rsmon/worker/app/models" "rocketgit.ru/rsmon/worker/config/database" "rocketgit.ru/rsmon/worker/internal/notifier" "rocketgit.ru/rsmon/worker/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") }