chore: simplify nested tests

This commit is contained in:
andig 2022-10-05 18:21:01 +02:00
parent 6e943a0405
commit 909f2be52f
2 changed files with 47 additions and 46 deletions

View file

@ -80,9 +80,8 @@ func NewEEBus(ski, ip string, hasMeter, hasChargedEnergy bool) (api.Charger, err
if hasMeter {
if hasChargedEnergy {
return decorateEEBus(c, c.currentPower, c.currents, c.chargedEnergy), nil
} else {
return decorateEEBus(c, c.currentPower, c.currents, nil), nil
}
return decorateEEBus(c, c.currentPower, c.currents, nil), nil
}
return c, nil

View file

@ -82,57 +82,60 @@ func (d *DeviceTest) configure() (interface{}, error) {
// testCharger tests a charger device
func (d *DeviceTest) testCharger(v interface{}) (DeviceTestResult, error) {
if v, ok := v.(api.Charger); ok {
if _, err := v.Status(); err != nil {
return DeviceTestResultInvalid, err
}
} else {
c, ok := v.(api.Charger)
if !ok {
return DeviceTestResultInvalid, errors.New("selected device is not a wallbox")
}
if _, err := c.Status(); err != nil {
return DeviceTestResultInvalid, err
}
if v, ok := v.(api.Meter); ok {
if _, err := v.CurrentPower(); err != nil {
return DeviceTestResultValidMissingMeter, nil
}
} else {
m, ok := v.(api.Meter)
if !ok {
return DeviceTestResultValidMissingMeter, nil
}
if _, err := m.CurrentPower(); err != nil {
return DeviceTestResultInvalid, err
}
return DeviceTestResultValid, nil
}
// testMeter tests a meter device
func (d *DeviceTest) testMeter(deviceCategory DeviceCategory, v interface{}) (DeviceTestResult, error) {
if v, ok := v.(api.Meter); ok {
power, err := v.CurrentPower()
m, ok := v.(api.Meter)
if !ok {
return DeviceTestResultInvalid, errors.New("selected device is not a meter")
}
power, err := m.CurrentPower()
if err != nil {
return DeviceTestResultInvalid, err
}
// check if the grid meter reports power 0, which should be impossible
// happens with Kostal Piko charger that do not have a grid meter attached
// but we can't determine this
if power == 0 && deviceCategory == DeviceCategoryGridMeter {
return DeviceTestResultInvalid, errors.New("grid meter reports power 0")
}
if deviceCategory == DeviceCategoryBatteryMeter {
b, ok := v.(api.Battery)
if !ok {
return DeviceTestResultInvalid, errors.New("selected device is not a battery meter")
}
_, err := b.SoC()
for err != nil && errors.Is(err, api.ErrMustRetry) {
time.Sleep(3 * time.Second)
_, err = b.SoC()
}
if err != nil {
return DeviceTestResultInvalid, err
}
// check if the grid meter reports power 0, which should be impossible
// happens with Kostal Piko charger that do not have a grid meter attached
// but we can't determine this
if power == 0 && deviceCategory == DeviceCategoryGridMeter {
return DeviceTestResultInvalid, errors.New("grid meter reports power 0")
}
if deviceCategory == DeviceCategoryBatteryMeter {
if v, ok := v.(api.Battery); ok {
_, err := v.SoC()
for err != nil && errors.Is(err, api.ErrMustRetry) {
time.Sleep(3 * time.Second)
_, err = v.SoC()
}
if err != nil {
return DeviceTestResultInvalid, err
}
} else {
return DeviceTestResultInvalid, errors.New("selected device is not a battery meter")
}
}
} else {
return DeviceTestResultInvalid, errors.New("selected device is not a meter")
}
return DeviceTestResultValid, nil
@ -140,15 +143,14 @@ func (d *DeviceTest) testMeter(deviceCategory DeviceCategory, v interface{}) (De
// testVehicle tests a vehicle device
func (d *DeviceTest) testVehicle(v interface{}) (DeviceTestResult, error) {
if _, ok := v.(api.Vehicle); ok {
if v, ok := v.(api.Battery); ok {
if _, err := v.SoC(); err != nil {
return DeviceTestResultInvalid, err
}
}
} else {
vv, ok := v.(api.Vehicle)
if !ok {
return DeviceTestResultInvalid, errors.New("selected device is not a vehicle")
}
if _, err := vv.SoC(); err != nil {
return DeviceTestResultInvalid, err
}
return DeviceTestResultValid, nil
}