refactor: enhance NewClient to support environment variable fallback and add tests
This commit is contained in:
+71
-2
@@ -10,8 +10,74 @@ import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNewClient_miabStyle(t *testing.T) {
|
||||
t.Setenv("MIAB_HOST", "box.example.com")
|
||||
t.Setenv("MIAB_USERNAME", "user@example.com")
|
||||
t.Setenv("MIAB_PASSWORD", "secret")
|
||||
|
||||
c, err := NewClient("", "", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if c.host != "box.example.com" || c.username != "user@example.com" || c.password != "secret" {
|
||||
t.Errorf("unexpected client fields: %+v", c)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewClient_mailinaboxStyle(t *testing.T) {
|
||||
t.Setenv("MAILINABOX_BASE_URL", "https://box.example.com")
|
||||
t.Setenv("MAILINABOX_EMAIL", "user@example.com")
|
||||
t.Setenv("MAILINABOX_PASSWORD", "secret")
|
||||
|
||||
c, err := NewClient("", "", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if c.host != "box.example.com" || c.username != "user@example.com" || c.password != "secret" {
|
||||
t.Errorf("unexpected client fields: %+v", c)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewClient_miabTakesPrecedence(t *testing.T) {
|
||||
t.Setenv("MIAB_HOST", "miab.example.com")
|
||||
t.Setenv("MIAB_USERNAME", "miab@example.com")
|
||||
t.Setenv("MIAB_PASSWORD", "miabpass")
|
||||
t.Setenv("MAILINABOX_BASE_URL", "https://other.example.com")
|
||||
t.Setenv("MAILINABOX_EMAIL", "other@example.com")
|
||||
t.Setenv("MAILINABOX_PASSWORD", "otherpass")
|
||||
|
||||
c, err := NewClient("", "", "")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if c.host != "miab.example.com" || c.username != "miab@example.com" || c.password != "miabpass" {
|
||||
t.Errorf("MIAB_* vars should take precedence, got: %+v", c)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewClient_missingVars(t *testing.T) {
|
||||
_, err := NewClient("", "", "")
|
||||
if err == nil {
|
||||
t.Fatal("expected error when no env vars set")
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewClient_explicitParamsTakePrecedence(t *testing.T) {
|
||||
t.Setenv("MIAB_HOST", "env.example.com")
|
||||
t.Setenv("MIAB_USERNAME", "env@example.com")
|
||||
t.Setenv("MIAB_PASSWORD", "envpass")
|
||||
|
||||
c, err := NewClient("explicit.example.com", "explicit@example.com", "explicitpass")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if c.host != "explicit.example.com" || c.username != "explicit@example.com" || c.password != "explicitpass" {
|
||||
t.Errorf("explicit params should take precedence, got: %+v", c)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildURL(t *testing.T) {
|
||||
c := NewClient("box.example.com", "user", "pass")
|
||||
c, _ := NewClient("box.example.com", "user", "pass")
|
||||
|
||||
tests := []struct {
|
||||
name, recordType, want string
|
||||
@@ -153,7 +219,10 @@ func TestErrorResponse(t *testing.T) {
|
||||
|
||||
// testClient builds a Client pointed at the test server's host.
|
||||
func testClient(srv *httptest.Server) *Client {
|
||||
c := NewClient(strings.TrimPrefix(srv.URL, "http://"), "user@example.com", "secret")
|
||||
c, err := NewClient(strings.TrimPrefix(srv.URL, "http://"), "user@example.com", "secret")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c.httpClient = srv.Client()
|
||||
// Override buildURL to use http instead of https for the test server.
|
||||
// We do this by wrapping the httpClient transport (no-op) and patching
|
||||
|
||||
Reference in New Issue
Block a user