From e185344b4f41df4fabf2ccfa94e490bdc695b5d7 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Wed, 3 Apr 2019 16:51:44 +0200 Subject: [PATCH] Add tests for config --- config.go | 6 ++- config_test.go | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 1 deletion(-) create mode 100644 config_test.go diff --git a/config.go b/config.go index 3bd2c71..6870060 100644 --- a/config.go +++ b/config.go @@ -24,7 +24,7 @@ func init() { appConfig.dbPath = dbPath() appConfig.statsUsername = statsUsername() appConfig.statsPassword = statsPassword() - appConfig.statsAuth = len(appConfig.statsUsername) > 0 && len(appConfig.statsPassword) > 0 + appConfig.statsAuth = statsAuth(appConfig) } func port() string { @@ -62,3 +62,7 @@ func statsPassword() (password string) { password = os.Getenv("STATS_PASSWORD") return } + +func statsAuth(ac *config) bool { + return len(ac.statsUsername) > 0 && len(ac.statsPassword) > 0 +} diff --git a/config_test.go b/config_test.go new file mode 100644 index 0000000..b528e42 --- /dev/null +++ b/config_test.go @@ -0,0 +1,132 @@ +package main + +import ( + "os" + "testing" +) + +func Test_port(t *testing.T) { + tests := []struct { + name string + envVar string + want string + }{ + {name: "default", envVar: "", want: "8080"}, + {name: "custom", envVar: "1234", want: "1234"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _ = os.Setenv("PORT", tt.envVar) + if got := port(); got != tt.want { + t.Errorf("port() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_dnt(t *testing.T) { + tests := []struct { + name string + envVar string + want bool + }{ + {name: "default", envVar: "", want: true}, + {envVar: "true", want: true}, + {envVar: "t", want: true}, + {envVar: "TRUE", want: true}, + {envVar: "1", want: true}, + {envVar: "false", want: false}, + {envVar: "f", want: false}, + {envVar: "0", want: false}, + {envVar: "abc", want: true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _ = os.Setenv("DNT", tt.envVar) + if got := dnt(); got != tt.want { + t.Errorf("dnt() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_dbPath(t *testing.T) { + tests := []struct { + name string + envVar string + wantDbPath string + }{ + {name: "default", envVar: "", wantDbPath: "data/kis3.db"}, + {envVar: "kis3.db", wantDbPath: "kis3.db"}, + {envVar: "data.db", wantDbPath: "data.db"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _ = os.Setenv("DB_PATH", tt.envVar) + if gotDbPath := dbPath(); gotDbPath != tt.wantDbPath { + t.Errorf("dbPath() = %v, want %v", gotDbPath, tt.wantDbPath) + } + }) + } +} + +func Test_statsUsername(t *testing.T) { + tests := []struct { + name string + envVar string + wantUsername string + }{ + {name: "default", envVar: "", wantUsername: ""}, + {envVar: "abc", wantUsername: "abc"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _ = os.Setenv("STATS_USERNAME", tt.envVar) + if gotUsername := statsUsername(); gotUsername != tt.wantUsername { + t.Errorf("statsUsername() = %v, want %v", gotUsername, tt.wantUsername) + } + }) + } +} + +func Test_statsPassword(t *testing.T) { + tests := []struct { + name string + envVar string + wantPassword string + }{ + {name: "default", envVar: "", wantPassword: ""}, + {envVar: "def", wantPassword: "def"}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + _ = os.Setenv("STATS_PASSWORD", tt.envVar) + if gotPassword := statsPassword(); gotPassword != tt.wantPassword { + t.Errorf("statsPassword() = %v, want %v", gotPassword, tt.wantPassword) + } + }) + } +} + +func Test_statsAuth(t *testing.T) { + type args struct { + ac *config + } + tests := []struct { + name string + args args + want bool + }{ + {name: "default", args: struct{ ac *config }{ac: &config{}}, want: false}, + {name: "only username set", args: struct{ ac *config }{ac: &config{statsUsername: "abc"}}, want: false}, + {name: "only password set", args: struct{ ac *config }{ac: &config{statsPassword: "def"}}, want: false}, + {name: "username and password set", args: struct{ ac *config }{ac: &config{statsUsername: "abc", statsPassword: "def"}}, want: true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := statsAuth(tt.args.ac); got != tt.want { + t.Errorf("statsAuth() = %v, want %v", got, tt.want) + } + }) + } +}