diff --git a/pkg/environments/v2/ephemeralenvironments/ephemeral_environment_service.go b/pkg/environments/v2/ephemeralenvironments/ephemeral_environment_service.go index ff30d07e..98fe891c 100644 --- a/pkg/environments/v2/ephemeralenvironments/ephemeral_environment_service.go +++ b/pkg/environments/v2/ephemeralenvironments/ephemeral_environment_service.go @@ -29,11 +29,16 @@ type CreateEnvironmentCommand struct { ProjectID string `uri:"projectId"` } -type DeprovisionEphemeralEnvironmentProjectCommand struct { -} +type DeprovisionEphemeralEnvironmentProjectCommand struct{} type DeprovisionEphemeralEnvironmentProjectResponse struct { - DeprovisioningRun DeprovisioningRunbookRun `json:"DeprovisioningRunbookRuns"` + DeprovisioningRun DeprovisioningRunbookRun `json:"DeprovisioningRun"` +} + +type DeprovisionEphemeralEnvironmentCommand struct{} + +type DeprovisionEphemeralEnvironmentResponse struct { + DeprovisioningRuns []DeprovisioningRunbookRun `json:"DeprovisioningRuns"` } type DeprovisioningRunbookRun struct { @@ -75,3 +80,18 @@ func DeprovisionForProject(client newclient.Client, spaceID string, environmentI return newclient.Add[DeprovisionEphemeralEnvironmentProjectResponse](client, path, spaceID, body) } + +func Deprovision(client newclient.Client, spaceID string, environmentId string) (*DeprovisionEphemeralEnvironmentResponse, error) { + body := &DeprovisionEphemeralEnvironmentCommand{} + + path, err := client.URITemplateCache().Expand(v2.DeprovisionEphemeralEnvironmentTemplate, map[string]any{ + "id": environmentId, + "spaceId": spaceID, + }) + + if err != nil { + return nil, err + } + + return newclient.Add[DeprovisionEphemeralEnvironmentResponse](client, path, spaceID, body) +} diff --git a/pkg/environments/v2/route.go b/pkg/environments/v2/route.go index 579888d5..fdc811ad 100644 --- a/pkg/environments/v2/route.go +++ b/pkg/environments/v2/route.go @@ -3,3 +3,4 @@ package v2 const Template = "/api/{spaceId}/environments/v2{/id}{?name,skip,ids,take,partialName,type}" const CreateEphemeralEnvironmentTemplate = "/api/{spaceId}/projects/{projectId}/environments/ephemeral" const DeprovisionEphemeralEnvironmentForProjectTemplate = "/api/{spaceId}/projects/{projectId}/environments/ephemeral/{id}/deprovision" +const DeprovisionEphemeralEnvironmentTemplate = "/api/{spaceId}/environments/ephemeral/{id}/deprovision" diff --git a/test/e2e/ephemeral_environment_service_test.go b/test/e2e/ephemeral_environment_service_test.go index 7105ccb8..2ca8cb2f 100644 --- a/test/e2e/ephemeral_environment_service_test.go +++ b/test/e2e/ephemeral_environment_service_test.go @@ -38,7 +38,7 @@ func TestEnvironmentServiceCreateEphemeralEnvironment(t *testing.T) { defer DeleteTestChannel(t, client, ephemeralChannel) createdEnvironmentId := CreateEphemeralEnvironment(t, client, project) - // defer DeleteTestEnvironment_NewClient(t, client, createdEnvironment) + defer DeprovisionEphemeralEnvironment(t, client, &createdEnvironmentId) environments, err := ephemeralenvironments.GetAll(client, client.GetSpaceID()) require.NoError(t, err) @@ -48,6 +48,46 @@ func TestEnvironmentServiceCreateEphemeralEnvironment(t *testing.T) { require.Equal(t, createdEnvironmentId, environments.Items[0].ID) } +func TestEnvironmentServiceDeprovisionEphemeralEnvironment(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + + space := GetDefaultSpace(t, client) + require.NotNil(t, space) + + lifecycle := CreateTestLifecycle(t, client) + require.NotNil(t, lifecycle) + defer DeleteTestLifecycle(t, client, lifecycle) + + projectGroup := CreateTestProjectGroup(t, client) + require.NotNil(t, projectGroup) + defer DeleteTestProjectGroup(t, client, projectGroup) + + project := CreateTestProject(t, client, space, lifecycle, projectGroup) + require.NotNil(t, project) + defer DeleteTestProject(t, client, project) + + runbook := CreateTestRunbook(t, client, lifecycle, projectGroup, project) + require.NotNil(t, runbook) + defer DeleteTestRunbook(t, client, runbook) + + parentEnvironment := CreateParentEnvironment(t, client) + require.NotNil(t, parentEnvironment) + defer DeleteParentEnvironment(t, client, parentEnvironment) + + ephemeralChannel := CreateEphemeralTestChannel(t, client, project, parentEnvironment) + require.NotNil(t, ephemeralChannel) + defer DeleteTestChannel(t, client, ephemeralChannel) + + createdEnvironmentId := CreateEphemeralEnvironment(t, client, project) + + DeprovisionEphemeralEnvironment(t, client, &createdEnvironmentId) + + environments, err := ephemeralenvironments.GetAll(client, client.GetSpaceID()) + require.NoError(t, err) + require.NotNil(t, environments) +} + func TestEnvironmentServiceDeprovisionEphemeralEnvironmentForProject(t *testing.T) { client := getOctopusClient() require.NotNil(t, client) @@ -115,3 +155,16 @@ func DeprovisionEphemeralEnvironmentForProject(t *testing.T, client *client.Clie return deprovisionResponse.DeprovisioningRun } + +func DeprovisionEphemeralEnvironment(t *testing.T, client *client.Client, environmentId *string) []ephemeralenvironments.DeprovisioningRunbookRun { + if client == nil { + client = getOctopusClient() + } + require.NotNil(t, client) + + deprovisionResponse, err := ephemeralenvironments.Deprovision(client, client.GetSpaceID(), *environmentId) + require.NoError(t, err) + require.NotNil(t, deprovisionResponse) + + return deprovisionResponse.DeprovisioningRuns +}