From 9e7f2dc065ea063993dcd4ba00d572d43551e122 Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Mon, 28 Oct 2024 21:11:17 +0100 Subject: [PATCH] add tests for all components --- test/native/test_ha/components.cpp | 210 +++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 test/native/test_ha/components.cpp diff --git a/test/native/test_ha/components.cpp b/test/native/test_ha/components.cpp new file mode 100644 index 0000000..1fe6f05 --- /dev/null +++ b/test/native/test_ha/components.cpp @@ -0,0 +1,210 @@ +#include +#include + +#define MAIN_DEVICE_ID "test" + +#include "ha.h" + +using namespace Ha; + +void setUp(void) { + // set stuff up here +} + +void tearDown(void) { + // clean stuff up here +} + +void testDevice(void) { + auto d = DeviceConfig::create("1").withName("name").withModel("model").withArea("area").withManufacturer("man"); + + StaticJsonDocument<256> doc; + d.buildConfig(doc); + + JsonObject dev = doc["device"]; + TEST_ASSERT_TRUE(doc.containsKey("device")); + TEST_ASSERT_EQUAL_STRING("name", dev["name"]); + TEST_ASSERT_EQUAL_STRING("model", dev["model"]); + TEST_ASSERT_EQUAL_STRING("area", dev["suggested_area"]); + TEST_ASSERT_EQUAL_STRING("man", dev["manufacturer"]); + TEST_ASSERT_TRUE(dev.containsKey("identifiers")); + TEST_ASSERT_EQUAL_STRING("1", dev["identifiers"][0]); +} + +void testButton(void) { + Button b("a_name", "id"); + + StaticJsonDocument<256> doc; + b.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING(MAIN_DEVICE_ID"_id", doc["unique_id"]); + TEST_ASSERT_EQUAL_STRING("homeassistant/button/" MAIN_DEVICE_ID "/id/set", doc["command_topic"]); + TEST_ASSERT_FALSE(doc["retain"]); + TEST_ASSERT_EQUAL_STRING("a_name", doc["name"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["device_class"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["entity_category"]); + TEST_ASSERT_NOT_NULL(Command::mapCommandTopics[doc["command_topic"]]); +} + +void testSensor(void) { + Sensor s("a_name", "id"); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING(MAIN_DEVICE_ID"_id", doc["unique_id"]); + TEST_ASSERT_EQUAL_STRING("homeassistant/sensor/" MAIN_DEVICE_ID "/id/state", doc["state_topic"]); + TEST_ASSERT_EQUAL_STRING("a_name", doc["name"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["device_class"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["entity_category"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["unit_of_measurement"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["value_template"]); + TEST_ASSERT_EQUAL_INT(0, doc["suggested_display_precision"]); + TEST_ASSERT_NOT_NULL(Sensor::mapSensors["id"]); +} + +void testNumericSensor1(void) { + Sensor s("a_name", "id"); + s.deviceClass = "class"; + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +void testNumericSensor2(void) { + Sensor s("a_name", "id"); + s.unitMeasure = "%"; + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +void testSwitch(void) { + Switch s("a_name", "id"); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING(MAIN_DEVICE_ID"_id", doc["unique_id"]); + TEST_ASSERT_EQUAL_STRING("homeassistant/switch/" MAIN_DEVICE_ID "/id/set", doc["command_topic"]); + TEST_ASSERT_FALSE(doc["retain"]); + TEST_ASSERT_EQUAL_STRING("a_name", doc["name"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["device_class"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["entity_category"]); + TEST_ASSERT_NOT_NULL(Command::mapCommandTopics[doc["command_topic"]]); + + TEST_ASSERT_EQUAL_STRING(NULL, doc["state_topic"]); +} + +void testSwitchWithState(void) { + Switch s("a_name", "id"); + s.withStateTopic(); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING("homeassistant/switch/" MAIN_DEVICE_ID "/id/state", doc["state_topic"]); +} + +void testNumber(void) { + Number n("a_name", "id", nullptr); + + StaticJsonDocument<256> doc; + n.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING(MAIN_DEVICE_ID"_id", doc["unique_id"]); + TEST_ASSERT_EQUAL_INT16(1, doc["min"]); + TEST_ASSERT_EQUAL_INT16(100, doc["max"]); + TEST_ASSERT_EQUAL_INT16(1, doc["step"]); + + TEST_ASSERT_EQUAL_STRING("homeassistant/number/" MAIN_DEVICE_ID "/id/set", doc["command_topic"]); + TEST_ASSERT_FALSE(doc["retain"]); + TEST_ASSERT_EQUAL_STRING("a_name", doc["name"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["device_class"]); + TEST_ASSERT_EQUAL_STRING(NULL, doc["entity_category"]); + TEST_ASSERT_NOT_NULL(Command::mapCommandTopics[doc["command_topic"]]); + + TEST_ASSERT_EQUAL_STRING(NULL, doc["state_topic"]); +} + +void testTemperatureSensor(void) { + TemperatureSensor s("id"); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING("Temperature", doc["name"]); + TEST_ASSERT_EQUAL_STRING("temperature", doc["device_class"]); + TEST_ASSERT_EQUAL_STRING("°C", doc["unit_of_measurement"]); + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +void testHumiditySensor(void) { + HumiditySensor s("id"); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING("Humidity", doc["name"]); + TEST_ASSERT_EQUAL_STRING("humidity", doc["device_class"]); + TEST_ASSERT_EQUAL_STRING("%", doc["unit_of_measurement"]); + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +void testPressureSensor(void) { + PressureSensor s("id"); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING("Pressure", doc["name"]); + TEST_ASSERT_EQUAL_STRING("pressure", doc["device_class"]); + TEST_ASSERT_EQUAL_STRING("hPa", doc["unit_of_measurement"]); + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +void testVoltageSensor(void) { + VoltageSensor s("id", "a_name", nullptr); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING("a_name", doc["name"]); + TEST_ASSERT_EQUAL_STRING("voltage", doc["device_class"]); + TEST_ASSERT_EQUAL_STRING("V", doc["unit_of_measurement"]); + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +void testBatterySensor(void) { + BatterySensor s("id", "a_name", nullptr); + + StaticJsonDocument<256> doc; + s.buildConfig(doc); + + TEST_ASSERT_EQUAL_STRING("a_name", doc["name"]); + TEST_ASSERT_EQUAL_STRING("battery", doc["device_class"]); + TEST_ASSERT_EQUAL_STRING("%", doc["unit_of_measurement"]); + TEST_ASSERT_EQUAL_INT(2, doc["suggested_display_precision"]); +} + +int main(int argc, char **argv) { + UNITY_BEGIN(); + RUN_TEST(testDevice); + RUN_TEST(testButton); + RUN_TEST(testSensor); + RUN_TEST(testTemperatureSensor); + RUN_TEST(testHumiditySensor); + RUN_TEST(testPressureSensor); + RUN_TEST(testVoltageSensor); + RUN_TEST(testBatterySensor); + RUN_TEST(testNumericSensor1); + RUN_TEST(testNumericSensor2); + RUN_TEST(testSwitch); + RUN_TEST(testSwitchWithState); + RUN_TEST(testNumber); + return UNITY_END(); +}