package core import ( "testing" "github.com/evcc-io/evcc/api" "github.com/evcc-io/evcc/util" "github.com/stretchr/testify/assert" "go.uber.org/mock/gomock" ) func TestEffectiveLimitSoc(t *testing.T) { lp := NewLoadpoint(util.NewLogger("foo"), nil) assert.Equal(t, 100, lp.effectiveLimitSoc()) } func TestEffectiveMinMaxCurrent(t *testing.T) { tc := []struct { chargerMin, chargerMax float64 vehicleMin, vehicleMax float64 effectiveMin, effectiveMax float64 }{ {0, 0, 0, 0, 6, 16}, {1, 10, 0, 0, 1, 10}, // charger lower {10, 20, 0, 0, 10, 16}, // charger higher - max ignored {0, 0, 1, 10, 6, 10}, // vehicle lower - min ignored {0, 0, 10, 20, 10, 16}, // vehicle higher - max ignored {1, 10, 2, 12, 1, 10}, // charger + vehicle lower {10, 20, 12, 22, 10, 16}, // charger + vehicle higher } for _, tc := range tc { t.Logf("%+v", tc) ctrl := gomock.NewController(t) lp := NewLoadpoint(util.NewLogger("foo"), nil) lp.charger = api.NewMockCharger(ctrl) if tc.chargerMin+tc.chargerMax > 0 { currentLimiter := api.NewMockCurrentLimiter(ctrl) currentLimiter.EXPECT().GetMinMaxCurrent().Return(tc.chargerMin, tc.chargerMax, nil).AnyTimes() lp.charger = struct { api.Charger api.CurrentLimiter }{ Charger: lp.charger, CurrentLimiter: currentLimiter, } } if tc.vehicleMin+tc.vehicleMax > 0 { vehicle := api.NewMockVehicle(ctrl) ac := api.ActionConfig{ MinCurrent: tc.vehicleMin, MaxCurrent: tc.vehicleMax, } vehicle.EXPECT().OnIdentified().Return(ac).AnyTimes() lp.vehicle = vehicle } assert.Equal(t, tc.effectiveMin, lp.effectiveMinCurrent()) assert.Equal(t, tc.effectiveMax, lp.effectiveMaxCurrent()) } }