diff --git a/honeycombio/data_source_column_test.go b/honeycombio/data_source_column_test.go index 543310aa..0d5c73eb 100644 --- a/honeycombio/data_source_column_test.go +++ b/honeycombio/data_source_column_test.go @@ -4,15 +4,14 @@ import ( "context" "fmt" "regexp" - "strings" "testing" "github.com/stretchr/testify/require" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-testing/helper/acctest" honeycombio "github.com/honeycombio/terraform-provider-honeycombio/client" + "github.com/honeycombio/terraform-provider-honeycombio/internal/helper/test" ) func TestAccDataSourceHoneycombioColumn_basic(t *testing.T) { @@ -20,59 +19,53 @@ func TestAccDataSourceHoneycombioColumn_basic(t *testing.T) { c := testAccClient(t) dataset := testAccDataset() - testColumns := []honeycombio.Column{ - { - KeyName: acctest.RandString(4) + "_test_column3", - Description: "test column3", - Type: honeycombio.ToPtr(honeycombio.ColumnType("float")), - }, - } - - for i, column := range testColumns { - col, err := c.Columns.Create(ctx, dataset, &column) - require.NoError(t, err) - // update ID for removal later - testColumns[i].ID = col.ID - - } - //nolint:errcheck + col, err := c.Columns.Create(ctx, dataset, &honeycombio.Column{ + KeyName: test.RandomStringWithPrefix("test.", 10), + Description: test.RandomString(20), + Type: honeycombio.ToPtr(honeycombio.ColumnTypeFloat), + }) + require.NoError(t, err) t.Cleanup(func() { - // remove Columns at the of the test run - for _, col := range testColumns { - c.Columns.Delete(ctx, dataset, col.ID) - } + c.Columns.Delete(ctx, dataset, col.ID) }) resource.Test(t, resource.TestCase{ PreCheck: testAccPreCheck(t), ProtoV5ProviderFactories: testAccProtoV5ProviderFactory, Steps: []resource.TestStep{ - // match by name and return a single column with the right type - { - Config: testAccDataSourceColumnConfig([]string{"dataset = \"" + testAccDataset() + "\"", "name = \"" + testColumns[0].KeyName + "\""}), - Check: resource.TestCheckResourceAttr("data.honeycombio_column.test", "type", "float"), - }, - // test a failed match { - Config: testAccDataSourceColumnConfig([]string{"dataset = \"" + testAccDataset() + "\"", "name = \"test_column5\""}), - ExpectError: regexp.MustCompile("404 Not Found"), + Config: fmt.Sprintf(` +data "honeycombio_column" "test" { + dataset = "%s" + name = "%s" +}`, dataset, col.KeyName), + Check: resource.ComposeAggregateTestCheckFunc( + resource.TestCheckResourceAttr("data.honeycombio_column.test", "name", col.KeyName), + resource.TestCheckResourceAttr("data.honeycombio_column.test", "description", col.Description), + resource.TestCheckResourceAttr("data.honeycombio_column.test", "type", "float"), + resource.TestCheckResourceAttr("data.honeycombio_column.test", "hidden", "false"), + resource.TestCheckResourceAttrSet("data.honeycombio_column.test", "last_written_at"), + resource.TestCheckResourceAttrSet("data.honeycombio_column.test", "created_at"), + resource.TestCheckResourceAttrSet("data.honeycombio_column.test", "updated_at"), + ), + PlanOnly: true, }, }, }) -} -func testAccDataSourceColumnConfig(filters []string) string { - return fmt.Sprintf(` + resource.Test(t, resource.TestCase{ + PreCheck: testAccPreCheck(t), + ProtoV5ProviderFactories: testAccProtoV5ProviderFactory, + Steps: []resource.TestStep{ + { + Config: fmt.Sprintf(` data "honeycombio_column" "test" { - %s -} - -output "type" { - value = data.honeycombio_column.test.type -} - -output "description" { - value = data.honeycombio_column.test.description -} -`, strings.Join(filters, "\n")) + dataset = "%s" + name = "does-not-exist" +}`, dataset), + PlanOnly: true, + ExpectError: regexp.MustCompile(`(?i)not found`), + }, + }, + }) } diff --git a/honeycombio/data_source_columns_test.go b/honeycombio/data_source_columns_test.go index 2397efb8..e8289722 100644 --- a/honeycombio/data_source_columns_test.go +++ b/honeycombio/data_source_columns_test.go @@ -3,15 +3,15 @@ package honeycombio import ( "context" "fmt" - "strings" "testing" "github.com/stretchr/testify/require" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" honeycombio "github.com/honeycombio/terraform-provider-honeycombio/client" + "github.com/honeycombio/terraform-provider-honeycombio/internal/helper/test" ) func TestAccDataSourceHoneycombioColumns_basic(t *testing.T) { @@ -19,28 +19,19 @@ func TestAccDataSourceHoneycombioColumns_basic(t *testing.T) { c := testAccClient(t) dataset := testAccDataset() - testprefix := acctest.RandString(4) - - testColumns := []honeycombio.Column{ - { - KeyName: testprefix + "_test_column1", - Description: "test column1", - }, - { - KeyName: testprefix + "_test_column2", - Description: "test column2", - }, - } - - for i, column := range testColumns { - col, err := c.Columns.Create(ctx, dataset, &column) + const numColumns = 5 + testFilterPrefix := test.RandomStringWithPrefix("test.", 5) + testColumns := make([]*honeycombio.Column, 0, numColumns) + for range numColumns { + col, err := c.Columns.Create(ctx, dataset, &honeycombio.Column{ + KeyName: test.RandomStringWithPrefix(testFilterPrefix+".", 10), + Description: test.RandomString(20), + Type: honeycombio.ToPtr(honeycombio.ColumnTypeFloat), + }) require.NoError(t, err) - // update ID for removal later - testColumns[i].ID = col.ID + testColumns = append(testColumns, col) } - //nolint:errcheck t.Cleanup(func() { - // remove Columns at the of the test run for _, col := range testColumns { c.Columns.Delete(ctx, dataset, col.ID) } @@ -51,32 +42,63 @@ func TestAccDataSourceHoneycombioColumns_basic(t *testing.T) { ProtoV5ProviderFactories: testAccProtoV5ProviderFactory, Steps: []resource.TestStep{ { - Config: testAccDataSourceColumnsConfig([]string{"dataset = \"" + testAccDataset() + "\""}), - Check: resource.ComposeTestCheckFunc( - testCheckOutputContains("names", testColumns[0].KeyName), - ), - }, - { - Config: testAccDataSourceColumnsConfig([]string{"dataset = \"" + testAccDataset() + "\"", "starts_with = \"" + testprefix + "\""}), - Check: resource.TestCheckResourceAttr("data.honeycombio_columns.test", "names.#", "2"), - }, - { - Config: testAccDataSourceColumnsConfig([]string{"dataset = \"" + testAccDataset() + "\"", "starts_with = \"foo\""}), - Check: resource.ComposeTestCheckFunc( - testCheckOutputDoesNotContain("names", testColumns[0].KeyName), + Config: fmt.Sprintf(` +data "honeycombio_columns" "all" { + dataset = "%[1]s" +} + +data "honeycombio_columns" "filtered" { + dataset = "%[1]s" + starts_with = "%[2]s" +} + +data "honeycombio_columns" "none" { + dataset = "%[1]s" + starts_with = "does-not-exist" +} + +output "all" { + value = data.honeycombio_columns.all.names +}`, dataset, testFilterPrefix), + Check: resource.ComposeAggregateTestCheckFunc( + testCheckAllOutputContains(testColumns[0].KeyName), + testCheckAllOutputContains(testColumns[1].KeyName), + testCheckAllOutputContains(testColumns[2].KeyName), + testCheckAllOutputContains(testColumns[3].KeyName), + testCheckAllOutputContains(testColumns[4].KeyName), + resource.TestCheckResourceAttr("data.honeycombio_columns.filtered", + "names.#", + fmt.Sprintf("%d", numColumns), + ), + resource.TestCheckResourceAttr("data.honeycombio_columns.none", + "names.#", + "0", + ), ), + PlanOnly: true, }, }, }) } -func testAccDataSourceColumnsConfig(filters []string) string { - return fmt.Sprintf(` -data "honeycombio_columns" "test" { - %s -} +func testCheckAllOutputContains(contains string) resource.TestCheckFunc { + return func(s *terraform.State) error { + const name = "all" -output "names" { - value = data.honeycombio_columns.test.names -}`, strings.Join(filters, "\n")) + ms := s.RootModule() + rs, ok := ms.Outputs[name] + if !ok { + return fmt.Errorf("Not found: %s", name) + } + + output := rs.Value.([]interface{}) + + for _, value := range output { + if value.(string) == contains { + return nil + } + } + + return fmt.Errorf("Output '%s' did not contain %#v, got %#v", name, contains, output) + } } diff --git a/honeycombio/helpers_test.go b/honeycombio/helpers_test.go deleted file mode 100644 index 2aba9f5d..00000000 --- a/honeycombio/helpers_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package honeycombio - -import ( - "bytes" - "encoding/json" - "fmt" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" -) - -// testCheckOutputContains checks an output in the Terraform configuration -// contains the given value. The output is expected to be of type list(string). -func testCheckOutputContains(name, contains string) resource.TestCheckFunc { - return func(s *terraform.State) error { - ms := s.RootModule() - rs, ok := ms.Outputs[name] - if !ok { - return fmt.Errorf("Not found: %s", name) - } - - output := rs.Value.([]interface{}) - - for _, value := range output { - if value.(string) == contains { - return nil - } - } - - return fmt.Errorf("Output '%s' did not contain %#v, got %#v", name, contains, output) - } -} - -// testCheckOutputDoesNotContain checks an output in the Terraform configuration -// does not contain the given value. The output is expected to be of type -// list(string). -func testCheckOutputDoesNotContain(name, contains string) resource.TestCheckFunc { - return func(s *terraform.State) error { - ms := s.RootModule() - rs, ok := ms.Outputs[name] - if !ok { - return fmt.Errorf("Not found: %s", name) - } - - output := rs.Value.([]interface{}) - - for _, value := range output { - if value.(string) == contains { - return fmt.Errorf("Output '%s' contained %#v, should not", name, contains) - } - } - - return nil - } -} - -// MinifyJSON minifies a JSON string removing all whitespace and newlines -func MinifyJSON(s string) (string, error) { - var buffer bytes.Buffer - err := json.Compact(&buffer, []byte(s)) - if err != nil { - return "", err - } - return buffer.String(), nil -}