Skip to content

Commit

Permalink
chore: support initial commit branch and protected default branch (#173)
Browse files Browse the repository at this point in the history
  • Loading branch information
benPearce1 committed Dec 8, 2022
1 parent d7aa282 commit a475ac7
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 15 deletions.
12 changes: 7 additions & 5 deletions pkg/projects/convert_to_vcs.go
@@ -1,13 +1,15 @@
package projects

type ConvertToVcs struct {
CommitMessage string
VersionControlSettings GitPersistenceSettings
CommitMessage string `json:"CommitMessage"`
VersionControlSettings GitPersistenceSettings `json:"VersionControlSettings"`
InitialCommitBranchName string `json:"InitialCommitBranchName"`
}

func NewConvertToVcs(commitMessage string, gitPersistenceSettings GitPersistenceSettings) *ConvertToVcs {
func NewConvertToVcs(commitMessage string, initialCommitBranchName string, gitPersistenceSettings GitPersistenceSettings) *ConvertToVcs {
return &ConvertToVcs{
CommitMessage: commitMessage,
VersionControlSettings: gitPersistenceSettings,
CommitMessage: commitMessage,
VersionControlSettings: gitPersistenceSettings,
InitialCommitBranchName: initialCommitBranchName,
}
}
19 changes: 19 additions & 0 deletions pkg/projects/git_persistence_settings.go
Expand Up @@ -15,6 +15,9 @@ type GitPersistenceSettings interface {
DefaultBranch() string
SetDefaultBranch(defaultBranch string)

ProtectedDefaultBranch() bool
SetProtectedDefaultBranch(isProtected bool)

ProtectedBranchNamePatterns() []string
SetProtectedBranchNamePatterns(protectedBranchNamePatterns []string)

Expand All @@ -33,6 +36,7 @@ type gitPersistenceSettings struct {
conversionState *ConversionState
credential credentials.GitCredential
defaultBranch string
protectedDefaultBranch bool
protectedBranchNamePatterns []string
url *url.URL

Expand All @@ -44,14 +48,17 @@ func NewGitPersistenceSettings(
basePath string,
credentials credentials.GitCredential,
defaultBranch string,
protectedDefaultBranch bool,
protectedBranchNamePatterns []string,
url *url.URL) GitPersistenceSettings {
return &gitPersistenceSettings{
basePath: basePath,
credential: credentials,
defaultBranch: defaultBranch,
protectedDefaultBranch: protectedDefaultBranch,
protectedBranchNamePatterns: protectedBranchNamePatterns,
url: url,
conversionState: NewConversionState(false),
persistenceSettings: persistenceSettings{SettingsType: PersistenceSettingsTypeVersionControlled},
}
}
Expand All @@ -73,6 +80,14 @@ func (g *gitPersistenceSettings) DefaultBranch() string {
return g.defaultBranch
}

func (g *gitPersistenceSettings) ProtectedDefaultBranch() bool {
return g.protectedDefaultBranch
}

func (g *gitPersistenceSettings) SetProtectedDefaultBranch(isProtected bool) {
g.protectedDefaultBranch = isProtected
}

func (g *gitPersistenceSettings) SetDefaultBranch(defaultBranch string) {
g.defaultBranch = defaultBranch
}
Expand Down Expand Up @@ -108,6 +123,7 @@ func (p *gitPersistenceSettings) MarshalJSON() ([]byte, error) {
ConversionState *ConversionState `json:"ConversionState,omitempty"`
Credentials credentials.GitCredential `json:"Credentials,omitempty"`
DefaultBranch string `json:"DefaultBranch,omitempty"`
ProtectedDefaultBranch bool `json:"ProtectedDefaultBranch"`
ProtectedBranchNamePatterns []string `json:"ProtectedBranchNamePatterns"`
URL string `json:"Url,omitempty"`
Type PersistenceSettingsType `json:"Type,omitempty"`
Expand All @@ -116,6 +132,7 @@ func (p *gitPersistenceSettings) MarshalJSON() ([]byte, error) {
ConversionState: p.conversionState,
Credentials: p.credential,
DefaultBranch: p.defaultBranch,
ProtectedDefaultBranch: p.protectedDefaultBranch,
ProtectedBranchNamePatterns: p.protectedBranchNamePatterns,
URL: p.url.String(),
Type: p.persistenceSettings.SettingsType,
Expand All @@ -130,6 +147,7 @@ func (p *gitPersistenceSettings) UnmarshalJSON(b []byte) error {
BasePath string `json:"BasePath,omitempty"`
ConversionState *ConversionState `json:"ConversionState,omitempty"`
DefaultBranch string `json:"DefaultBranch,omitempty"`
ProtectedDefaultBranch bool `json:"ProtectedDefaultBranch"`
ProtectedBranchNamePatterns []string `json:"ProtectedBranchNamePatterns"`
URL string `json:"Url,omitempty"`
Type PersistenceSettingsType `json:"Type"`
Expand All @@ -156,6 +174,7 @@ func (p *gitPersistenceSettings) UnmarshalJSON(b []byte) error {
p.basePath = fields.BasePath
p.conversionState = fields.ConversionState
p.defaultBranch = fields.DefaultBranch
p.protectedDefaultBranch = fields.ProtectedDefaultBranch
p.protectedBranchNamePatterns = fields.ProtectedBranchNamePatterns
p.SettingsType = fields.Type
p.url = url
Expand Down
18 changes: 12 additions & 6 deletions pkg/projects/git_persistence_settings_test.go
Expand Up @@ -21,7 +21,7 @@ func TestGitPersistenceSettingsNew(t *testing.T) {
var protectedBranchNamePatterns []string
var url *url.URL

gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url)
gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, false, protectedBranchNamePatterns, url)
require.NotNil(t, gitPersistenceSettings)
require.Equal(t, projects.PersistenceSettingsTypeVersionControlled, gitPersistenceSettings.Type())
require.Equal(t, basePath, gitPersistenceSettings.BasePath())
Expand All @@ -37,7 +37,7 @@ func TestGitPersistenceSettingsNew(t *testing.T) {
url, err := url.Parse("https://example.com/")
require.NoError(t, err)

gitPersistenceSettings = projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url)
gitPersistenceSettings = projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, false, protectedBranchNamePatterns, url)
require.NotNil(t, gitPersistenceSettings)
require.Equal(t, projects.PersistenceSettingsTypeVersionControlled, gitPersistenceSettings.Type())
require.Equal(t, basePath, gitPersistenceSettings.BasePath())
Expand All @@ -56,7 +56,7 @@ func TestGitPersistenceSettingsNew(t *testing.T) {
url, err = url.Parse("https://example.com/")
require.NoError(t, err)

gitPersistenceSettings = projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url)
gitPersistenceSettings = projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, false, protectedBranchNamePatterns, url)
require.NotNil(t, gitPersistenceSettings)
require.Equal(t, projects.PersistenceSettingsTypeVersionControlled, gitPersistenceSettings.Type())
require.Equal(t, basePath, gitPersistenceSettings.BasePath())
Expand All @@ -81,16 +81,22 @@ func TestGitPersistenceSettingsMarshalJSON(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, gitCredentialsAsJSON)

conversionStateAsJSON, err := json.Marshal(&projects.ConversionState{VariablesAreInGit: false})
require.NoError(t, err)
require.NotNil(t, conversionStateAsJSON)

expectedJson := fmt.Sprintf(`{
"BasePath": "%s",
"ConversionState": %s,
"Credentials": %s,
"DefaultBranch": "%s",
"ProtectedBranchNamePatterns": [],
"ProtectedDefaultBranch": true,
"Type": "%s",
"Url": "%s"
}`, basePath, gitCredentialsAsJSON, defaultBranch, projects.PersistenceSettingsTypeVersionControlled, url.String())
}`, basePath, conversionStateAsJSON, gitCredentialsAsJSON, defaultBranch, projects.PersistenceSettingsTypeVersionControlled, url.String())

gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, protectedBranchNamePatterns, url)
gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, gitCredentials, defaultBranch, true, protectedBranchNamePatterns, url)
gitPersistenceSettingsAsJSON, err := json.Marshal(gitPersistenceSettings)
require.NoError(t, err)
require.NotNil(t, gitPersistenceSettingsAsJSON)
Expand All @@ -112,7 +118,7 @@ func TestGitPersistenceSettingsUnmarshalJSON(t *testing.T) {
"Type": "%s"
}`, projects.PersistenceSettingsTypeVersionControlled)

gitPersistenceSettings := projects.NewGitPersistenceSettings("", nil, "", []string{}, nil)
gitPersistenceSettings := projects.NewGitPersistenceSettings("", nil, "", false, []string{}, nil)
err = json.Unmarshal([]byte(inputJSON), gitPersistenceSettings)
require.NoError(t, err)
require.NotNil(t, gitPersistenceSettings)
Expand Down
4 changes: 2 additions & 2 deletions pkg/projects/project_service.go
Expand Up @@ -65,7 +65,7 @@ func (s *ProjectService) Add(project *Project) (*Project, error) {
}

// ConvertToVcs converts an input project to use a version-control system (VCS) for its persistence.
func (s *ProjectService) ConvertToVcs(project *Project, commitMessage string, gitPersistenceSettings GitPersistenceSettings) (*Project, error) {
func (s *ProjectService) ConvertToVcs(project *Project, commitMessage string, initalCommitBranch string, gitPersistenceSettings GitPersistenceSettings) (*Project, error) {
if project == nil {
return nil, internal.CreateInvalidParameterError("ConvertToVcs", "project")
}
Expand All @@ -82,7 +82,7 @@ func (s *ProjectService) ConvertToVcs(project *Project, commitMessage string, gi
return nil, fmt.Errorf("the state of the input project is not valid; cannot resolve ConvertToVcs link")
}

convertToVcs := NewConvertToVcs(commitMessage, gitPersistenceSettings)
convertToVcs := NewConvertToVcs(commitMessage, initalCommitBranch, gitPersistenceSettings)
_, err := services.ApiAddWithResponseStatus(s.GetClient(), convertToVcs, new(ConvertToVcsResponse), project.Links["ConvertToVcs"], http.StatusOK)
if err != nil {
return nil, err
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/project_service_test.go
Expand Up @@ -130,7 +130,7 @@ func TestProjectAddWithPersistenceSettings(t *testing.T) {
url, err := url.Parse("https://example.com/")
require.NoError(t, err)

project.PersistenceSettings = projects.NewGitPersistenceSettings(basePath, credentials, defaultBranch, protectedBranchNamePatterns, url)
project.PersistenceSettings = projects.NewGitPersistenceSettings(basePath, credentials, defaultBranch, false, protectedBranchNamePatterns, url)

createdProject, err := client.Projects.Add(project)
require.NoError(t, err)
Expand Down
3 changes: 2 additions & 1 deletion test/resources/project_test.go
Expand Up @@ -112,7 +112,7 @@ func TestProjectUnmarshalJSON(t *testing.T) {
url, err := url.Parse("https://example.com/")
require.NoError(t, err)

gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, credentials, defaultBranch, protectedBranchNamePatterns, url)
gitPersistenceSettings := projects.NewGitPersistenceSettings(basePath, credentials, defaultBranch, true, protectedBranchNamePatterns, url)
gitPersistenceSettingsAsJSON, err := json.Marshal(gitPersistenceSettings)
require.NoError(t, err)
require.NotNil(t, gitPersistenceSettingsAsJSON)
Expand All @@ -132,4 +132,5 @@ func TestProjectUnmarshalJSON(t *testing.T) {
require.Equal(t, projectGroupID, project.ProjectGroupID)
require.Equal(t, gitPersistenceSettings.Type(), project.PersistenceSettings.Type())
require.Equal(t, gitPersistenceSettings.Credential().Type(), project.PersistenceSettings.(projects.GitPersistenceSettings).Credential().Type())
require.Equal(t, gitPersistenceSettings.ProtectedDefaultBranch(), true)
}

0 comments on commit a475ac7

Please sign in to comment.