evcc-io/core/site_test.go
andig e34167ce7d
Implement multiple loadpoints and new UI (#199)
* Support multiple loadpoints

* Finalize loadpoint site split

* Simplify global voltage

* Fix push template error stopping main process

* Show only last error on retry

* Improve influx v1 compatibility

* Update push templates

* Revert influx v1 user change
2020-07-16 09:34:58 +02:00

60 lines
1.3 KiB
Go

package core
import (
"testing"
"github.com/andig/evcc/api"
"github.com/andig/evcc/mock"
"github.com/andig/evcc/util"
"github.com/golang/mock/gomock"
)
func TestSitePower(t *testing.T) {
tc := []struct {
grid, battery, site float64
}{
{0, 0, 0}, // silent night
{0, 1, 1}, // battery discharging
{0, -1, -1}, // battery charging -> negative result cannot occur in reality
{1, 0, 1}, // grid import
{1, 1, 2}, // grid import + battery discharging
{-1, 0, -1}, // grid export
{-1, -1, -2}, // grid export + battery charging
}
for _, tc := range tc {
res := sitePower(tc.grid, tc.battery, 0)
if res != tc.site {
t.Errorf("sitePower wanted %.f, got %.f", tc.site, res)
}
}
}
func TestSiteUpdateMultipleLoadpoints(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
sitePower := -1000.0
lps := []float64{300.0, 400.0, 500.0}
gm := mock.NewMockMeter(ctrl)
gm.EXPECT().CurrentPower().Return(sitePower, nil)
site := &Site{
log: util.NewLogger("foo"),
Mode: api.ModePV,
gridMeter: gm,
}
availablePower := sitePower
for _, usedPower := range lps {
lp := mock.NewMockLoadPointer(ctrl)
site.loadpoints = append(site.loadpoints, lp)
lp.EXPECT().Update(api.ModePV, availablePower).Return(usedPower)
availablePower += usedPower
}
_ = site.update()
}