diff --git a/runscope/resource_runscope_test_.go b/runscope/resource_runscope_test_.go index 85a10485..66df1be2 100644 --- a/runscope/resource_runscope_test_.go +++ b/runscope/resource_runscope_test_.go @@ -37,19 +37,27 @@ func resourceRunscopeTest() *schema.Resource { }, "default_environment_id": { Type: schema.TypeString, - Computed: true, + Optional: true, }, }, } } +func resourceRequiresTwoPhase(d *schema.ResourceData) bool { + + if _, ok := d.GetOk("default_environment_id"); ok { + return true + } + return false +} + func resourceTestCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*runscope.Client) name := d.Get("name").(string) log.Printf("[INFO] Creating test with name: %s", name) - test, err := createTestFromResourceData(d) + test, err := createTestFromResourceData(d, true) if err != nil { return fmt.Errorf("Failed to create test: %s", err) } @@ -60,6 +68,17 @@ func resourceTestCreate(d *schema.ResourceData, meta interface{}) error { if err != nil { return fmt.Errorf("Failed to create test: %s", err) } + if resourceRequiresTwoPhase(d) { + testUpdate, err := createTestFromResourceData(d, false) + if err != nil { + return fmt.Errorf("Failed to create test: %s", err) + } + updatedTest, err := client.UpdateTest(testUpdate) + if err != nil { + return fmt.Errorf("Failed to create test: %s", err) + } + createdTest = updatedTest + } d.SetId(createdTest.ID) log.Printf("[INFO] test ID: %s", d.Id()) @@ -70,7 +89,7 @@ func resourceTestCreate(d *schema.ResourceData, meta interface{}) error { func resourceTestRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*runscope.Client) - testFromResource, err := createTestFromResourceData(d) + testFromResource, err := createTestFromResourceData(d, false) if err != nil { return fmt.Errorf("Error reading test: %s", err) } @@ -93,12 +112,13 @@ func resourceTestRead(d *schema.ResourceData, meta interface{}) error { func resourceTestUpdate(d *schema.ResourceData, meta interface{}) error { d.Partial(false) - testFromResource, err := createTestFromResourceData(d) + testFromResource, err := createTestFromResourceData(d, true) if err != nil { return fmt.Errorf("Error updating test: %s", err) } - if d.HasChange("description") { + if d.HasChange("description") || + d.HasChange("default_environment_id") { client := meta.(*runscope.Client) _, err = client.UpdateTest(testFromResource) @@ -113,7 +133,7 @@ func resourceTestUpdate(d *schema.ResourceData, meta interface{}) error { func resourceTestDelete(d *schema.ResourceData, meta interface{}) error { client := meta.(*runscope.Client) - test, err := createTestFromResourceData(d) + test, err := createTestFromResourceData(d, false) if err != nil { return fmt.Errorf("Error deleting test: %s", err) } @@ -126,7 +146,7 @@ func resourceTestDelete(d *schema.ResourceData, meta interface{}) error { return nil } -func createTestFromResourceData(d *schema.ResourceData) (*runscope.Test, error) { +func createTestFromResourceData(d *schema.ResourceData, init bool) (*runscope.Test, error) { test := runscope.NewTest() test.ID = d.Id() @@ -141,6 +161,12 @@ func createTestFromResourceData(d *schema.ResourceData) (*runscope.Test, error) if attr, ok := d.GetOk("description"); ok { test.Description = attr.(string) } + // attributes that require create-then-update cycle + if !init { + if attr, ok := d.GetOk("default_environment_id"); ok { + test.DefaultEnvironmentID = attr.(string) + } + } return test, nil } diff --git a/runscope/resource_runscope_test_test.go b/runscope/resource_runscope_test_test.go index 6fec2425..79a62c21 100644 --- a/runscope/resource_runscope_test_test.go +++ b/runscope/resource_runscope_test_test.go @@ -82,10 +82,37 @@ func testAccCheckTestExists(n string, test *runscope.Test) resource.TestCheckFun } const testRunscopeTestConfigA = ` +resource "runscope_environment" "environmentA" { + bucket_id = "${runscope_bucket.bucket.id}" + name = "test-environment" + + integrations = [ + "${data.runscope_integration.slack.id}" + ] + + initial_variables { + var1 = "true", + var2 = "value2" + } + + regions = ["us1", "eu1"] + + remote_agents = [ + { + name = "test agent" + uuid = "arbitrary-string" + } + ] + + retry_on_failure = true + webhooks = ["https://example.com"] +} + resource "runscope_test" "test" { bucket_id = "${runscope_bucket.bucket.id}" name = "runscope test" description = "This is a test test..." + default_environment_id = "${runscope_environment.environmentA.id}" } resource "runscope_bucket" "bucket" { diff --git a/website/docs/r/test.html.markdown b/website/docs/r/test.html.markdown index 6b5169ca..fe9820f1 100644 --- a/website/docs/r/test.html.markdown +++ b/website/docs/r/test.html.markdown @@ -37,7 +37,7 @@ The following arguments are supported: * `name` - (String, Required) The name of this test. * `description` - (String, Optional) Human-readable description of the new test. is being created for. - +* `default_environment_id` - (String, Optional) ID of an environment to set as default for test steps ## Attributes Reference The following attributes are exported: @@ -45,3 +45,4 @@ The following attributes are exported: * `id` - The unique identifier for the test. * `name` - The name of this test. * `description` - Human-readable description of the new test. +* `default_environment_id` - ID of the default environment