diff --git a/github/data_source_github_release.go b/github/data_source_github_release.go index 5f3cfb5575..23aef547d7 100644 --- a/github/data_source_github_release.go +++ b/github/data_source_github_release.go @@ -2,7 +2,7 @@ package github import ( "context" - "errors" + "fmt" "log" "strconv" "strings" @@ -36,7 +36,7 @@ func dataSourceGithubRelease() *schema.Resource { Type: schema.TypeInt, Optional: true, }, - "taget_commitish": { + "target_commitish": { Type: schema.TypeString, Computed: true, }, @@ -109,7 +109,7 @@ func dataSourceGithubReleaseRead(d *schema.ResourceData, meta interface{}) error case "id": releaseID := int64(d.Get("release_id").(int)) if releaseID == 0 { - return errors.New("'release_id' must be set when 'retrieve_by' = 'id'") + return fmt.Errorf("`release_id` must be set when `retrieve_by` = `id`") } log.Printf("[INFO] Refreshing GitHub release by id %d from repository %s", releaseID, repository) @@ -117,13 +117,13 @@ func dataSourceGithubReleaseRead(d *schema.ResourceData, meta interface{}) error case "tag": tag := d.Get("release_tag").(string) if tag == "" { - return errors.New("'release_tag' must be set when 'retrieve_by' = 'tag'") + return fmt.Errorf("`release_tag` must be set when `retrieve_by` = `tag`") } log.Printf("[INFO] Refreshing GitHub release by tag %s from repository %s", tag, repository) release, _, err = client.Repositories.GetReleaseByTag(ctx, owner, repository, tag) default: - return errors.New("One of: 'latest', 'id', 'tag' must be set for 'retrieve_by'") + return fmt.Errorf("one of: `latest`, `id`, `tag` must be set for `retrieve_by`") } if err != nil { @@ -132,7 +132,7 @@ func dataSourceGithubReleaseRead(d *schema.ResourceData, meta interface{}) error d.SetId(strconv.FormatInt(release.GetID(), 10)) d.Set("release_tag", release.GetTagName()) - d.Set("taget_commitish", release.GetTargetCommitish()) + d.Set("target_commitish", release.GetTargetCommitish()) d.Set("name", release.GetName()) d.Set("body", release.GetBody()) d.Set("draft", release.GetDraft()) diff --git a/github/data_source_github_release_test.go b/github/data_source_github_release_test.go index 70b1985afa..4283dbc880 100644 --- a/github/data_source_github_release_test.go +++ b/github/data_source_github_release_test.go @@ -3,13 +3,14 @@ package github import ( "fmt" "regexp" + "strconv" "testing" "github.com/hashicorp/terraform/helper/resource" ) func TestAccGithubReleaseDataSource_fetchByLatestNoReleaseReturnsError(t *testing.T) { - repo := "nonExistantRepo" + repo := "nonExistentRepo" owner := "no-user" retrieveBy := "latest" resource.ParallelTest(t, resource.TestCase{ @@ -19,43 +20,141 @@ func TestAccGithubReleaseDataSource_fetchByLatestNoReleaseReturnsError(t *testin Providers: testAccProviders, Steps: []resource.TestStep{ { - Config: testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy), + Config: testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy, "", 0), ExpectError: regexp.MustCompile(`Not Found`), }, }, }) } -// func TestAccGithubReleaseDataSource_latestExisting(t *testing.T) { - -// } - -// func TestAccGithubReleaseDataSource_fetchByIdWithNoIdReturnsError(t *testing.T) { - -// } - -// func TestAccGithubReleaseDataSource_fetchByIdExisting(t *testing.T) { +func TestAccGithubReleaseDataSource_latestExisting(t *testing.T) { + repo := "terraform" + owner := "hashicorp" + retrieveBy := "latest" + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy, "", 0), + Check: resource.ComposeTestCheckFunc( + resource.TestMatchResourceAttr("data.github_release.test", "url", regexp.MustCompile(`hashicorp/terraform`)), + resource.TestMatchResourceAttr("data.github_release.test", "tarball_url", regexp.MustCompile(`hashicorp/terraform/tarball`)), + ), + }, + }, + }) -// } +} -// func TestAccGithubReleaseDataSource_fetchByTagNoTagReturnsError(t *testing.T) { +func TestAccGithubReleaseDataSource_fetchByIdWithNoIdReturnsError(t *testing.T) { + retrieveBy := "id" + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGithubReleaseDataSourceConfig("", "", retrieveBy, "", 0), + ExpectError: regexp.MustCompile("release_id` must be set when `retrieve_by` = `id`"), + }, + }, + }) +} -// } +func TestAccGithubReleaseDataSource_fetchByIdExisting(t *testing.T) { + repo := "terraform" + owner := "hashicorp" + retrieveBy := "id" + id := int64(23055013) + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy, "", id), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.github_release.test", "release_id", strconv.FormatInt(id, 10)), + resource.TestMatchResourceAttr("data.github_release.test", "url", regexp.MustCompile(`hashicorp/terraform`)), + resource.TestMatchResourceAttr("data.github_release.test", "tarball_url", regexp.MustCompile(`hashicorp/terraform/tarball`)), + ), + }, + }, + }) +} -// func TestAccGithubReleaseDataSource_fetchByTagExisting(t *testing.T) { +func TestAccGithubReleaseDataSource_fetchByTagNoTagReturnsError(t *testing.T) { + repo := "terraform" + owner := "hashicorp" + retrieveBy := "tag" + id := int64(23055013) + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy, "", id), + ExpectError: regexp.MustCompile("`release_tag` must be set when `retrieve_by` = `tag`"), + }, + }, + }) +} -// } +func TestAccGithubReleaseDataSource_fetchByTagExisting(t *testing.T) { + repo := "terraform" + owner := "hashicorp" + retrieveBy := "tag" + tag := "v0.12.20" + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy, tag, 0), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("data.github_release.test", "release_tag", tag), + resource.TestMatchResourceAttr("data.github_release.test", "url", regexp.MustCompile(`hashicorp/terraform`)), + resource.TestMatchResourceAttr("data.github_release.test", "tarball_url", regexp.MustCompile(`hashicorp/terraform/tarball`)), + ), + }, + }, + }) +} -// func TestAccGithubReleaseDataSource_invalidRetrieveMethodReturnsError(t *testing.T) { +func TestAccGithubReleaseDataSource_invalidRetrieveMethodReturnsError(t *testing.T) { + retrieveBy := "not valid" + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + testAccPreCheck(t) + }, + Providers: testAccProviders, + Steps: []resource.TestStep{ + { + Config: testAccCheckGithubReleaseDataSourceConfig("", "", retrieveBy, "", 0), + ExpectError: regexp.MustCompile("one of: `latest`, `id`, `tag` must be set for `retrieve_by`"), + }, + }, + }) -// } +} -func testAccCheckGithubReleaseDataSourceConfig(repo string, owner string, retrieveBy string) string { +func testAccCheckGithubReleaseDataSourceConfig(repo, owner, retrieveBy, tag string, id int64) string { return fmt.Sprintf(` data "github_release" "test" { repository = "%s" owner = "%s" retrieve_by = "%s" + release_tag = "%s" + release_id = %d } -`, repo, owner, retrieveBy) +`, repo, owner, retrieveBy, tag , id) }