From 8257e9ab5112689552d2401248d632589bfa9b08 Mon Sep 17 00:00:00 2001 From: Magnus Date: Fri, 2 Dec 2022 14:07:19 +0100 Subject: [PATCH] Added templating tests --- src/templating.cpp | 28 ++++++------- src/templating.hpp | 2 +- src/tests/tests_templating.cpp | 73 ++++++++++++++++++++++++++++++++-- 3 files changed, 82 insertions(+), 21 deletions(-) diff --git a/src/templating.cpp b/src/templating.cpp index 90f6818..b51d570 100644 --- a/src/templating.cpp +++ b/src/templating.cpp @@ -80,9 +80,6 @@ const char mqttFormat[] PROGMEM = "ispindel/${mdns}/interval:${sleep-interval}|" "ispindel/${mdns}/RSSI:${rssi}|"; -// -// Initialize the variables -// void TemplatingEngine::initialize(float angle, float gravitySG, float corrGravitySG, float tempC, float runTime) { @@ -138,10 +135,8 @@ void TemplatingEngine::initialize(float angle, float gravitySG, #endif } -// -// Create the data using defined template. -// -const char* TemplatingEngine::create(TemplatingEngine::Templates idx) { +// the useDefaultTemplate param is there to support unit tests. +const char* TemplatingEngine::create(TemplatingEngine::Templates idx, bool useDefaultTemplate) { String fname; _baseTemplate.reserve(600); @@ -169,15 +164,16 @@ const char* TemplatingEngine::create(TemplatingEngine::Templates idx) { break; } - // TODO: Add code to load templates from disk if they exist. - File file = LittleFS.open(fname, "r"); - if (file) { - char buf[file.size() + 1]; - memset(&buf[0], 0, file.size() + 1); - file.readBytes(&buf[0], file.size()); - _baseTemplate = String(&buf[0]); - file.close(); - Log.notice(F("TPL : Template loaded from disk %s." CR), fname.c_str()); + if (!useDefaultTemplate) { + File file = LittleFS.open(fname, "r"); + if (file) { + char buf[file.size() + 1]; + memset(&buf[0], 0, file.size() + 1); + file.readBytes(&buf[0], file.size()); + _baseTemplate = String(&buf[0]); + file.close(); + Log.notice(F("TPL : Template loaded from disk %s." CR), fname.c_str()); + } } #if LOG_LEVEL == 6 diff --git a/src/templating.hpp b/src/templating.hpp index a5da12b..f843476 100644 --- a/src/templating.hpp +++ b/src/templating.hpp @@ -200,7 +200,7 @@ class TemplatingEngine { } void initialize(float angle, float gravitySG, float corrGravitySG, float tempC, float runTime); - const char *create(TemplatingEngine::Templates idx); + const char *create(TemplatingEngine::Templates idx, bool useDefaultTemplate = false); }; #endif // SRC_TEMPLATING_HPP_ diff --git a/src/tests/tests_templating.cpp b/src/tests/tests_templating.cpp index 4679f49..f789592 100644 --- a/src/tests/tests_templating.cpp +++ b/src/tests/tests_templating.cpp @@ -21,12 +21,77 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include -#include +#include +#include #include -test(template_applyTemplate) { - Serial.println("Not implemented yet (template_applyTemplate)"); +test(template_applyTemplate1) { + TemplatingEngine e; + char buffer[20]; + myConfig.setMDNS("gravitymon"); + + e.initialize(45.0, 1.123, 1.223, 21.2, 2.98); + String s = e.create(TemplatingEngine::TEMPLATE_HTTP1); + String id = myConfig.getID(); + String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2); + batt.trim(); + String v = "{\"name\" : \"gravitymon\", \"ID\": \"" + id + "\", \"token\" : \"\", \"interval\": 900, \"temperature\": 21.2, \"temp_units\": \"C\", \"gravity\": 1.1230, \"angle\": 45.00, \"battery\": " + batt + ", \"RSSI\": 31, \"corr-gravity\": 1.2230, \"gravity-unit\": \"G\", \"run-time\": 3.0 }"; + assertEqual(s, v); +} + +test(template_applyTemplate2) { + TemplatingEngine e; + char buffer[20]; + myConfig.setMDNS("gravitymon"); + + e.initialize(45.0, 1.123, 1.223, 21.2, 2.98); + String s = e.create(TemplatingEngine::TEMPLATE_HTTP2); + String id = myConfig.getID(); + String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2); + batt.trim(); + String v = "{\"name\" : \"gravitymon\", \"ID\": \"" + id + "\", \"token\" : \"\", \"interval\": 900, \"temperature\": 21.2, \"temp_units\": \"C\", \"gravity\": 1.1230, \"angle\": 45.00, \"battery\": " + batt + ", \"RSSI\": 31, \"corr-gravity\": 1.2230, \"gravity-unit\": \"G\", \"run-time\": 3.0 }"; + assertEqual(s, v); +} + +test(template_applyTemplate3) { + TemplatingEngine e; + char buffer[20]; + myConfig.setMDNS("gravitymon"); + + e.initialize(45.0, 1.123, 1.223, 21.2, 2.98); + String s = e.create(TemplatingEngine::TEMPLATE_HTTP3); + String id = myConfig.getID(); + String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2); + batt.trim(); + String v = "?name=gravitymon&id=" + id + "&token=&interval=900&temperature=21.2&temp-units=C&gravity=1.1230&angle=45.00&battery=" + batt + "&rssi=31&corr-gravity=1.2230&gravity-unit=G&run-time=3.0"; + assertEqual(s, v); +} + +test(template_applyTemplate4) { + TemplatingEngine e; + char buffer[20]; + myConfig.setMDNS("gravitymon"); + + e.initialize(45.0, 1.123, 1.223, 21.2, 2.98); + String s = e.create(TemplatingEngine::TEMPLATE_INFLUX); + String id = myConfig.getID(); + String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2); + batt.trim(); + String v = "measurement,host=gravitymon,device=" + id + ",temp-format=C,gravity-format=G gravity=1.1230,corr-gravity=1.2230,angle=45.00,temp=21.2,battery=" + batt + ",rssi=31\n"; + assertEqual(s, v); +} + +test(template_applyTemplate5) { + TemplatingEngine e; + char buffer[20]; + myConfig.setMDNS("gravitymon"); + + e.initialize(45.0, 1.123, 1.223, 21.2, 2.98); + String s = e.create(TemplatingEngine::TEMPLATE_MQTT); + String batt = convertFloatToString( myBatteryVoltage.getVoltage(), &buffer[0], 2); + batt.trim(); + String v = "ispindel/gravitymon/tilt:45.00|ispindel/gravitymon/temperature:21.2|ispindel/gravitymon/temp_units:C|ispindel/gravitymon/battery:" + batt + "|ispindel/gravitymon/gravity:1.1230|ispindel/gravitymon/interval:900|ispindel/gravitymon/RSSI:31|"; + assertEqual(s, v); } // EOF \ No newline at end of file