package promutil

import (
	"testing"
	"time"

	"github.com/VictoriaMetrics/VictoriaMetrics/lib/timeutil"
)

func TestDuration(t *testing.T) {
	if _, err := timeutil.ParseDuration("foobar"); err == nil {
		t.Fatalf("expecting error for invalid duration")
	}
	dNative, err := timeutil.ParseDuration("1w")
	if err != nil {
		t.Fatalf("unexpected error: %s", err)
	}
	if dNative != 7*24*time.Hour {
		t.Fatalf("unexpected duration; got %s; want %s", dNative, 7*24*time.Hour)
	}
	d := NewDuration(dNative)
	if d.Duration() != dNative {
		t.Fatalf("unexpected duration; got %s; want %s", d.Duration(), dNative)
	}
	v, err := d.MarshalYAML()
	if err != nil {
		t.Fatalf("unexpected error in MarshalYAML(): %s", err)
	}
	sExpected := "168h0m0s"
	if s := v.(string); s != sExpected {
		t.Fatalf("unexpected value from MarshalYAML(); got %q; want %q", s, sExpected)
	}
	if err := d.UnmarshalYAML(func(v any) error {
		sp := v.(*string)
		s := "1w3d5h"
		*sp = s
		return nil
	}); err != nil {
		t.Fatalf("unexpected error in UnmarshalYAML(): %s", err)
	}
	if dNative := d.Duration(); dNative != (10*24+5)*time.Hour {
		t.Fatalf("unexpected value; got %s; want %s", dNative, (10*24+5)*time.Hour)
	}
}
