38 lines
870 B
Go
38 lines
870 B
Go
package api
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/benbjohnson/clock"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRates(t *testing.T) {
|
|
clock := clock.NewMock()
|
|
rate := func(start int, val float64) Rate {
|
|
return Rate{
|
|
Start: clock.Now().Add(time.Duration(start) * time.Hour),
|
|
End: clock.Now().Add(time.Duration(start+1) * time.Hour),
|
|
Value: val,
|
|
}
|
|
}
|
|
|
|
rr := Rates{rate(1, 1), rate(2, 2), rate(3, 3), rate(4, 4)}
|
|
|
|
_, err := rr.At(clock.Now())
|
|
assert.Error(t, err)
|
|
|
|
for i := 1; i <= 4; i++ {
|
|
r, err := rr.At(clock.Now().Add(time.Duration(i) * time.Hour))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, float64(i), r.Value)
|
|
|
|
r, err = rr.At(clock.Now().Add(time.Duration(i)*time.Hour + 30*time.Minute))
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, float64(i), r.Value)
|
|
}
|
|
|
|
_, err = rr.At(clock.Now().Add(5 * time.Hour))
|
|
assert.Error(t, err)
|
|
}
|