evcc-io/core/site_battery_test.go
Martin Weinelt daee304a49
chore: migrate from unmaintained mockgen (#11547)
The golang mock package has been archived and is now maintained by uber.

> Update, June 2023: This repo and tool are no longer maintained. Please
> see go.uber.org/mock for a maintained fork instead.

[1] https://github.com/golang/mock
[2] https://github.com/uber-go/mock
2024-01-08 11:13:27 +01:00

75 lines
2.2 KiB
Go

package core
import (
"testing"
"github.com/evcc-io/evcc/api"
"github.com/evcc-io/evcc/core/loadpoint"
"github.com/evcc-io/evcc/util"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/mock/gomock"
)
func TestDetermineBatteryMode(t *testing.T) {
ctrl := gomock.NewController(t)
tcs := []struct {
chargeStatus api.ChargeStatus
planActive bool
expBatMode api.BatteryMode
mode api.ChargeMode
}{
{api.StatusB, false, api.BatteryNormal, api.ModeOff}, // mode off -> bat normal
{api.StatusB, false, api.BatteryNormal, api.ModeNow}, // mode now, not charging -> bat normal
{api.StatusC, false, api.BatteryHold, api.ModeNow}, // mode now, charging -> bat hold
{api.StatusB, false, api.BatteryNormal, api.ModeMinPV}, // mode minPV, not charging -> bat normal
{api.StatusC, false, api.BatteryNormal, api.ModeMinPV}, // mode minPV, charging -> bat normal
{api.StatusB, false, api.BatteryNormal, api.ModePV}, // mode PV, not charging -> bat normal
{api.StatusC, false, api.BatteryNormal, api.ModePV}, // mode PV, charging, no planner -> bat normal
{api.StatusC, true, api.BatteryHold, api.ModePV}, // mode PV, charging, planner active -> bat hold
}
log := util.NewLogger("foo")
for _, tc := range tcs {
s := &Site{
log: log,
}
lp := loadpoint.NewMockAPI(ctrl)
lp.EXPECT().GetStatus().Return(tc.chargeStatus).AnyTimes()
lp.EXPECT().GetMode().Return(tc.mode).AnyTimes()
lp.EXPECT().GetPlanActive().Return(tc.planActive).AnyTimes()
loadpoints := []loadpoint.API{lp}
mode := s.determineBatteryMode(loadpoints, false)
assert.Equal(t, tc.expBatMode, mode, tc)
}
}
func TestUpdateBatteryMode(t *testing.T) {
expBatMode := api.BatteryHold
ctrl := gomock.NewController(t)
batCtrl := struct {
*api.MockBatteryController
*api.MockMeter
}{
api.NewMockBatteryController(ctrl),
api.NewMockMeter(ctrl),
}
batCtrl.MockBatteryController.EXPECT().SetBatteryMode(expBatMode).Times(1)
s := &Site{
log: util.NewLogger("foo"),
batteryMeters: []api.Meter{batCtrl},
batteryMode: api.BatteryNormal,
}
err := s.updateBatteryMode(expBatMode)
require.NoError(t, err)
assert.Equal(t, expBatMode, s.GetBatteryMode())
}