aboutsummaryrefslogtreecommitdiff
path: root/human_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'human_test.go')
-rw-r--r--human_test.go99
1 files changed, 99 insertions, 0 deletions
diff --git a/human_test.go b/human_test.go
new file mode 100644
index 0000000..5109af4
--- /dev/null
+++ b/human_test.go
@@ -0,0 +1,99 @@
+package human_test
+
+import (
+ "encoding/json"
+ "fmt"
+ "net/url"
+ "testing"
+ "time"
+
+ "git.anhgelus.world/anhgelus/go-human.json"
+)
+
+func TestURL_Json(t *testing.T) {
+ var r human.URL
+ err := json.Unmarshal([]byte(`"http://example.com"`), &r)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if r.Scheme != "http" {
+ t.Errorf("invalid scheme: %s", r.Scheme)
+ }
+ if r.Host != "example.com" {
+ t.Errorf("invalid host: %s", r.Host)
+ }
+ if r.Path != "" {
+ t.Errorf("invalid path: %s", r.Path)
+ }
+
+ err = json.Unmarshal([]byte(`"http://example.com:80/"`), &r)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if r.Scheme != "http" {
+ t.Errorf("invalid scheme: %s", r.Scheme)
+ }
+ if r.Host != "example.com" {
+ t.Errorf("invalid host: %s", r.Host)
+ }
+ if r.Path != "" {
+ t.Errorf("invalid path: %s", r.Path)
+ }
+
+ err = json.Unmarshal([]byte(`"https://foo.example.com:443/hello/world/"`), &r)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if r.Scheme != "https" {
+ t.Errorf("invalid scheme: %s", r.Scheme)
+ }
+ if r.Host != "foo.example.com" {
+ t.Errorf("invalid host: %s", r.Host)
+ }
+ if r.Path != "/hello/world" {
+ t.Errorf("invalid path: %s", r.Path)
+ }
+
+ err = json.Unmarshal([]byte(`"https://example.com:80/hello/world/?foo=bar"`), &r)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if r.Scheme != "https" {
+ t.Errorf("invalid scheme: %s", r.Scheme)
+ }
+ if r.Host != "example.com:80" {
+ t.Errorf("invalid host: %s", r.Host)
+ }
+ if r.Path != "/hello/world" {
+ t.Errorf("invalid path: %s", r.Path)
+ }
+}
+
+func TestVouch_Json(t *testing.T) {
+ var v human.Vouch
+ err := json.Unmarshal([]byte(`{"url": "https://bob.example.com","vouched_at": "2026-01-15"}`), &v)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if v.URL.String() != "https://bob.example.com" {
+ t.Errorf("invalid url: %v", v.URL)
+ }
+ if v.VouchedAt.Format(time.DateOnly) != "2026-01-15" {
+ t.Errorf("invalid vouched_at: %v", v.VouchedAt)
+ }
+
+ raw, _ := url.Parse(`https://bob.example.com:443/`)
+ now := time.Now()
+ cv := human.URL(*raw)
+ v = human.Vouch{
+ URL: &cv,
+ VouchedAt: now,
+ }
+ b, err := json.Marshal(&v)
+ if err != nil {
+ t.Fatal(err)
+ }
+ if string(b) != fmt.Sprintf(`{"url":"https://bob.example.com","vouched_at":"%s"}`, now.Format(time.DateOnly)) {
+ t.Errorf("invalid marshal: %s", b)
+ }
+}