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 }