Refactor Test_readGitBranchConfig for easier parsing

This commit is contained in:
Tyler McGoffin 2025-01-07 14:56:27 -08:00
parent c83cf32cff
commit 0137150848
2 changed files with 43 additions and 29 deletions

View file

@ -388,23 +388,23 @@ func (c *Client) ReadBranchConfig(ctx context.Context, branch string) (BranchCon
return cfg, err
}
return c.createBranchConfig(outputLines(branchConfigOutput)), nil
return c.createBranchConfig(branchConfigOutput), nil
}
func (c *Client) readGitBranchConfig(ctx context.Context, branch string) ([]byte, error) {
func (c *Client) readGitBranchConfig(ctx context.Context, branch string) ([]string, error) {
prefix := regexp.QuoteMeta(fmt.Sprintf("branch.%s.", branch))
args := []string{"config", "--get-regexp", fmt.Sprintf("^%s(remote|merge|%s)$", prefix, MergeBaseConfig)}
cmd, err := c.Command(ctx, args...)
if err != nil {
return []byte{}, err
return []string{}, err
}
out, err := cmd.Output()
if err != nil {
return []byte{}, err
return []string{}, err
}
return out, nil
return outputLines(out), nil
}
func (c *Client) createBranchConfig(gitBranchConfigOutput []string) BranchConfig {

View file

@ -756,43 +756,57 @@ func TestClientReadBranchConfig(t *testing.T) {
func Test_readGitBranchConfig(t *testing.T) {
tests := []struct {
name string
branch string
cmdExitCode int
cmdStdout string
cmdStderr string
wantCmdArgs string
wantErr *GitError
name string
branch string
cmdExitStatus int
cmdStdout string
cmdStderr string
expectedOutput []string
expectedError *GitError
}{
{
name: "read branch config",
branch: "trunk",
cmdStdout: "branch.trunk.remote origin\nbranch.trunk.merge refs/heads/trunk\nbranch.trunk.gh-merge-base trunk",
wantCmdArgs: `path/to/git config --get-regexp ^branch\.trunk\.(remote|merge|gh-merge-base)$`,
name: "read branch config",
branch: "trunk",
cmdExitStatus: 0,
cmdStdout: "branch.trunk.remote origin\nbranch.trunk.merge refs/heads/trunk\nbranch.trunk.gh-merge-base trunk",
expectedOutput: []string{
"branch.trunk.remote origin",
"branch.trunk.merge refs/heads/trunk",
"branch.trunk.gh-merge-base trunk"},
expectedError: nil,
},
{
name: "command failure",
branch: "trunk",
wantCmdArgs: `path/to/git config --get-regexp ^branch\.trunk\.(remote|merge|gh-merge-base)$`,
cmdExitCode: 1,
cmdStderr: "error",
wantErr: &GitError{ExitCode: 1, Stderr: "error"},
name: "command failure",
branch: "trunk",
cmdExitStatus: 1,
cmdStderr: "git error message",
expectedOutput: []string{},
expectedError: &GitError{
ExitCode: 1,
Stderr: "git error message",
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
cmd, cmdCtx := createCommandContext(t, tt.cmdExitCode, tt.cmdStdout, tt.cmdStderr)
commandString := fmt.Sprintf("path/to/git config --get-regexp ^branch\\.%s\\.(remote|merge|gh-merge-base)$", tt.branch)
cmdCtx := createMockedCommandContext(t, map[args]commandResult{
args(commandString): {
ExitStatus: tt.cmdExitStatus,
Stdout: tt.cmdStdout,
Stderr: tt.cmdStderr,
},
})
client := Client{
GitPath: "path/to/git",
commandContext: cmdCtx,
}
out, err := client.readGitBranchConfig(context.Background(), tt.branch)
if tt.wantErr != nil {
assert.Equal(t, tt.wantErr.ExitCode, err.(*GitError).ExitCode)
assert.Equal(t, tt.wantErr.Stderr, err.(*GitError).Stderr)
} else {
assert.Equal(t, tt.wantCmdArgs, strings.Join(cmd.Args[3:], " "))
assert.Equal(t, tt.cmdStdout, string(out))
assert.Equal(t, tt.expectedOutput, out)
if err != nil {
assert.Equal(t, tt.cmdStderr, err.(*GitError).Stderr)
assert.Equal(t, tt.cmdExitStatus, err.(*GitError).ExitCode)
}
})
}