diff --git a/pkg/projects/git_persistence_settings.go b/pkg/projects/git_persistence_settings.go index 717485ab..8e149b83 100644 --- a/pkg/projects/git_persistence_settings.go +++ b/pkg/projects/git_persistence_settings.go @@ -25,7 +25,7 @@ type GitPersistenceSettings interface { Credential() credentials.GitCredential SetCredential(credential credentials.GitCredential) - ConversionState() gitPersistenceSettingsConversionState + VariablesAreInGit() bool RunbooksAreInGit() bool // Deprecated: This is not settable against a real Octopus project it is only used for testing purposes. @@ -114,8 +114,8 @@ func (g *gitPersistenceSettings) SetCredential(credential credentials.GitCredent g.credential = credential } -func (g *gitPersistenceSettings) ConversionState() gitPersistenceSettingsConversionState { - return g.conversionState +func (g *gitPersistenceSettings) VariablesAreInGit() bool { + return g.conversionState.VariablesAreInGit } func (g *gitPersistenceSettings) RunbooksAreInGit() bool { @@ -138,14 +138,14 @@ func (p *gitPersistenceSettings) MarshalJSON() ([]byte, error) { } persistenceSettings := struct { - BasePath string `json:"BasePath,omitempty"` - Credentials credentials.GitCredential `json:"Credentials,omitempty"` - DefaultBranch string `json:"DefaultBranch,omitempty"` - IsDefaultBranchProtected bool `json:"ProtectedDefaultBranch"` - ProtectedBranchNamePatterns []string `json:"ProtectedBranchNamePatterns"` - URL string `json:"Url,omitempty"` - Type PersistenceSettingsType `json:"Type,omitempty"` - ConversionState gitPersistenceSettingsConversionState `json:"ConversionState,omitempty"` + BasePath string `json:"BasePath,omitempty"` + Credentials credentials.GitCredential `json:"Credentials,omitempty"` + DefaultBranch string `json:"DefaultBranch,omitempty"` + IsDefaultBranchProtected bool `json:"ProtectedDefaultBranch"` + ProtectedBranchNamePatterns []string `json:"ProtectedBranchNamePatterns"` + URL string `json:"Url,omitempty"` + Type PersistenceSettingsType `json:"Type,omitempty"` + ConversionState map[string]interface{} `json:"ConversionState,omitempty"` }{ BasePath: p.BasePath(), Credentials: p.Credential(), @@ -154,7 +154,10 @@ func (p *gitPersistenceSettings) MarshalJSON() ([]byte, error) { ProtectedBranchNamePatterns: protectedBranches, URL: p.URL().String(), Type: p.Type(), - ConversionState: p.ConversionState(), + ConversionState: map[string]interface{}{ + "VariablesAreInGit": p.conversionState.VariablesAreInGit, + "RunbooksAreInGit": p.conversionState.RunbooksAreInGit, + }, } return json.Marshal(persistenceSettings) diff --git a/pkg/projects/git_persistence_settings_test.go b/pkg/projects/git_persistence_settings_test.go index f433dc6b..3acb6377 100644 --- a/pkg/projects/git_persistence_settings_test.go +++ b/pkg/projects/git_persistence_settings_test.go @@ -88,7 +88,11 @@ func TestGitPersistenceSettingsMarshalJSONWithProtectedDefaultBranch(t *testing. "ProtectedBranchNamePatterns": [], "ProtectedDefaultBranch": true, "Type": "%s", - "Url": "%s" + "Url": "%s", + "ConversionState": { + "VariablesAreInGit": false, + "RunbooksAreInGit": false + } }`, basePath, gitCredentialsAsJSON, defaultBranch, projects.PersistenceSettingsTypeVersionControlled, url.String()) gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url) @@ -121,7 +125,11 @@ func TestGitPersistenceSettingsMarshalJSONWithProtectedDefaultBranchAsLastItem(t "ProtectedBranchNamePatterns": ["foo"], "ProtectedDefaultBranch": true, "Type": "%s", - "Url": "%s" + "Url": "%s", + "ConversionState": { + "VariablesAreInGit": false, + "RunbooksAreInGit": false + } }`, basePath, gitCredentialsAsJSON, defaultBranch, projects.PersistenceSettingsTypeVersionControlled, url.String()) gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url) @@ -155,7 +163,11 @@ func TestGitPersistenceSettingsMarshalJSONWithoutProtectedDefaultBranch(t *testi "ProtectedBranchNamePatterns": ["%s"], "ProtectedDefaultBranch": false, "Type": "%s", - "Url": "%s" + "Url": "%s", + "ConversionState": { + "VariablesAreInGit": false, + "RunbooksAreInGit": false + } }`, basePath, gitCredentialsAsJSON, defaultBranch, protectedBranchName, projects.PersistenceSettingsTypeVersionControlled, url.String()) gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url) @@ -341,3 +353,39 @@ func TestGitPersistenceSettingsUnmarshalJSONWithProtectedBranchIsDefault(t *test require.Equal(t, url, gitPersistenceSettings.URL()) require.Equal(t, []string{defaultBranch}, gitPersistenceSettings.ProtectedBranchNamePatterns()) } + +func TestGitPersistenceSettingsUnmarshalJSON_ConversionState(t *testing.T) { + password := core.NewSensitiveValue(internal.GetRandomName()) + username := internal.GetRandomName() + + basePath := internal.GetRandomName() + defaultBranch := internal.GetRandomName() + url, err := url.Parse("https://example.com/") + usernamePasswordGitCredential := credentials.NewUsernamePassword(username, password) + require.NoError(t, err) + + gitCredentialsAsJSON, err := json.Marshal(usernamePasswordGitCredential) + require.NoError(t, err) + require.NotNil(t, gitCredentialsAsJSON) + + inputJSON := fmt.Sprintf(`{ + "BasePath": "%s", + "Credentials": %s, + "DefaultBranch": "%s", + "ProtectedBranchNamePatterns": [], + "ProtectedDefaultBranch": false, + "Type": "%s", + "Url": "%s", + "ConversionState": { + "VariablesAreInGit": true, + "RunbooksAreInGit": true + } + }`, basePath, gitCredentialsAsJSON, defaultBranch, projects.PersistenceSettingsTypeVersionControlled, url.String()) + + gitPersistenceSettings := projects.NewGitPersistenceSettings("", nil, "", []string{}, nil) + err = json.Unmarshal([]byte(inputJSON), &gitPersistenceSettings) + require.NoError(t, err) + require.NotNil(t, gitPersistenceSettings) + require.Equal(t, true, gitPersistenceSettings.VariablesAreInGit()) + require.Equal(t, true, gitPersistenceSettings.RunbooksAreInGit()) +}