diff --git a/pkg/retention/retention_policy.go b/pkg/retention/retention_policy.go index 1e5873cb..23cd97d8 100644 --- a/pkg/retention/retention_policy.go +++ b/pkg/retention/retention_policy.go @@ -5,6 +5,7 @@ type RetentionType string const ( LifecycleReleaseRetentionType = RetentionType("LifecycleRelease") LifecycleTentacleRetentionType = RetentionType("LifecycleTentacle") + RunbookRetentionType = RetentionType("RunbookRetention") ) const ( diff --git a/pkg/retention/space_default_runbook_retention_policy.go b/pkg/retention/space_default_runbook_retention_policy.go new file mode 100644 index 00000000..d9625f42 --- /dev/null +++ b/pkg/retention/space_default_runbook_retention_policy.go @@ -0,0 +1,40 @@ +package retention + +import "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/resources" + +type RunbookRetentionPolicy struct { + QuantityToKeep int `json:"QuantityToKeep"` + Strategy string `json:"Strategy"` + Unit string `json:"Unit"` + SpaceDefaultRetentionPolicy +} + +func NewCountBasedRunbookRetentionPolicy(quantityToKeep int, unit string, spaceId string, policyId string) *RunbookRetentionPolicy { + return &RunbookRetentionPolicy{ + QuantityToKeep: quantityToKeep, + Strategy: RetentionStrategyCount, + Unit: unit, + SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{ + SpaceId: spaceId, + RetentionType: RunbookRetentionType, + Resource: resources.Resource{ + ID: policyId, + }, + }, + } +} + +func NewKeepForeverRunbookRetentionPolicy(spaceId string, policyId string) *RunbookRetentionPolicy { + return &RunbookRetentionPolicy{ + QuantityToKeep: 0, + Strategy: RetentionStrategyForever, + Unit: RetentionUnitItems, + SpaceDefaultRetentionPolicy: SpaceDefaultRetentionPolicy{ + SpaceId: spaceId, + RetentionType: RunbookRetentionType, + Resource: resources.Resource{ + ID: policyId, + }, + }, + } +} diff --git a/test/e2e/space_default_retention_policy_service_test.go b/test/e2e/space_default_retention_policy_service_test.go index 48a25856..dcc5d62a 100644 --- a/test/e2e/space_default_retention_policy_service_test.go +++ b/test/e2e/space_default_retention_policy_service_test.go @@ -1,10 +1,11 @@ package e2e import ( + "testing" + "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/retention" "github.com/OctopusDeploy/go-octopusdeploy/v2/pkg/spaces" "github.com/stretchr/testify/require" - "testing" ) func TestReadLifecycleReleaseRetentionDefaultPolicy(t *testing.T) { @@ -39,6 +40,22 @@ func TestReadLifecycleTentacleRetentionDefaultPolicy(t *testing.T) { require.Equal(t, res.RetentionType, retention.LifecycleTentacleRetentionType) } +func TestReadRunbookRetentionDefaultPolicy(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + + defaultSpace, _ := spaces.GetDefaultSpace(client) + query := retention.SpaceDefaultRetentionPolicyQuery{ + RetentionType: retention.RunbookRetentionType, + SpaceID: defaultSpace.ID, + } + res, err := retention.Get(client, query) + + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.RetentionType, retention.RunbookRetentionType) +} + func TestModifyLifecycleReleaseRetentionDefaultPolicy(t *testing.T) { client := getOctopusClient() require.NotNil(t, client) @@ -83,3 +100,46 @@ func TestModifyLifecycleTentacleRetentionDefaultPolicy(t *testing.T) { require.Equal(t, res.Strategy, retention.RetentionStrategyCount) require.Equal(t, res.Unit, retention.RetentionUnitDays) } + +func TestModifyRunbookRetentionDefaultPolicyUsingCount(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + defaultSpace, _ := spaces.GetDefaultSpace(client) + query := retention.SpaceDefaultRetentionPolicyQuery{ + RetentionType: retention.RunbookRetentionType, + SpaceID: defaultSpace.ID, + } + defaultSpaceRunbookPolicy, err := retention.Get(client, query) + if err != nil { + t.Fatal(err) + } + + policy := retention.NewCountBasedRunbookRetentionPolicy(3, retention.RetentionUnitDays, defaultSpace.ID, defaultSpaceRunbookPolicy.ID) + res, err := retention.Update(client, policy) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.QuantityToKeep, 3) + require.Equal(t, res.Strategy, retention.RetentionStrategyCount) + require.Equal(t, res.Unit, retention.RetentionUnitDays) +} + +func TestModifyRunbookRetentionDefaultPolicyUsingForever(t *testing.T) { + client := getOctopusClient() + require.NotNil(t, client) + defaultSpace, _ := spaces.GetDefaultSpace(client) + query := retention.SpaceDefaultRetentionPolicyQuery{ + RetentionType: retention.RunbookRetentionType, + SpaceID: defaultSpace.ID, + } + defaultSpaceRunbookPolicy, err := retention.Get(client, query) + if err != nil { + t.Fatal(err) + } + + policy := retention.NewKeepForeverRunbookRetentionPolicy(defaultSpace.ID, defaultSpaceRunbookPolicy.ID) + res, err := retention.Update(client, policy) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, res.QuantityToKeep, 0) + require.Equal(t, res.Strategy, retention.RetentionStrategyForever) +}