func TestToDuration(t *testing.T) {
	t.Parallel()

	d := duration.Duration{Years: 1}
	assert.Equal(t, d.ToDuration(), time.Hour*24*365)

	d = duration.Duration{Weeks: 1}
	assert.Equal(t, d.ToDuration(), time.Hour*24*7)

	d = duration.Duration{Days: 1}
	assert.Equal(t, d.ToDuration(), time.Hour*24)

	d = duration.Duration{Hours: 1}
	assert.Equal(t, d.ToDuration(), time.Hour)

	d = duration.Duration{Minutes: 1}
	assert.Equal(t, d.ToDuration(), time.Minute)

	d = duration.Duration{Seconds: 1}
	assert.Equal(t, d.ToDuration(), time.Second)
}
func TestFromString(t *testing.T) {
	t.Parallel()

	// test with bad format
	_, err := duration.FromString("asdf")
	assert.Equal(t, err, duration.ErrBadFormat, "Bad format")

	_, err = duration.FromString("P1x")
	assert.Equal(t, err, duration.ErrBadFormat, "Partially bad format")

	_, err = duration.FromString("P1")
	assert.Equal(t, err, duration.ErrBadFormat, "Incomplete format")

	_, err = duration.FromString("P0Y")
	assert.Equal(t, err, fmt.Errorf("year cannot be 0"), "No zeros")

	_, err = duration.FromString("P1YT0H")
	assert.Equal(t, err, fmt.Errorf("hour cannot be 0"), "No partial zeros")

	_, err = duration.FromString("P1YT23Hhello")
	assert.Equal(t, err, duration.ErrBadFormat, "Substring")

	// test with month
	_, err = duration.FromString("P1M")
	assert.Equal(t, err, duration.ErrNoMonth, "No months")

	// test with good full string
	dur, err := duration.FromString("P1Y2DT3H4M5S")
	assert.Nil(t, err)
	assert.Equal(t, 1, dur.Years)
	assert.Equal(t, 2, dur.Days)
	assert.Equal(t, 3, dur.Hours)
	assert.Equal(t, 4, dur.Minutes)
	assert.Equal(t, 5, dur.Seconds)

	// test with good week string
	dur, err = duration.FromString("P1W")
	assert.Nil(t, err)
	assert.Equal(t, 1, dur.Weeks)
}
func TestString(t *testing.T) {
	t.Parallel()

	// test empty
	d := duration.Duration{}
	assert.Equal(t, d.String(), "P")

	// test only larger-than-day
	d = duration.Duration{Years: 1, Days: 2}
	assert.Equal(t, d.String(), "P1Y2D")

	// test only smaller-than-day
	d = duration.Duration{Hours: 1, Minutes: 2, Seconds: 3}
	assert.Equal(t, d.String(), "PT1H2M3S")

	// test full format
	d = duration.Duration{Years: 1, Days: 2, Hours: 3, Minutes: 4, Seconds: 5}
	assert.Equal(t, d.String(), "P1Y2DT3H4M5S")

	// test week format
	d = duration.Duration{Weeks: 1}
	assert.Equal(t, d.String(), "P1W")
}