moira

Форк
0
/
tag_test.go 
130 строк · 4.3 Кб
1
package controller
2

3
import (
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

17
func TestGetAllTags(t *testing.T) {
18
	mockCtrl := gomock.NewController(t)
19
	defer mockCtrl.Finish()
20
	database := mock_moira_alert.NewMockDatabase(mockCtrl)
21

22
	Convey("Success", t, func() {
23
		database.EXPECT().GetTagNames().Return([]string{"tag21", "tag22", "tag1"}, nil)
24
		data, err := GetAllTags(database)
25
		So(err, ShouldBeNil)
26
		So(data, ShouldResemble, &dto.TagsData{TagNames: []string{"tag21", "tag22", "tag1"}})
27
	})
28

29
	Convey("Error", t, func() {
30
		expected := fmt.Errorf("Nooooooooooooooooooooo")
31
		database.EXPECT().GetTagNames().Return(nil, expected)
32
		data, err := GetAllTags(database)
33
		So(err, ShouldResemble, api.ErrorInternalServer(expected))
34
		So(data, ShouldBeNil)
35
	})
36
}
37

38
func TestDeleteTag(t *testing.T) {
39
	mockCtrl := gomock.NewController(t)
40
	defer mockCtrl.Finish()
41
	database := mock_moira_alert.NewMockDatabase(mockCtrl)
42
	tag := "MyTag"
43

44
	Convey("Test no trigger ids by tag", t, func() {
45
		database.EXPECT().GetTagTriggerIDs(tag).Return(nil, nil)
46
		database.EXPECT().RemoveTag(tag).Return(nil)
47
		resp, err := RemoveTag(database, tag)
48
		So(err, ShouldBeNil)
49
		So(resp, ShouldResemble, &dto.MessageResponse{Message: "tag deleted"})
50
	})
51

52
	Convey("Test has trigger ids by tag", t, func() {
53
		database.EXPECT().GetTagTriggerIDs(tag).Return([]string{"123"}, nil)
54
		resp, err := RemoveTag(database, tag)
55
		So(err, ShouldResemble, api.ErrorInvalidRequest(fmt.Errorf("This tag is assigned to %v triggers. Remove tag from triggers first", 1)))
56
		So(resp, ShouldBeNil)
57
	})
58

59
	Convey("GetTagTriggerIDs error", t, func() {
60
		expected := fmt.Errorf("Can not read trigger ids")
61
		database.EXPECT().GetTagTriggerIDs(tag).Return(nil, expected)
62
		resp, err := RemoveTag(database, tag)
63
		So(err, ShouldResemble, api.ErrorInternalServer(expected))
64
		So(resp, ShouldBeNil)
65
	})
66

67
	Convey("Error delete tag", t, func() {
68
		expected := fmt.Errorf("Can not delete tag")
69
		database.EXPECT().GetTagTriggerIDs(tag).Return(nil, nil)
70
		database.EXPECT().RemoveTag(tag).Return(expected)
71
		resp, err := RemoveTag(database, tag)
72
		So(err, ShouldResemble, api.ErrorInternalServer(expected))
73
		So(resp, ShouldBeNil)
74
	})
75
}
76

77
func TestGetAllTagsAndSubscriptions(t *testing.T) {
78
	mockCtrl := gomock.NewController(t)
79
	defer mockCtrl.Finish()
80

81
	database := mock_moira_alert.NewMockDatabase(mockCtrl)
82
	logger := test_helpers.GetTestLogger()
83

84
	Convey("Success get tag stats", t, func() {
85
		tags := []string{"tag21", "tag22", "tag1"}
86
		database.EXPECT().GetTagNames().Return(tags, nil)
87
		database.EXPECT().GetTagsStats(tags).Return([]moira.TagStats{
88
			{
89
				Name:          "tag1",
90
				Triggers:      make([]string, 0),
91
				Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag1", "tag2"}}},
92
			},
93
			{
94
				Name:          "tag21",
95
				Triggers:      []string{"trigger21"},
96
				Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag21"}}},
97
			},
98
			{
99
				Name:          "tag22",
100
				Triggers:      []string{"trigger22"},
101
				Subscriptions: make([]moira.SubscriptionData, 0),
102
			},
103
		}, nil)
104
		stat, err := GetAllTagsAndSubscriptions(database, logger)
105
		So(err, ShouldBeNil)
106
		So(stat.List, ShouldHaveLength, 3)
107
		for _, stat := range stat.List {
108
			if stat.TagName == "tag21" {
109
				So(stat, ShouldResemble, dto.TagStatistics{TagName: "tag21", Triggers: []string{"trigger21"}, Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag21"}}}})
110
			}
111
			if stat.TagName == "tag22" {
112
				So(stat, ShouldResemble, dto.TagStatistics{TagName: "tag22", Triggers: []string{"trigger22"}, Subscriptions: make([]moira.SubscriptionData, 0)})
113
			}
114
			if stat.TagName == "tag1" {
115
				So(stat, ShouldResemble, dto.TagStatistics{TagName: "tag1", Triggers: make([]string, 0), Subscriptions: []moira.SubscriptionData{{Tags: []string{"tag1", "tag2"}}}})
116
			}
117
		}
118
	})
119

120
	Convey("Errors", t, func() {
121
		Convey("GetTagNames", func() {
122
			expected := fmt.Errorf("Can not get tag names")
123
			tags := []string{"tag21", "tag22", "tag1"}
124
			database.EXPECT().GetTagNames().Return(tags, expected)
125
			stat, err := GetAllTagsAndSubscriptions(database, logger)
126
			So(err, ShouldResemble, api.ErrorInternalServer(expected))
127
			So(stat, ShouldBeNil)
128
		})
129
	})
130
}
131

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.