From 901e30f76e23f64851e34c32b0e8dd27bb1130f3 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 2 Nov 2025 17:17:57 +0100 Subject: [PATCH] chore: add tests --- api/api.go | 2 +- api/mock.go | 57 +++++++++++++++++++++++++++++++++++++-- core/site_circuit_test.go | 52 +++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 core/site_circuit_test.go diff --git a/api/api.go b/api/api.go index 6a4d85796..abd0988f1 100644 --- a/api/api.go +++ b/api/api.go @@ -7,7 +7,7 @@ import ( "time" ) -//go:generate go tool mockgen -package api -destination mock.go github.com/evcc-io/evcc/api Charger,ChargeState,CurrentLimiter,CurrentGetter,PhaseSwitcher,PhaseGetter,FeatureDescriber,Identifier,Meter,MeterEnergy,PhaseCurrents,Vehicle,ConnectionTimer,ChargeRater,Battery,BatteryController,BatterySocLimiter,Circuit,Tariff +//go:generate go tool mockgen -package api -destination mock.go github.com/evcc-io/evcc/api Charger,ChargeState,CurrentLimiter,CurrentGetter,PhaseSwitcher,PhaseGetter,FeatureDescriber,Identifier,Meter,MeterEnergy,PhaseCurrents,Vehicle,ConnectionTimer,ChargeRater,Battery,BatteryController,BatterySocLimiter,Circuit,Dimmer,Tariff // Meter provides total active power in W type Meter interface { diff --git a/api/mock.go b/api/mock.go index 69a741239..d009b80a7 100644 --- a/api/mock.go +++ b/api/mock.go @@ -1,9 +1,9 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: github.com/evcc-io/evcc/api (interfaces: Charger,ChargeState,CurrentLimiter,CurrentGetter,PhaseSwitcher,PhaseGetter,FeatureDescriber,Identifier,Meter,MeterEnergy,PhaseCurrents,Vehicle,ConnectionTimer,ChargeRater,Battery,BatteryController,BatterySocLimiter,Circuit,Tariff) +// Source: github.com/evcc-io/evcc/api (interfaces: Charger,ChargeState,CurrentLimiter,CurrentGetter,PhaseSwitcher,PhaseGetter,FeatureDescriber,Identifier,Meter,MeterEnergy,PhaseCurrents,Vehicle,ConnectionTimer,ChargeRater,Battery,BatteryController,BatterySocLimiter,Circuit,Dimmer,Tariff) // // Generated by this command: // -// mockgen -package api -destination mock.go github.com/evcc-io/evcc/api Charger,ChargeState,CurrentLimiter,CurrentGetter,PhaseSwitcher,PhaseGetter,FeatureDescriber,Identifier,Meter,MeterEnergy,PhaseCurrents,Vehicle,ConnectionTimer,ChargeRater,Battery,BatteryController,BatterySocLimiter,Circuit,Tariff +// mockgen -package api -destination mock.go github.com/evcc-io/evcc/api Charger,ChargeState,CurrentLimiter,CurrentGetter,PhaseSwitcher,PhaseGetter,FeatureDescriber,Identifier,Meter,MeterEnergy,PhaseCurrents,Vehicle,ConnectionTimer,ChargeRater,Battery,BatteryController,BatterySocLimiter,Circuit,Dimmer,Tariff // // Package api is a generated GoMock package. @@ -1084,6 +1084,59 @@ func (mr *MockCircuitMockRecorder) Wrap(parent any) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Wrap", reflect.TypeOf((*MockCircuit)(nil).Wrap), parent) } +// MockDimmer is a mock of Dimmer interface. +type MockDimmer struct { + ctrl *gomock.Controller + recorder *MockDimmerMockRecorder + isgomock struct{} +} + +// MockDimmerMockRecorder is the mock recorder for MockDimmer. +type MockDimmerMockRecorder struct { + mock *MockDimmer +} + +// NewMockDimmer creates a new mock instance. +func NewMockDimmer(ctrl *gomock.Controller) *MockDimmer { + mock := &MockDimmer{ctrl: ctrl} + mock.recorder = &MockDimmerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockDimmer) EXPECT() *MockDimmerMockRecorder { + return m.recorder +} + +// Dim mocks base method. +func (m *MockDimmer) Dim(arg0 bool) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Dim", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Dim indicates an expected call of Dim. +func (mr *MockDimmerMockRecorder) Dim(arg0 any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Dim", reflect.TypeOf((*MockDimmer)(nil).Dim), arg0) +} + +// Dimmed mocks base method. +func (m *MockDimmer) Dimmed() (bool, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Dimmed") + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Dimmed indicates an expected call of Dimmed. +func (mr *MockDimmerMockRecorder) Dimmed() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Dimmed", reflect.TypeOf((*MockDimmer)(nil).Dimmed)) +} + // MockTariff is a mock of Tariff interface. type MockTariff struct { ctrl *gomock.Controller diff --git a/core/site_circuit_test.go b/core/site_circuit_test.go new file mode 100644 index 000000000..49481139f --- /dev/null +++ b/core/site_circuit_test.go @@ -0,0 +1,52 @@ +package core + +import ( + "testing" + + "github.com/evcc-io/evcc/api" + "github.com/evcc-io/evcc/util" + "github.com/evcc-io/evcc/util/config" + "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" +) + +func TestDimming(t *testing.T) { + ctrl := gomock.NewController(t) + + meter := api.NewMockMeter(ctrl) + dimmer := api.NewMockDimmer(ctrl) + mm := &struct { + api.Meter + api.Dimmer + }{ + Meter: meter, + Dimmer: dimmer, + } + + s := &Site{ + log: util.NewLogger("foo"), + auxMeters: []config.Device[api.Meter]{config.NewStaticDevice[api.Meter](config.Named{}, mm)}, + } + + for _, tc := range []struct { + has, want bool + }{ + {has: false, want: false}, + {has: false, want: true}, + {has: true, want: false}, + {has: true, want: true}, + } { + t.Logf("%+v", tc) + + dimmer.EXPECT().Dimmed().Return(tc.has, nil) + if tc.has != tc.want { + dimmer.EXPECT().Dim(tc.want).Return(nil) + } + + require.NoError(t, s.dimMeters(tc.want)) + + if !ctrl.Satisfied() { + ctrl.Finish() + } + } +}