@@ -73,3 +73,138 @@ func TestListAlertGroup(t *testing.T) {
73
73
t .Errorf (" returned\n %+v, \n want\n %+v" , alerts , want )
74
74
}
75
75
}
76
+
77
+ func TestValidateTimeRange (t * testing.T ) {
78
+ tests := []struct {
79
+ name string
80
+ timeRange string
81
+ wantErr bool
82
+ }{
83
+ {
84
+ name : "valid time range" ,
85
+ timeRange : "2024-03-20T10:00:00_2024-03-21T10:00:00" ,
86
+ wantErr : false ,
87
+ },
88
+ {
89
+ name : "empty time range" ,
90
+ timeRange : "" ,
91
+ wantErr : false ,
92
+ },
93
+ {
94
+ name : "invalid format - missing separator" ,
95
+ timeRange : "2024-03-20T10:00:002024-03-21T10:00:00" ,
96
+ wantErr : true ,
97
+ },
98
+ {
99
+ name : "invalid format - wrong date format" ,
100
+ timeRange : "2024/03/20T10:00:00_2024/03/21T10:00:00" ,
101
+ wantErr : true ,
102
+ },
103
+ {
104
+ name : "invalid time - end before start" ,
105
+ timeRange : "2024-03-21T10:00:00_2024-03-20T10:00:00" ,
106
+ wantErr : true ,
107
+ },
108
+ {
109
+ name : "invalid time - invalid hour" ,
110
+ timeRange : "2024-03-20T25:00:00_2024-03-21T10:00:00" ,
111
+ wantErr : true ,
112
+ },
113
+ }
114
+
115
+ for _ , tt := range tests {
116
+ t .Run (tt .name , func (t * testing.T ) {
117
+ err := validateTimeRange (tt .timeRange )
118
+ if (err != nil ) != tt .wantErr {
119
+ t .Errorf ("validateTimeRange() error = %v, wantErr %v" , err , tt .wantErr )
120
+ }
121
+ })
122
+ }
123
+ }
124
+
125
+ func TestListAlertGroupsValidation (t * testing.T ) {
126
+ tests := []struct {
127
+ name string
128
+ options * ListAlertGroupOptions
129
+ wantErr bool
130
+ }{
131
+ {
132
+ name : "valid options" ,
133
+ options : & ListAlertGroupOptions {
134
+ StartedAt : "2024-03-20T10:00:00_2024-03-21T10:00:00" ,
135
+ },
136
+ wantErr : false ,
137
+ },
138
+ {
139
+ name : "invalid time range" ,
140
+ options : & ListAlertGroupOptions {
141
+ StartedAt : "invalid-time-range" ,
142
+ },
143
+ wantErr : true ,
144
+ },
145
+ }
146
+
147
+ for _ , tt := range tests {
148
+ t .Run (tt .name , func (t * testing.T ) {
149
+ err := tt .options .Validate ()
150
+ if (err != nil ) != tt .wantErr {
151
+ t .Errorf ("ListAlertGroupOptions.Validate() error = %v, wantErr %v" , err , tt .wantErr )
152
+ }
153
+ })
154
+ }
155
+ }
156
+
157
+ func TestListAlertGroupQueryURL (t * testing.T ) {
158
+ tests := []struct {
159
+ name string
160
+ options * ListAlertGroupOptions
161
+ expectedURL string
162
+ }{
163
+ {
164
+ name : "single label" ,
165
+ options : & ListAlertGroupOptions {
166
+ Labels : []string {"env:prod" },
167
+ },
168
+ expectedURL : "/api/v1/alert_groups/?label=env%3Aprod" ,
169
+ },
170
+ {
171
+ name : "multiple labels" ,
172
+ options : & ListAlertGroupOptions {
173
+ Labels : []string {"env:prod" , "severity:high" , "team:backend" },
174
+ },
175
+ expectedURL : "/api/v1/alert_groups/?label=env%3Aprod&label=severity%3Ahigh&label=team%3Abackend" ,
176
+ },
177
+ {
178
+ name : "empty labels" ,
179
+ options : & ListAlertGroupOptions {
180
+ Labels : []string {},
181
+ },
182
+ expectedURL : "/api/v1/alert_groups/" ,
183
+ },
184
+ }
185
+
186
+ for _ , tt := range tests {
187
+ t .Run (tt .name , func (t * testing.T ) {
188
+ mux , server , client := setup (t )
189
+ defer teardown (server )
190
+
191
+ var capturedURL string
192
+ mux .HandleFunc ("/api/v1/alert_groups/" , func (w http.ResponseWriter , r * http.Request ) {
193
+ capturedURL = r .URL .String ()
194
+ t .Logf ("Request URL: %s" , capturedURL )
195
+ w .WriteHeader (http .StatusOK )
196
+ // Add minimal response body
197
+ fmt .Fprint (w , `{"count": 0, "next": null, "previous": null, "results": []}` )
198
+ })
199
+
200
+ _ , _ , err := client .AlertGroups .ListAlertGroups (tt .options )
201
+ if err != nil {
202
+ t .Fatal (err )
203
+ }
204
+
205
+ if capturedURL != tt .expectedURL {
206
+ t .Errorf ("Request URL = %v, want %v" , capturedURL , tt .expectedURL )
207
+ }
208
+ })
209
+ }
210
+ }
0 commit comments