moira
130 строк · 4.3 Кб
1package controller2
3import (4"fmt"5"testing"6
7"github.com/golang/mock/gomock"8. "github.com/smartystreets/goconvey/convey"9
10"go.avito.ru/DO/moira"11"go.avito.ru/DO/moira/api"12"go.avito.ru/DO/moira/api/dto"13"go.avito.ru/DO/moira/mock/moira-alert"14"go.avito.ru/DO/moira/test-helpers"15)
16
17func TestGetAllTags(t *testing.T) {18mockCtrl := gomock.NewController(t)19defer mockCtrl.Finish()20database := mock_moira_alert.NewMockDatabase(mockCtrl)21
22Convey("Success", t, func() {23database.EXPECT().GetTagNames().Return([]string{"tag21", "tag22", "tag1"}, nil)24data, err := GetAllTags(database)25So(err, ShouldBeNil)26So(data, ShouldResemble, &dto.TagsData{TagNames: []string{"tag21", "tag22", "tag1"}})27})28
29Convey("Error", t, func() {30expected := fmt.Errorf("Nooooooooooooooooooooo")31database.EXPECT().GetTagNames().Return(nil, expected)32data, err := GetAllTags(database)33So(err, ShouldResemble, api.ErrorInternalServer(expected))34So(data, ShouldBeNil)35})36}
37
38func TestDeleteTag(t *testing.T) {39mockCtrl := gomock.NewController(t)40defer mockCtrl.Finish()41database := mock_moira_alert.NewMockDatabase(mockCtrl)42tag := "MyTag"43
44Convey("Test no trigger ids by tag", t, func() {45database.EXPECT().GetTagTriggerIDs(tag).Return(nil, nil)46database.EXPECT().RemoveTag(tag).Return(nil)47resp, err := RemoveTag(database, tag)48So(err, ShouldBeNil)49So(resp, ShouldResemble, &dto.MessageResponse{Message: "tag deleted"})50})51
52Convey("Test has trigger ids by tag", t, func() {53database.EXPECT().GetTagTriggerIDs(tag).Return([]string{"123"}, nil)54resp, err := RemoveTag(database, tag)55So(err, ShouldResemble, api.ErrorInvalidRequest(fmt.Errorf("This tag is assigned to %v triggers. Remove tag from triggers first", 1)))56So(resp, ShouldBeNil)57})58
59Convey("GetTagTriggerIDs error", t, func() {60expected := fmt.Errorf("Can not read trigger ids")61database.EXPECT().GetTagTriggerIDs(tag).Return(nil, expected)62resp, err := RemoveTag(database, tag)63So(err, ShouldResemble, api.ErrorInternalServer(expected))64So(resp, ShouldBeNil)65})66
67Convey("Error delete tag", t, func() {68expected := fmt.Errorf("Can not delete tag")69database.EXPECT().GetTagTriggerIDs(tag).Return(nil, nil)70database.EXPECT().RemoveTag(tag).Return(expected)71resp, err := RemoveTag(database, tag)72So(err, ShouldResemble, api.ErrorInternalServer(expected))73So(resp, ShouldBeNil)74})75}
76
77func TestGetAllTagsAndSubscriptions(t *testing.T) {78mockCtrl := gomock.NewController(t)79defer mockCtrl.Finish()80
81database := mock_moira_alert.NewMockDatabase(mockCtrl)82logger := test_helpers.GetTestLogger()83
84Convey("Success get tag stats", t, func() {85tags := []string{"tag21", "tag22", "tag1"}86database.EXPECT().GetTagNames().Return(tags, nil)87database.EXPECT().GetTagsStats(tags).Return([]moira.TagStats{88{89Name: "tag1",90Triggers: make([]string, 0),91Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag1", "tag2"}}},92},93{94Name: "tag21",95Triggers: []string{"trigger21"},96Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag21"}}},97},98{99Name: "tag22",100Triggers: []string{"trigger22"},101Subscriptions: make([]moira.SubscriptionData, 0),102},103}, nil)104stat, err := GetAllTagsAndSubscriptions(database, logger)105So(err, ShouldBeNil)106So(stat.List, ShouldHaveLength, 3)107for _, stat := range stat.List {108if stat.TagName == "tag21" {109So(stat, ShouldResemble, dto.TagStatistics{TagName: "tag21", Triggers: []string{"trigger21"}, Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag21"}}}})110}111if stat.TagName == "tag22" {112So(stat, ShouldResemble, dto.TagStatistics{TagName: "tag22", Triggers: []string{"trigger22"}, Subscriptions: make([]moira.SubscriptionData, 0)})113}114if stat.TagName == "tag1" {115So(stat, ShouldResemble, dto.TagStatistics{TagName: "tag1", Triggers: make([]string, 0), Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag1", "tag2"}}}})116}117}118})119
120Convey("Errors", t, func() {121Convey("GetTagNames", func() {122expected := fmt.Errorf("Can not get tag names")123tags := []string{"tag21", "tag22", "tag1"}124database.EXPECT().GetTagNames().Return(tags, expected)125stat, err := GetAllTagsAndSubscriptions(database, logger)126So(err, ShouldResemble, api.ErrorInternalServer(expected))127So(stat, ShouldBeNil)128})129})130}
131