64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/evcc-io/evcc/core/metrics"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMetricsBatteryTotals(t *testing.T) {
|
|
series := []metrics.Series{
|
|
{Group: metrics.Battery, Title: "bat", Data: []metrics.Slot{
|
|
{Energy: 1.0, ReturnEnergy: 0.4},
|
|
{Energy: 2.0, ReturnEnergy: 1.6},
|
|
}},
|
|
// non-battery series must be ignored
|
|
{Group: metrics.Grid, Title: "grid", Data: []metrics.Slot{
|
|
{Energy: 5.0, ReturnEnergy: 3.0},
|
|
}},
|
|
}
|
|
|
|
totals := metricsBatteryTotals(series)
|
|
require.Len(t, totals, 1)
|
|
require.InDelta(t, 3.0, totals["bat"].charge, 0.001)
|
|
require.InDelta(t, 2.0, totals["bat"].discharge, 0.001)
|
|
}
|
|
|
|
func TestMetricsWriteBatteryTable(t *testing.T) {
|
|
selected := []metrics.EntityInfo{
|
|
{Group: metrics.Battery, Name: "bat1"},
|
|
{Group: metrics.Battery, Name: "bat2"},
|
|
}
|
|
totals := map[string]batteryTotals{
|
|
"Home": {charge: 10.0, discharge: 9.0},
|
|
// bat2 deliberately absent: no data in the timeframe
|
|
}
|
|
title := func(group, name string) string {
|
|
if name == "bat1" {
|
|
return "Home"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
metricsWriteBatteryTable(&buf, selected, totals, title)
|
|
|
|
lines := strings.Split(strings.TrimRight(buf.String(), "\n"), "\n")
|
|
require.Len(t, lines, 3) // header + 2 rows
|
|
|
|
require.Contains(t, lines[0], "efficiency")
|
|
|
|
// bat1: title resolved, efficiency = discharge/charge
|
|
require.Contains(t, lines[1], "Home")
|
|
require.Contains(t, lines[1], "10.000")
|
|
require.Contains(t, lines[1], "9.000")
|
|
require.Contains(t, lines[1], "90.0%")
|
|
|
|
// bat2: no data -> zero totals, blank efficiency
|
|
require.Contains(t, lines[2], "bat2")
|
|
require.Contains(t, lines[2], "0.000")
|
|
require.NotContains(t, lines[2], "%")
|
|
}
|