Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: add API calls for configuration set #853

Merged
merged 4 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions client/api_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@ type ApiClientInterface interface {
TeamRoleAssignments(payload *TeamRoleAssignmentListPayload) ([]TeamRoleAssignmentPayload, error)
KubernetesCredentialsCreate(payload *KubernetesCredentialsCreatePayload) (*Credentials, error)
KubernetesCredentialsUpdate(id string, payload *KubernetesCredentialsUpdatePayload) (*Credentials, error)
ConfigurationSetCreate(payload *CreateConfigurationSetPayload) (*ConfigurationSet, error)
ConfigurationSetUpdate(id string, payload *UpdateConfigurationSetPayload) (*ConfigurationSet, error)
ConfigurationSet(id string) (*ConfigurationSet, error)
ConfigurationSetDelete(id string) error
ConfigurationVariablesBySetId(setId string) ([]ConfigurationVariable, error)
}

func NewApiClient(client http.HttpClientInterface, defaultOrganizationId string) ApiClientInterface {
Expand Down
74 changes: 74 additions & 0 deletions client/api_client_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

75 changes: 75 additions & 0 deletions client/configuration_set.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package client

type CreateConfigurationSetPayload struct {
Name string `json:"name"`
Description string `json:"description"`
// if Scope is "organization", scopeId will be calculated in the functions.
Scope string `json:"scope"` // "project" or "organization".
ScopeId string `json:"scopeId"` // project id or organization id.
ConfigurationProperties []ConfigurationVariable `json:"configurationProperties"`
}

type UpdateConfigurationSetPayload struct {
Name string `json:"name"`
Description string `json:"description"`
ConfigurationPropertiesChanges []ConfigurationVariable `json:"configurationPropertiesChanges"` // delta changes.
}

type ConfigurationSet struct {
Id string `json:"id"`
Name string `json:"name"`
Description string `json:"description"`
}

func (client *ApiClient) ConfigurationSetCreate(payload *CreateConfigurationSetPayload) (*ConfigurationSet, error) {
var result ConfigurationSet
var err error

if payload.Scope == "organization" {
payload.ScopeId, err = client.OrganizationId()
if err != nil {
return nil, err
}
}

if err := client.http.Post("/configuration-sets", payload, &result); err != nil {
return nil, err
}

return &result, nil
}

func (client *ApiClient) ConfigurationSetUpdate(id string, payload *UpdateConfigurationSetPayload) (*ConfigurationSet, error) {
var result ConfigurationSet

if err := client.http.Put("/configuration-sets/"+id, payload, &result); err != nil {
return nil, err
}

return &result, nil
}

func (client *ApiClient) ConfigurationSet(id string) (*ConfigurationSet, error) {
var result ConfigurationSet

if err := client.http.Get("/configuration-sets/"+id, nil, &result); err != nil {
return nil, err
}

return &result, nil
}

func (client *ApiClient) ConfigurationSetDelete(id string) error {
return client.http.Delete("/configuration-sets/"+id, nil)
}

func (client *ApiClient) ConfigurationVariablesBySetId(setId string) ([]ConfigurationVariable, error) {
var result []ConfigurationVariable

if err := client.http.Get("/configuration", map[string]string{
"setId": setId,
}, &result); err != nil {
return nil, err
}
return result, nil
}
154 changes: 154 additions & 0 deletions client/configuration_set_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
package client_test

import (
. "github.com/env0/terraform-provider-env0/client"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"go.uber.org/mock/gomock"
)

var _ = Describe("Configuration Set", func() {
id := "id12345"
projectId := "projectId123"

mockConfigurationSet := ConfigurationSet{
Id: id,
Name: "name",
Description: "description",
}

var configurationSet *ConfigurationSet

Describe("create organization configuration set", func() {
BeforeEach(func() {
mockOrganizationIdCall(organizationId).Times(1)

createPayload := CreateConfigurationSetPayload{
Name: "name1",
Description: "des1",
Scope: "organization",
}

createPayloadWithScopeId := CreateConfigurationSetPayload{
Name: "name1",
Description: "des1",
Scope: "organization",
ScopeId: organizationId,
}

httpCall = mockHttpClient.EXPECT().
Post("/configuration-sets", &createPayloadWithScopeId, gomock.Any()).
Do(func(path string, request interface{}, response *ConfigurationSet) {
*response = mockConfigurationSet
}).Times(1)

configurationSet, _ = apiClient.ConfigurationSetCreate(&createPayload)
})

It("Should return configuration set", func() {
Expect(*configurationSet).To(Equal(mockConfigurationSet))
})
})

Describe("create project configuration set", func() {
BeforeEach(func() {
createPayload := CreateConfigurationSetPayload{
Name: "name1",
Description: "des1",
Scope: "project",
ScopeId: projectId,
}

httpCall = mockHttpClient.EXPECT().
Post("/configuration-sets", &createPayload, gomock.Any()).
Do(func(path string, request interface{}, response *ConfigurationSet) {
*response = mockConfigurationSet
}).Times(1)

configurationSet, _ = apiClient.ConfigurationSetCreate(&createPayload)
})

It("Should return configuration set", func() {
Expect(*configurationSet).To(Equal(mockConfigurationSet))
})
})

Describe("update configuration set", func() {
BeforeEach(func() {
updatePayload := UpdateConfigurationSetPayload{
Name: "name2",
Description: "des2",
}

httpCall = mockHttpClient.EXPECT().
Put("/configuration-sets/"+id, &updatePayload, gomock.Any()).
Do(func(path string, request interface{}, response *ConfigurationSet) {
*response = mockConfigurationSet
}).Times(1)

configurationSet, _ = apiClient.ConfigurationSetUpdate(id, &updatePayload)
})

It("Should return configuration set", func() {
Expect(*configurationSet).To(Equal(mockConfigurationSet))
})
})

Describe("get configuration set by id", func() {
BeforeEach(func() {
httpCall = mockHttpClient.EXPECT().
Get("/configuration-sets/"+id, nil, gomock.Any()).
Do(func(path string, request interface{}, response *ConfigurationSet) {
*response = mockConfigurationSet
}).Times(1)

configurationSet, _ = apiClient.ConfigurationSet(id)
})

It("Should return configuration set", func() {
Expect(*configurationSet).To(Equal(mockConfigurationSet))
})
})

Describe("delete configuration set", func() {
BeforeEach(func() {
httpCall = mockHttpClient.EXPECT().
Delete("/configuration-sets/"+id, nil).
Do(func(path string, request interface{}) {}).
Times(1)

apiClient.ConfigurationSetDelete(id)
})

It("Should call delete once", func() {})
GiliFaroEnv0 marked this conversation as resolved.
Show resolved Hide resolved
})

Describe("get configuration variables by set id", func() {
mockVariables := []ConfigurationVariable{
{
ScopeId: "a",
Value: "b",
Scope: "c",
Id: "d",
},
}

var variables []ConfigurationVariable

BeforeEach(func() {
httpCall = mockHttpClient.EXPECT().
Get("/configuration", map[string]string{
"setId": id,
}, gomock.Any()).
Do(func(path string, request interface{}, response *[]ConfigurationVariable) {
*response = mockVariables
}).Times(1)

variables, _ = apiClient.ConfigurationVariablesBySetId(id)
})

It("Should return configuration variables", func() {
Expect(variables).To(Equal(mockVariables))
})
})
})
1 change: 1 addition & 0 deletions client/configuration_variable.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const (
ScopeDeployment Scope = "DEPLOYMENT"
ScopeDeploymentLog Scope = "DEPLOYMENT_LOG"
ScopeWorkflow Scope = "WORKFLOW"
ScopeSet Scope = "SET"
)

type Format string
Expand Down
Loading