package pttodo

import (
	"encoding/json"
	"strings"
	"testing"

	yaml "gopkg.in/yaml.v2"
)

func TestTSMarshalYaml(t *testing.T) {
	t.Run("nonzero", func(t *testing.T) {
		var ts TS
		if b, err := yaml.Marshal(TS(5)); err != nil {
			t.Fatal(err)
		} else if s := string(b); !strings.HasSuffix(strings.TrimSpace(s), ` 1969`) {
			t.Fatal(s)
		} else if err := yaml.Unmarshal(b, &ts); err != nil {
			t.Fatal(err)
		} else if ts != 5 {
			t.Fatal(ts)
		}
	})
	t.Run("zero", func(t *testing.T) {
		var ts TS
		if b, err := yaml.Marshal(TS(0)); err != nil {
			t.Fatal(err)
		} else if s := string(b); strings.TrimSpace(s) == `0` {
			t.Fatal(s)
		} else if err := yaml.Unmarshal(b, &ts); err != nil {
			t.Fatal(err)
		} else if ts == 0 {
			t.Fatal(ts)
		}
	})
}

func TestJSONTS(t *testing.T) {
	ts := TS(1234567890)
	js, err := json.Marshal(ts)
	if err != nil {
		t.Fatal(err)
	}

	var ts2 TS
	if err := json.Unmarshal(js, &ts2); err != nil {
		t.Fatal(err)
	}
	if ts != ts2 {
		t.Fatalf("want: %v, got: %v", ts, ts2)
	}

	if err := json.Unmarshal([]byte(`123`), &ts2); err != nil {
		t.Fatal(err)
	}
	if 123 != ts2 {
		t.Fatal(ts2)
	}

	var ts3 TS
	if b, err := json.Marshal(TS(0)); err != nil {
		t.Fatal(err)
	} else if err := json.Unmarshal(b, &ts3); err != nil {
		t.Fatal(err)
	} else if ts3 == (TS(0)) {
		t.Fatal(ts3)
	}
}
