github.com/abdfnx/gh-api@v0.0.0-20210414084727-f5432eec23b8/internal/config/config_type_test.go (about)

     1  package config
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/MakeNowJust/heredoc"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func Test_fileConfig_Set(t *testing.T) {
    12  	mainBuf := bytes.Buffer{}
    13  	hostsBuf := bytes.Buffer{}
    14  	defer StubWriteConfig(&mainBuf, &hostsBuf)()
    15  
    16  	c := NewBlankConfig()
    17  	assert.NoError(t, c.Set("", "editor", "nano"))
    18  	assert.NoError(t, c.Set("github.com", "git_protocol", "ssh"))
    19  	assert.NoError(t, c.Set("example.com", "editor", "vim"))
    20  	assert.NoError(t, c.Set("github.com", "user", "hubot"))
    21  	assert.NoError(t, c.Write())
    22  
    23  	assert.Contains(t, mainBuf.String(), "editor: nano")
    24  	assert.Contains(t, mainBuf.String(), "git_protocol: https")
    25  	assert.Equal(t, `github.com:
    26      git_protocol: ssh
    27      user: hubot
    28  example.com:
    29      editor: vim
    30  `, hostsBuf.String())
    31  }
    32  
    33  func Test_defaultConfig(t *testing.T) {
    34  	mainBuf := bytes.Buffer{}
    35  	hostsBuf := bytes.Buffer{}
    36  	defer StubWriteConfig(&mainBuf, &hostsBuf)()
    37  
    38  	cfg := NewBlankConfig()
    39  	assert.NoError(t, cfg.Write())
    40  
    41  	expected := heredoc.Doc(`
    42  		# What protocol to use when performing git operations. Supported values: ssh, https
    43  		git_protocol: https
    44  		# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment.
    45  		editor:
    46  		# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled
    47  		prompt: enabled
    48  		# A pager program to send command output to, e.g. "less". Set the value to "cat" to disable the pager.
    49  		pager:
    50  		# Aliases allow you to create nicknames for gh commands
    51  		aliases:
    52  		    co: pr checkout
    53  	`)
    54  	assert.Equal(t, expected, mainBuf.String())
    55  	assert.Equal(t, "", hostsBuf.String())
    56  
    57  	proto, err := cfg.Get("", "git_protocol")
    58  	assert.NoError(t, err)
    59  	assert.Equal(t, "https", proto)
    60  
    61  	editor, err := cfg.Get("", "editor")
    62  	assert.NoError(t, err)
    63  	assert.Equal(t, "", editor)
    64  
    65  	aliases, err := cfg.Aliases()
    66  	assert.NoError(t, err)
    67  	assert.Equal(t, len(aliases.All()), 1)
    68  	expansion, _ := aliases.Get("co")
    69  	assert.Equal(t, expansion, "pr checkout")
    70  }
    71  
    72  func Test_ValidateValue(t *testing.T) {
    73  	err := ValidateValue("git_protocol", "sshpps")
    74  	assert.EqualError(t, err, "invalid value")
    75  
    76  	err = ValidateValue("git_protocol", "ssh")
    77  	assert.NoError(t, err)
    78  
    79  	err = ValidateValue("editor", "vim")
    80  	assert.NoError(t, err)
    81  
    82  	err = ValidateValue("got", "123")
    83  	assert.NoError(t, err)
    84  }
    85  
    86  func Test_ValidateKey(t *testing.T) {
    87  	err := ValidateKey("invalid")
    88  	assert.EqualError(t, err, "invalid key")
    89  
    90  	err = ValidateKey("git_protocol")
    91  	assert.NoError(t, err)
    92  
    93  	err = ValidateKey("editor")
    94  	assert.NoError(t, err)
    95  
    96  	err = ValidateKey("prompt")
    97  	assert.NoError(t, err)
    98  
    99  	err = ValidateKey("pager")
   100  	assert.NoError(t, err)
   101  }