From f6a8bfcdb31b3a42002e9d1c113bd547ffe5ef29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Mon, 18 Oct 2021 18:22:35 +0200 Subject: Improve Url.String() --- pkg/config/url.go | 27 +++++++++++++++++++-------- pkg/config/url_test.go | 29 +++++++++++++++++++++-------- 2 files changed, 40 insertions(+), 16 deletions(-) (limited to 'pkg') diff --git a/pkg/config/url.go b/pkg/config/url.go index 7e91411..4b3abf7 100644 --- a/pkg/config/url.go +++ b/pkg/config/url.go @@ -65,18 +65,29 @@ func (u *Url) UnmarshalYAML(value *yaml.Node) (err error) { } func (u Url) String() string { - scheme := u.Scheme + "://" + var sb strings.Builder - var pwd string - if u.Password != "" { - pwd = ":******" + sb.WriteString(u.Scheme) + sb.WriteString("://") + + if u.User != "" { + sb.WriteString(u.User) + if u.Password != "" { + sb.WriteString(":******") + } + sb.WriteRune('@') } - var delim string - if pwd != "" || u.User != "" { - delim = "@" + + sb.WriteString(u.HostPort()) + + if u.Root != "" { + if u.Root[0] != '/' { + sb.WriteRune('/') + } + sb.WriteString(u.Root) } - return scheme + u.User + pwd + delim + u.HostPort() + u.Root + return sb.String() } func (u *Url) HostPort() string { diff --git a/pkg/config/url_test.go b/pkg/config/url_test.go index 492ccd8..65797cb 100644 --- a/pkg/config/url_test.go +++ b/pkg/config/url_test.go @@ -14,6 +14,7 @@ func TestUrl_Unmarshal(t *testing.T) { inp string url Url wantErr bool + str string }{ {name: "Empty", inp: `url: ""`, wantErr: true}, {name: "Simple String", inp: `url: "imap://user:pass@example.net:143/INBOX"`, url: Url{ @@ -23,7 +24,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "143", Root: "/INBOX", - }}, + }, str: "imap://user:******@example.net:143/INBOX"}, {name: "Simple String with @", inp: `url: "imaps://user@example:pass@example.net:143/INBOX"`, url: Url{ Scheme: "imaps", User: "user@example", @@ -31,7 +32,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "143", Root: "/INBOX", - }}, + }, str: "imaps://user@example:******@example.net:143/INBOX"}, {name: "Simple String with %40", inp: `url: "imap://user%40example:pass@example.net:4711/INBOX"`, url: Url{ Scheme: "imap", User: "user@example", @@ -39,7 +40,15 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "4711", Root: "/INBOX", - }}, + }, str: "imap://user@example:******@example.net:4711/INBOX"}, + {name: "Simple String without user", inp: `url: "imap://example.net:143/INBOX"`, url: Url{ + Scheme: "imap", + User: "", + Password: "", + Host: "example.net", + Port: "143", + Root: "/INBOX", + }, str: "imap://example.net:143/INBOX"}, {name: "Err: Inv scheme", inp: `url: "smtp://user%40example:pass@example.net:4711/INBOX"`, wantErr: true}, {name: "Err: No Host", inp: `url: "imap://user%40example:pass/INBOX"`, wantErr: true}, {name: "Err: Scheme Only", inp: `url: "imap://"`, wantErr: true}, @@ -50,7 +59,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "143", Root: "", - }}, + }, str: "imap://user:******@example.net:143"}, {name: "No Root: Slash", inp: `url: "imap://user:pass@example.net:143/"`, url: Url{ Scheme: "imap", User: "user", @@ -58,7 +67,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "143", Root: "/", - }}, + }, str: "imap://user:******@example.net:143/"}, {name: "Full", inp: `url: scheme: imap host: example.net @@ -73,7 +82,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "143", Root: "INBOX", - }}, + }, str: "imap://user:******@example.net:143/INBOX"}, {name: "Default Port", inp: `url: scheme: imap host: example.net @@ -87,7 +96,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "143", Root: "INBOX", - }}, + }, str: "imap://user:******@example.net:143/INBOX"}, {name: "Default Scheme", inp: `url: host: example.net user: user @@ -101,7 +110,7 @@ func TestUrl_Unmarshal(t *testing.T) { Host: "example.net", Port: "993", Root: "INBOX", - }}, + }, str: "imaps://user:******@example.net:993/INBOX"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -117,6 +126,10 @@ func TestUrl_Unmarshal(t *testing.T) { if diff := cmp.Diff(u.Url, tt.url); err == nil && diff != "" { t.Error(diff) } + + if diff := cmp.Diff(u.Url.String(), tt.str); err == nil && diff != "" { + t.Error(diff) + } }) } } -- cgit v1.2.3