github.com/abdfnx/gh-api@v0.0.0-20210414084727-f5432eec23b8/internal/config/config_file_test.go (about) 1 package config 2 3 import ( 4 "bytes" 5 "fmt" 6 "os" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 "gopkg.in/yaml.v3" 11 ) 12 13 func Test_parseConfig(t *testing.T) { 14 defer StubConfig(`--- 15 hosts: 16 github.com: 17 user: monalisa 18 oauth_token: OTOKEN 19 `, "")() 20 config, err := parseConfig("config.yml") 21 assert.NoError(t, err) 22 user, err := config.Get("github.com", "user") 23 assert.NoError(t, err) 24 assert.Equal(t, "monalisa", user) 25 token, err := config.Get("github.com", "oauth_token") 26 assert.NoError(t, err) 27 assert.Equal(t, "OTOKEN", token) 28 } 29 30 func Test_parseConfig_multipleHosts(t *testing.T) { 31 defer StubConfig(`--- 32 hosts: 33 example.com: 34 user: wronguser 35 oauth_token: NOTTHIS 36 github.com: 37 user: monalisa 38 oauth_token: OTOKEN 39 `, "")() 40 config, err := parseConfig("config.yml") 41 assert.NoError(t, err) 42 user, err := config.Get("github.com", "user") 43 assert.NoError(t, err) 44 assert.Equal(t, "monalisa", user) 45 token, err := config.Get("github.com", "oauth_token") 46 assert.NoError(t, err) 47 assert.Equal(t, "OTOKEN", token) 48 } 49 50 func Test_parseConfig_hostsFile(t *testing.T) { 51 defer StubConfig("", `--- 52 github.com: 53 user: monalisa 54 oauth_token: OTOKEN 55 `)() 56 config, err := parseConfig("config.yml") 57 assert.NoError(t, err) 58 user, err := config.Get("github.com", "user") 59 assert.NoError(t, err) 60 assert.Equal(t, "monalisa", user) 61 token, err := config.Get("github.com", "oauth_token") 62 assert.NoError(t, err) 63 assert.Equal(t, "OTOKEN", token) 64 } 65 66 func Test_parseConfig_hostFallback(t *testing.T) { 67 defer StubConfig(`--- 68 git_protocol: ssh 69 `, `--- 70 github.com: 71 user: monalisa 72 oauth_token: OTOKEN 73 example.com: 74 user: wronguser 75 oauth_token: NOTTHIS 76 git_protocol: https 77 `)() 78 config, err := parseConfig("config.yml") 79 assert.NoError(t, err) 80 val, err := config.Get("example.com", "git_protocol") 81 assert.NoError(t, err) 82 assert.Equal(t, "https", val) 83 val, err = config.Get("github.com", "git_protocol") 84 assert.NoError(t, err) 85 assert.Equal(t, "ssh", val) 86 val, err = config.Get("nonexistent.io", "git_protocol") 87 assert.NoError(t, err) 88 assert.Equal(t, "ssh", val) 89 } 90 91 func Test_parseConfig_migrateConfig(t *testing.T) { 92 defer StubConfig(`--- 93 github.com: 94 - user: keiyuri 95 oauth_token: 123456 96 `, "")() 97 98 mainBuf := bytes.Buffer{} 99 hostsBuf := bytes.Buffer{} 100 defer StubWriteConfig(&mainBuf, &hostsBuf)() 101 defer StubBackupConfig()() 102 103 _, err := parseConfig("config.yml") 104 assert.NoError(t, err) 105 106 expectedHosts := `github.com: 107 user: keiyuri 108 oauth_token: "123456" 109 ` 110 111 assert.Equal(t, expectedHosts, hostsBuf.String()) 112 assert.NotContains(t, mainBuf.String(), "github.com") 113 assert.NotContains(t, mainBuf.String(), "oauth_token") 114 } 115 116 func Test_parseConfigFile(t *testing.T) { 117 tests := []struct { 118 contents string 119 wantsErr bool 120 }{ 121 { 122 contents: "", 123 wantsErr: true, 124 }, 125 { 126 contents: " ", 127 wantsErr: false, 128 }, 129 { 130 contents: "\n", 131 wantsErr: false, 132 }, 133 } 134 135 for _, tt := range tests { 136 t.Run(fmt.Sprintf("contents: %q", tt.contents), func(t *testing.T) { 137 defer StubConfig(tt.contents, "")() 138 _, yamlRoot, err := parseConfigFile("config.yml") 139 if tt.wantsErr != (err != nil) { 140 t.Fatalf("got error: %v", err) 141 } 142 if tt.wantsErr { 143 return 144 } 145 assert.Equal(t, yaml.MappingNode, yamlRoot.Content[0].Kind) 146 assert.Equal(t, 0, len(yamlRoot.Content[0].Content)) 147 }) 148 } 149 } 150 151 func Test_ConfigDir(t *testing.T) { 152 tests := []struct { 153 envVar string 154 want string 155 }{ 156 {"/tmp/gh", ".tmp.gh"}, 157 {"", ".config.gh"}, 158 } 159 160 for _, tt := range tests { 161 t.Run(fmt.Sprintf("envVar: %q", tt.envVar), func(t *testing.T) { 162 if tt.envVar != "" { 163 os.Setenv(GH_CONFIG_DIR, tt.envVar) 164 defer os.Unsetenv(GH_CONFIG_DIR) 165 } 166 assert.Regexp(t, tt.want, ConfigDir()) 167 }) 168 } 169 }