tariff/localvolts_test.go
Rama master · réplica de lectura del repositorio original.
package tariff
import (
"encoding/json"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestLocalVoltsRates(t *testing.T) {
// three 5-minute import intervals of one slot plus a fourth in the next slot, export interleaved
const body = `[
{"NMI":"4100000000","circuit":"Import","direction":"Buy","intervalEnd":"2026-10-19T00:05:00Z","intervalDuration":"5","flexUp":30,"flexUnits":"c/kWh","quality":"Exp"},
{"NMI":"4100000000","circuit":"Export","direction":"Sell","intervalEnd":"2026-10-19T00:05:00Z","intervalDuration":"5","flexUp":5,"flexUnits":"c/kWh","quality":"Exp"},
{"NMI":"4100000000","circuit":"Import","direction":"Buy","intervalEnd":"2026-10-19T00:10:00Z","intervalDuration":"5","flexUp":40,"flexUnits":"c/kWh","quality":"Fcst"},
{"NMI":"4100000000","circuit":"Import","direction":"Buy","intervalEnd":"2026-10-19T00:15:00Z","intervalDuration":"5","flexUp":50,"flexUnits":"c/kWh","quality":"Fcst"},
{"NMI":"4100000000","circuit":"Import","direction":"Buy","intervalEnd":"2026-10-19T00:20:00Z","intervalDuration":"5","flexUp":-10,"flexUnits":"c/kWh","quality":"Fcst"}
]`
var res []localVoltsInterval
require.NoError(t, json.Unmarshal([]byte(body), &res))
tr := &LocalVolts{embed: &embed{}, channel: "Import"}
rates := tr.rates(res)
require.Len(t, rates, 2)
assert.Equal(t, time.Date(2026, 10, 19, 0, 0, 0, 0, time.UTC).Local(), rates[0].Start)
assert.Equal(t, SlotDuration, rates[0].End.Sub(rates[0].Start))
assert.InDelta(t, 0.4, rates[0].Value, 1e-9)
assert.InDelta(t, -0.1, rates[1].Value, 1e-9)
tr.channel = "Export"
rates = tr.rates(res)
require.Len(t, rates, 1)
assert.InDelta(t, 0.05, rates[0].Value, 1e-9)
}