Skip to content

Commit 9d29e94

Browse files
authored
Check oncall rolling_users shift does not include empty group (#1685)
* Check oncall rolling_users shift does not include empty group * Add test for error case
1 parent b2ecce9 commit 9d29e94

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed

internal/resources/oncall/resource_shift.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,12 @@ func resourceOnCallShiftCreate(ctx context.Context, d *schema.ResourceData, clie
292292
rollingUsersData, rollingUsersOk := d.GetOk(rollingUsers)
293293
if rollingUsersOk {
294294
if typeData == rollingUsers {
295+
listSet := rollingUsersData.([]interface{})
296+
for _, set := range listSet {
297+
if set == nil {
298+
return diag.Errorf("`rolling_users` can not include an empty group")
299+
}
300+
}
295301
rollingUsersDataSlice := common.ListOfSetsToStringSlice(rollingUsersData.([]interface{}))
296302
createOptions.RollingUsers = &rollingUsersDataSlice
297303
} else {
@@ -419,6 +425,12 @@ func resourceOnCallShiftUpdate(ctx context.Context, d *schema.ResourceData, clie
419425
rollingUsersData, rollingUsersOk := d.GetOk(rollingUsers)
420426
if rollingUsersOk {
421427
if typeData == rollingUsers {
428+
listSet := rollingUsersData.([]interface{})
429+
for _, set := range listSet {
430+
if set == nil {
431+
return diag.Errorf("`rolling_users` can not include an empty group")
432+
}
433+
}
422434
rollingUsersDataSlice := common.ListOfSetsToStringSlice(rollingUsersData.([]interface{}))
423435
updateOptions.RollingUsers = &rollingUsersDataSlice
424436
} else {

internal/resources/oncall/resource_shift_test.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package oncall_test
22

33
import (
44
"fmt"
5+
"regexp"
56
"testing"
67

78
onCallAPI "github.com/grafana/amixr-api-go-client"
@@ -46,6 +47,17 @@ func TestAccOnCallOnCallShift_basic(t *testing.T) {
4647
resource.TestCheckResourceAttr("grafana_oncall_on_call_shift.test-acc-on_call_shift", "frequency", "hourly"),
4748
),
4849
},
50+
{
51+
Config: testAccOnCallOnCallShiftEmptyRollingUsers(scheduleName, shiftName),
52+
Check: resource.ComposeTestCheckFunc(
53+
testAccCheckOnCallOnCallShiftResourceExists("grafana_oncall_on_call_shift.test-acc-on_call_shift"),
54+
resource.TestCheckResourceAttr("grafana_oncall_on_call_shift.test-acc-on_call_shift", "rolling_users.#", "0"),
55+
),
56+
},
57+
{
58+
Config: testAccOnCallOnCallShiftRollingUsersEmptyGroup(scheduleName, shiftName),
59+
ExpectError: regexp.MustCompile("Error: `rolling_users` can not include an empty group"),
60+
},
4961
{
5062
Config: testAccOnCallOnCallShiftConfigSingle(scheduleName, shiftName),
5163
Check: resource.ComposeTestCheckFunc(
@@ -113,6 +125,52 @@ resource "grafana_oncall_on_call_shift" "test-acc-on_call_shift" {
113125
`, scheduleName, shiftName)
114126
}
115127

128+
func testAccOnCallOnCallShiftEmptyRollingUsers(scheduleName, shiftName string) string {
129+
return fmt.Sprintf(`
130+
resource "grafana_oncall_schedule" "test-acc-schedule" {
131+
type = "calendar"
132+
name = "%s"
133+
time_zone = "UTC"
134+
}
135+
136+
resource "grafana_oncall_on_call_shift" "test-acc-on_call_shift" {
137+
name = "%s"
138+
type = "rolling_users"
139+
start = "2020-09-04T16:00:00"
140+
duration = 3600
141+
level = 1
142+
frequency = "weekly"
143+
week_start = "SU"
144+
interval = 2
145+
by_day = ["MO", "FR"]
146+
rolling_users = []
147+
}
148+
`, scheduleName, shiftName)
149+
}
150+
151+
func testAccOnCallOnCallShiftRollingUsersEmptyGroup(scheduleName, shiftName string) string {
152+
return fmt.Sprintf(`
153+
resource "grafana_oncall_schedule" "test-acc-schedule" {
154+
type = "calendar"
155+
name = "%s"
156+
time_zone = "UTC"
157+
}
158+
159+
resource "grafana_oncall_on_call_shift" "test-acc-on_call_shift" {
160+
name = "%s"
161+
type = "rolling_users"
162+
start = "2020-09-04T16:00:00"
163+
duration = 3600
164+
level = 1
165+
frequency = "weekly"
166+
week_start = "SU"
167+
interval = 2
168+
by_day = ["MO", "FR"]
169+
rolling_users = [[]]
170+
}
171+
`, scheduleName, shiftName)
172+
}
173+
116174
func testAccOnCallOnCallShiftConfigSingle(scheduleName, shiftName string) string {
117175
return fmt.Sprintf(`
118176
resource "grafana_oncall_schedule" "test-acc-schedule" {

0 commit comments

Comments
 (0)