Skip to content

Commit 1797a03

Browse files
authored
fix!: add extra validation for start_blocks_login (#192)
1 parent 908ab27 commit 1797a03

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

Diff for: provider/script.go

+4
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@ func scriptResource() *schema.Resource {
1919
CreateContext: func(_ context.Context, rd *schema.ResourceData, _ interface{}) diag.Diagnostics {
2020
rd.SetId(uuid.NewString())
2121
runOnStart, _ := rd.Get("run_on_start").(bool)
22+
startBlocksLogin, _ := rd.Get("start_blocks_login").(bool)
2223
runOnStop, _ := rd.Get("run_on_stop").(bool)
2324
cron, _ := rd.Get("cron").(string)
2425

2526
if !runOnStart && !runOnStop && cron == "" {
2627
return diag.Errorf("at least one of run_on_start, run_on_stop, or cron must be set")
2728
}
29+
if !runOnStart && startBlocksLogin {
30+
return diag.Errorf("start_blocks_login can only be set if run_on_start is true")
31+
}
2832
return nil
2933
},
3034
ReadContext: schema.NoopContext,

Diff for: provider/script_test.go

+61
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,64 @@ func TestScriptNeverRuns(t *testing.T) {
7373
}},
7474
})
7575
}
76+
77+
func TestScriptStartBlocksLoginRequiresRunOnStart(t *testing.T) {
78+
t.Parallel()
79+
80+
resource.Test(t, resource.TestCase{
81+
Providers: map[string]*schema.Provider{
82+
"coder": provider.New(),
83+
},
84+
IsUnitTest: true,
85+
Steps: []resource.TestStep{{
86+
Config: `
87+
provider "coder" {
88+
}
89+
resource "coder_script" "example" {
90+
agent_id = ""
91+
display_name = "Hey"
92+
script = "Wow"
93+
run_on_stop = true
94+
start_blocks_login = true
95+
}
96+
`,
97+
ExpectError: regexp.MustCompile(`start_blocks_login can only be set if run_on_start is true`),
98+
}},
99+
})
100+
resource.Test(t, resource.TestCase{
101+
Providers: map[string]*schema.Provider{
102+
"coder": provider.New(),
103+
},
104+
IsUnitTest: true,
105+
Steps: []resource.TestStep{{
106+
Config: `
107+
provider "coder" {
108+
}
109+
resource "coder_script" "example" {
110+
agent_id = ""
111+
display_name = "Hey"
112+
script = "Wow"
113+
start_blocks_login = true
114+
run_on_start = true
115+
}
116+
`,
117+
Check: func(state *terraform.State) error {
118+
require.Len(t, state.Modules, 1)
119+
require.Len(t, state.Modules[0].Resources, 1)
120+
script := state.Modules[0].Resources["coder_script.example"]
121+
require.NotNil(t, script)
122+
t.Logf("script attributes: %#v", script.Primary.Attributes)
123+
for key, expected := range map[string]string{
124+
"agent_id": "",
125+
"display_name": "Hey",
126+
"script": "Wow",
127+
"start_blocks_login": "true",
128+
"run_on_start": "true",
129+
} {
130+
require.Equal(t, expected, script.Primary.Attributes[key])
131+
}
132+
return nil
133+
},
134+
}},
135+
})
136+
}

0 commit comments

Comments
 (0)