evcc-io/meter/meter_test.go

64 lines
1.6 KiB
Go

package meter
import (
"testing"
"github.com/evcc-io/evcc/api"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestPV(t *testing.T) {
m, err := NewConfigurableFromConfig(t.Context(), map[string]any{
"power": map[string]any{
"source": "const",
"value": 1000,
},
"maxacpower": 1000,
})
require.NoError(t, err)
// must not have soc/capacity
_, ok := api.Cap[api.MaxACPowerGetter](m)
assert.True(t, ok, "MaxACPowerGetter")
}
func TestPVMaxACPowerPlugin(t *testing.T) {
newMeter := func(maxacpower any) api.Meter {
m, err := NewConfigurableFromConfig(t.Context(), map[string]any{
"power": map[string]any{"source": "const", "value": 1000},
"maxacpower": maxacpower,
})
require.NoError(t, err)
return m
}
m := newMeter(map[string]any{"source": "const", "value": 5000})
mp, ok := api.Cap[api.MaxACPowerGetter](m)
require.True(t, ok, "MaxACPowerGetter")
assert.Equal(t, 5000.0, mp.MaxACPower())
// device without rating must not be decorated
m = newMeter(map[string]any{"source": "error", "error": "ErrNotAvailable"})
_, ok = api.Cap[api.MaxACPowerGetter](m)
assert.False(t, ok, "MaxACPowerGetter")
}
func TestBattery(t *testing.T) {
m, err := NewConfigurableFromConfig(t.Context(), map[string]any{
"power": map[string]any{
"source": "const",
"value": 1000,
},
"capacity": 23,
"soc": map[string]any{
"source": "const",
"value": 47,
},
})
require.NoError(t, err)
_, ok := api.Cap[api.Battery](m)
assert.True(t, ok, "Battery")
_, ok = api.Cap[api.BatteryCapacity](m)
assert.True(t, ok, "BatteryCapacity")
}