package influx import ( "fmt" "testing" "time" "mqqt-scrubber/internal/model" "mqqt-scrubber/internal/parser" ) func TestToLineProtocolFromParsedLWT(t *testing.T) { receivedAt := time.Date(2026, time.March, 12, 15, 21, 39, 0, time.UTC) records, err := parser.ParseTasmota(model.RawMessage{ Topic: "tele/tasmota_896001/LWT", Payload: []byte("Online"), ReceivedAt: receivedAt, }) if err != nil { t.Fatalf("ParseTasmota returned error: %v", err) } line, err := toLineProtocol(records[0]) if err != nil { t.Fatalf("toLineProtocol returned error: %v", err) } expected := fmt.Sprintf( "tasmota_lwt,device=tasmota_896001,message_type=lwt,source=tasmota online=true,state=\"Online\" %d", receivedAt.UnixNano(), ) if line != expected { t.Fatalf("unexpected line protocol:\n got: %s\nwant: %s", line, expected) } } func TestToLineProtocolFromParsedSensor(t *testing.T) { receivedAt := time.Date(2026, time.March, 12, 16, 23, 13, 0, time.UTC) records, err := parser.ParseTasmota(model.RawMessage{ Topic: "tele/tasmota_C88994/SENSOR", Payload: []byte(`{"Time":"2026-03-12T16:23:13","ENERGY":{"TotalStartTime":"2026-02-04T19:13:40","Total":41.385,"Yesterday":1.124,"Today":0.799,"Period":0,"Power":1,"ApparentPower":4,"ReactivePower":4,"Factor":0.22,"Voltage":231,"Current":0.016}}`), ReceivedAt: receivedAt, }) if err != nil { t.Fatalf("ParseTasmota returned error: %v", err) } line, err := toLineProtocol(records[0]) if err != nil { t.Fatalf("toLineProtocol returned error: %v", err) } expected := fmt.Sprintf( "tasmota_sensor,device=tasmota_c88994,message_type=sensor,source=tasmota energy_apparent_power=4,energy_current=0.016,energy_factor=0.22,energy_period=0,energy_power=1,energy_reactive_power=4,energy_today=0.799,energy_total=41.385,energy_total_start_time=\"2026-02-04T19:13:40\",energy_voltage=231,energy_yesterday=1.124 %d", receivedAt.UnixNano(), ) if line != expected { t.Fatalf("unexpected line protocol:\n got: %s\nwant: %s", line, expected) } }