Skip to content

Commit fb151bf

Browse files
authored
Merge pull request #346 from kerny3d/master
feat: Add badge's token to project
2 parents 4d17a46 + 58d734f commit fb151bf

6 files changed

Lines changed: 87 additions & 1 deletion

File tree

docs/data-sources/project.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ data "sonarqube_project" "project" {
2727

2828
### Read-Only
2929

30+
- `badge_token` (String) The badge token for the project.
3031
- `id` (String) The ID of this resource.
3132
- `name` (String) Name of the project
3233
- `visibility` (String) Project visibility

docs/resources/project.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ resource "sonarqube_project" "main" {
5050

5151
### Read-Only
5252

53+
- `badge_token` (String) The badge token for the project.
5354
- `id` (String) The ID of this resource.
5455

5556
<a id="nestedblock--setting"></a>

sonarqube/data_source_sonarqube_project.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ func dataSourceSonarqubeProject() *schema.Resource {
2424
Computed: true,
2525
Description: "Project visibility",
2626
},
27+
"badge_token": {
28+
Type: schema.TypeString,
29+
Computed: true,
30+
Description: "The badge token for the project.",
31+
},
2732
},
2833
}
2934
}

sonarqube/data_source_sonarqube_project_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,22 @@ func TestAccSonarqubeProjectDataSource(t *testing.T) {
3939
},
4040
})
4141
}
42+
43+
func TestAccSonarqubeProjectDataSourceBadgeToken(t *testing.T) {
44+
rnd := generateRandomResourceName()
45+
name := "data.sonarqube_project." + rnd
46+
47+
resource.Test(t, resource.TestCase{
48+
PreCheck: func() { testAccPreCheck(t) },
49+
Providers: testAccProviders,
50+
Steps: []resource.TestStep{
51+
{
52+
Config: testAccSonarqubeProjectDataSourceConfig(rnd, "testAccSonarqubeProjectDSBadgeToken", "testAccSonarqubeProjectDSBadgeToken", "public"),
53+
Check: resource.ComposeTestCheckFunc(
54+
resource.TestCheckResourceAttr(name, "project", "testAccSonarqubeProjectDSBadgeToken"),
55+
resource.TestCheckResourceAttrSet(name, "badge_token"),
56+
),
57+
},
58+
},
59+
})
60+
}

sonarqube/resource_sonarqube_project.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,19 @@ type ProjectComponent struct {
3434
Version string `json:"version"`
3535
Tags []string `json:"tags,omitempty"`
3636
Visibility string `json:"visibility"`
37+
BadgeToken string `json:"token,omitempty"`
3738
}
3839

3940
// CreateProjectResponse for unmarshalling response body of project creation
4041
type CreateProjectResponse struct {
4142
Project Project `json:"project"`
4243
}
4344

45+
// BadgeTokenResponse for unmarshalling response body of badge token endpoint
46+
type BadgeTokenResponse struct {
47+
Token string `json:"token"`
48+
}
49+
4450
// Returns the resource represented by this file.
4551
func resourceSonarqubeProject() *schema.Resource {
4652
return &schema.Resource{
@@ -81,6 +87,11 @@ func resourceSonarqubeProject() *schema.Resource {
8187
},
8288
Description: "A list of tags to put on the project.",
8389
},
90+
"badge_token": {
91+
Type: schema.TypeString,
92+
Computed: true,
93+
Description: "The badge token for the project.",
94+
},
8495
"setting": {
8596
Type: schema.TypeList,
8697
Optional: true,
@@ -224,11 +235,41 @@ func resourceSonarqubeProjectRead(d *schema.ResourceData, m interface{}) error {
224235
return fmt.Errorf("resourceSonarqubeProjectRead: Failed to decode json into struct: %+v", err)
225236
}
226237

238+
// Get badge token
239+
badgeTokenURL := m.(*ProviderConfiguration).sonarQubeURL
240+
badgeTokenURL.Path = strings.TrimSuffix(badgeTokenURL.Path, "/") + "/api/project_badges/token"
241+
badgeTokenURL.RawQuery = url.Values{
242+
"project": []string{d.Get("project").(string)},
243+
}.Encode()
244+
245+
badgeResp, err := httpRequestHelper(
246+
m.(*ProviderConfiguration).httpClient,
247+
"GET",
248+
badgeTokenURL.String(),
249+
http.StatusOK,
250+
"resourceSonarqubeProjectRead",
251+
)
252+
if err != nil {
253+
return fmt.Errorf("resourceSonarqubeProjectRead: Failed to get badge token: %+v", err)
254+
}
255+
defer badgeResp.Body.Close()
256+
257+
// Decode badge token response
258+
badgeTokenResponse := BadgeTokenResponse{}
259+
err = json.NewDecoder(badgeResp.Body).Decode(&badgeTokenResponse)
260+
if err != nil {
261+
return fmt.Errorf("resourceSonarqubeProjectRead: Failed to decode badge token json: %+v", err)
262+
}
263+
264+
// Set the token in the project component
265+
projectReadResponse.Component.BadgeToken = badgeTokenResponse.Token
266+
227267
d.SetId(projectReadResponse.Component.Key)
228268
errName := d.Set("name", projectReadResponse.Component.Name)
229269
errProject := d.Set("project", projectReadResponse.Component.Key)
230270
errVisibility := d.Set("visibility", projectReadResponse.Component.Visibility)
231-
if err := errors.Join(errName, errProject, errVisibility); err != nil {
271+
errToken := d.Set("badge_token", projectReadResponse.Component.BadgeToken)
272+
if err := errors.Join(errName, errProject, errVisibility, errToken); err != nil {
232273
return err
233274
}
234275

sonarqube/resource_sonarqube_project_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,3 +421,22 @@ func TestAccSonarqubeProjectSettingsFieldValues(t *testing.T) {
421421
})
422422

423423
}
424+
425+
func TestAccSonarqubeProjectBadgeToken(t *testing.T) {
426+
rnd := generateRandomResourceName()
427+
name := "sonarqube_project." + rnd
428+
429+
resource.Test(t, resource.TestCase{
430+
PreCheck: func() { testAccPreCheck(t) },
431+
Providers: testAccProviders,
432+
Steps: []resource.TestStep{
433+
{
434+
Config: testAccSonarqubeProjectBasicConfig(rnd, "testAccSonarqubeProjectBadgeToken", "testAccSonarqubeProjectBadgeToken", "public"),
435+
Check: resource.ComposeTestCheckFunc(
436+
resource.TestCheckResourceAttr(name, "project", "testAccSonarqubeProjectBadgeToken"),
437+
resource.TestCheckResourceAttrSet(name, "badge_token"),
438+
),
439+
},
440+
},
441+
})
442+
}

0 commit comments

Comments
 (0)