From 5f98d92737f30fd27406014e01e517d8ee9a6f96 Mon Sep 17 00:00:00 2001 From: Tomer Heber Date: Wed, 6 Apr 2022 10:59:25 -0500 Subject: [PATCH] Feat: add support for agent settings --- client/agent_project_assignment.go | 43 ++++++++ client/agent_project_assignment_test.go | 141 ++++++++++++++++++++++++ client/api_client.go | 2 + client/api_client_mock.go | 30 +++++ 4 files changed, 216 insertions(+) create mode 100644 client/agent_project_assignment.go create mode 100644 client/agent_project_assignment_test.go diff --git a/client/agent_project_assignment.go b/client/agent_project_assignment.go new file mode 100644 index 00000000..25e3a1d8 --- /dev/null +++ b/client/agent_project_assignment.go @@ -0,0 +1,43 @@ +package client + +// Key is project id. +// Value is agent id. +type AssignProjectsAgentsAssignmentsPayload map[string]interface{} + +type ProjectsAgentsAssignments struct { + DefaultAgent string `json:"defaultAgent"` + ProjectsAgents map[string]interface{} `json:"ProjectsAgents"` +} + +func (client *ApiClient) AssignAgentsToProjects(payload AssignProjectsAgentsAssignmentsPayload) (*ProjectsAgentsAssignments, error) { + organizationId, err := client.organizationId() + if err != nil { + return nil, err + } + + var result ProjectsAgentsAssignments + if err := client.http.Post("/agents/projects-assignments?organizationId="+organizationId, payload, &result); err != nil { + return nil, err + } + + return &result, nil +} + +func (client *ApiClient) ProjectsAgentsAssignments() (*ProjectsAgentsAssignments, error) { + organizationId, err := client.organizationId() + if err != nil { + return nil, err + } + + var result ProjectsAgentsAssignments + err = client.http.Get("/agents/projects-assignments", map[string]string{"organizationId": organizationId}, &result) + if err != nil { + return nil, err + } + + return &result, nil +} + +/* + + */ diff --git a/client/agent_project_assignment_test.go b/client/agent_project_assignment_test.go new file mode 100644 index 00000000..3f3c48bd --- /dev/null +++ b/client/agent_project_assignment_test.go @@ -0,0 +1,141 @@ +package client_test + +import ( + "errors" + + . "github.com/env0/terraform-provider-env0/client" + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +// mockOrganizationIdCall(organizationId) + +var _ = Describe("Agent Project Assignment", func() { + psas := map[string]interface{}{ + "pid1": "aid1", + "pid2": "aid2", + } + + expectedResponse := ProjectsAgentsAssignments{ + ProjectsAgents: psas, + } + + errorMock := errors.New("error") + + Describe("AssignAgentsToProjects", func() { + + Describe("Successful", func() { + var actualResult *ProjectsAgentsAssignments + var err error + + BeforeEach(func() { + mockOrganizationIdCall(organizationId) + + httpCall = mockHttpClient.EXPECT(). + Post("/agents/projects-assignments?organizationId="+organizationId, gomock.Any(), gomock.Any()). + Do(func(path string, request interface{}, response *ProjectsAgentsAssignments) { + *response = expectedResponse + }).Times(1) + actualResult, err = apiClient.AssignAgentsToProjects(psas) + + }) + + It("Should get organization id", func() { + organizationIdCall.Times(1) + }) + + It("Should send POST request with params", func() { + httpCall.Times(1) + }) + + It("should return the POST result", func() { + Expect(*actualResult).To(Equal(expectedResponse)) + }) + + It("Should not return error", func() { + Expect(err).To(BeNil()) + }) + }) + + Describe("Failure", func() { + var actualResult *ProjectsAgentsAssignments + var err error + + BeforeEach(func() { + mockOrganizationIdCall(organizationId) + + httpCall = mockHttpClient.EXPECT(). + Post("/agents/projects-assignments?organizationId="+organizationId, gomock.Any(), gomock.Any()). + Return(errorMock) + + actualResult, err = apiClient.AssignAgentsToProjects(psas) + }) + + It("Should fail if API call fails", func() { + Expect(err).To(Equal(errorMock)) + }) + + It("Should not return results", func() { + Expect(actualResult).To(BeNil()) + }) + }) + }) + + Describe("ProjectsAgentsAssignments", func() { + Describe("Successful", func() { + var actualResult *ProjectsAgentsAssignments + var err error + + BeforeEach(func() { + mockOrganizationIdCall(organizationId) + + httpCall = mockHttpClient.EXPECT(). + Get("/agents/projects-assignments", gomock.Any(), gomock.Any()). + Do(func(path string, request interface{}, response *ProjectsAgentsAssignments) { + *response = expectedResponse + }) + actualResult, err = apiClient.ProjectsAgentsAssignments() + }) + + It("Should get organization id", func() { + organizationIdCall.Times(1) + }) + + It("Should send GET request with params", func() { + httpCall.Times(1) + }) + + It("Should return the GET result", func() { + Expect(*actualResult).To(Equal(expectedResponse)) + }) + + It("Should not return error", func() { + Expect(err).To(BeNil()) + }) + }) + + Describe("Failure", func() { + var actualResult *ProjectsAgentsAssignments + var err error + + BeforeEach(func() { + mockOrganizationIdCall(organizationId) + + httpCall = mockHttpClient.EXPECT(). + Get("/agents/projects-assignments", gomock.Any(), gomock.Any()). + Return(errorMock) + + actualResult, err = apiClient.ProjectsAgentsAssignments() + }) + + It("Should fail if API call fails", func() { + Expect(err).To(Equal(errorMock)) + }) + + It("Should not return results", func() { + Expect(actualResult).To(BeNil()) + }) + }) + }) +}) diff --git a/client/api_client.go b/client/api_client.go index a9d9ad0d..d9e62d6c 100644 --- a/client/api_client.go +++ b/client/api_client.go @@ -93,6 +93,8 @@ type ApiClientInterface interface { ApiKeyCreate(payload ApiKeyCreatePayload) (*ApiKey, error) ApiKeyDelete(id string) error ApiKeys() ([]ApiKey, error) + AssignAgentsToProjects(payload AssignProjectsAgentsAssignmentsPayload) (*ProjectsAgentsAssignments, error) + ProjectsAgentsAssignments() (*ProjectsAgentsAssignments, error) } func NewApiClient(client http.HttpClientInterface) ApiClientInterface { diff --git a/client/api_client_mock.go b/client/api_client_mock.go index 4c047a47..f911b0a0 100644 --- a/client/api_client_mock.go +++ b/client/api_client_mock.go @@ -77,6 +77,21 @@ func (mr *MockApiClientInterfaceMockRecorder) ApiKeys() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ApiKeys", reflect.TypeOf((*MockApiClientInterface)(nil).ApiKeys)) } +// AssignAgentsToProjects mocks base method. +func (m *MockApiClientInterface) AssignAgentsToProjects(arg0 AssignProjectsAgentsAssignmentsPayload) (*ProjectsAgentsAssignments, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AssignAgentsToProjects", arg0) + ret0, _ := ret[0].(*ProjectsAgentsAssignments) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// AssignAgentsToProjects indicates an expected call of AssignAgentsToProjects. +func (mr *MockApiClientInterfaceMockRecorder) AssignAgentsToProjects(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AssignAgentsToProjects", reflect.TypeOf((*MockApiClientInterface)(nil).AssignAgentsToProjects), arg0) +} + // AssignCloudCredentialsToProject mocks base method. func (m *MockApiClientInterface) AssignCloudCredentialsToProject(arg0, arg1 string) (CloudCredentialsProjectAssignment, error) { m.ctrl.T.Helper() @@ -909,6 +924,21 @@ func (mr *MockApiClientInterfaceMockRecorder) Projects() *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Projects", reflect.TypeOf((*MockApiClientInterface)(nil).Projects)) } +// ProjectsAgentsAssignments mocks base method. +func (m *MockApiClientInterface) ProjectsAgentsAssignments() (*ProjectsAgentsAssignments, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ProjectsAgentsAssignments") + ret0, _ := ret[0].(*ProjectsAgentsAssignments) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ProjectsAgentsAssignments indicates an expected call of ProjectsAgentsAssignments. +func (mr *MockApiClientInterfaceMockRecorder) ProjectsAgentsAssignments() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ProjectsAgentsAssignments", reflect.TypeOf((*MockApiClientInterface)(nil).ProjectsAgentsAssignments)) +} + // RemoveCloudCredentialsFromProject mocks base method. func (m *MockApiClientInterface) RemoveCloudCredentialsFromProject(arg0, arg1 string) error { m.ctrl.T.Helper()