diff options
-rw-r--r-- | server/src/widgetgenerator.cc | 121 | ||||
-rw-r--r-- | server/src/widgetgenerator.h | 15 |
2 files changed, 136 insertions, 0 deletions
diff --git a/server/src/widgetgenerator.cc b/server/src/widgetgenerator.cc index f8f3790..1e60479 100644 --- a/server/src/widgetgenerator.cc +++ b/server/src/widgetgenerator.cc @@ -198,3 +198,124 @@ std::string widgetgenerator(std::string cpr, Macro ¯o, LUAQueryMapper &mappe return send_macro_widget(macro, macro.widgets, " ", mapper, values); } + +#ifdef TEST_WIDGETGENERATOR + +#include <time.h> + +#define PATIENTID "1234567890" + +int main() +{ + time_t now = time(NULL); + + printf("Test pretty printer:\n"); + { + Macro macro; + macro.widgets.attributes["tagname"] = "lineedit"; + macro.widgets.attributes["name"] = "mywidget"; + macro.widgets.attributes["value"] = "myvalue"; + macro.widgets.attributes["map"] = "mapvalue"; + macro.widgets.widgets.push_back(macro.widgets); + + Database db("testdb", "", "", "", "", ""); + LUAQueryMapper mapper; + std::string result; + Fields fields; + QueryResult queryresult; + + // Test simple + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result != " <lineedit name=\"mywidget\" value=\"myvalue\">\n" + " <lineedit name=\"mywidget\" value=\"myvalue\"/>\n" + " </lineedit>\n") return 1; + } + + printf("Positive tests:\n"); + { + Macro macro; + macro.widgets.attributes["tagname"] = "lineedit"; + macro.widgets.attributes["name"] = "mywidget"; + macro.widgets.attributes["value"] = "myvalue"; + macro.widgets.attributes["map"] = "mapvalue"; + + Database db("testdb", "", "", "", "", ""); + LUAQueryMapper mapper; + std::string result; + Fields fields; + QueryResult queryresult; + + // Test simple + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result != " <lineedit name=\"mywidget\" value=\"myvalue\"/>\n") return 1; + + // Make a database commit and test if the value shows up + fields["mywidget"] = "testval"; + db.commitTransaction("testuser", PATIENTID, macro, fields, now); + + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result != " <lineedit name=\"mywidget\" value=\"testval\" prefilled=\"pracro\"/>\n") return 1; + + // Make a query result (newer than the db value) and see if it shows up + queryresult.timestamp = now + 1; + queryresult.source = "testsource"; + queryresult.values["mapvalue"] = "mymapvalue"; + mapper.addQueryResult(queryresult); + + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result != " <lineedit name=\"mywidget\" value=\"mymapvalue\" prefilled=\"testsource\"/>\n") return 1; + + // Make another db value (newer than the query result) and see if it shows up. + fields["mywidget"] = "testval2"; + db.commitTransaction("testuser", PATIENTID, macro, fields, now + 2); + + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result != " <lineedit name=\"mywidget\" value=\"testval2\" prefilled=\"pracro\"/>\n") return 1; + } + + printf("Negative tests:\n"); + { + Macro macro; + macro.widgets.attributes["tagname"] = "lineedit"; + macro.widgets.attributes["name"] = "mywidget"; + macro.widgets.attributes["value"] = "myvalue"; + macro.widgets.attributes["map"] = "mapvalue"; + + Database db("testdb", "", "", "", "", ""); + LUAQueryMapper mapper; + std::string result; + Fields fields; + QueryResult queryresult; + + // Test simple + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result != " <lineedit name=\"mywidget\" value=\"myvalue\"/>\n") return 1; + + // Make a database commit too old, and test if the value shows up + fields["mywidget"] = "testval"; + db.commitTransaction("testuser", PATIENTID, macro, fields, now - Conf::db_max_ttl - 1); + + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result == " <lineedit name=\"mywidget\" value=\"testval\" prefilled=\"pracro\"/>\n") return 1; + + // Make a too old query result (newer than the db value) and see if it shows up + queryresult.timestamp = now - Conf::pentominos_max_ttl - 1; + queryresult.source = "testsource"; + queryresult.values["mapvalue"] = "mymapvalue"; + mapper.addQueryResult(queryresult); + + result = widgetgenerator(PATIENTID, macro, mapper, db); + printf("[%s]\n", result.c_str()); + if(result == " <lineedit name=\"mywidget\" value=\"mymapvalue\" prefilled=\"testsource\"/>\n") return 1; + } + return 0; +} + +#endif/*TEST_WIDGETGENERATOR*/ diff --git a/server/src/widgetgenerator.h b/server/src/widgetgenerator.h index 6a27ab0..17160fc 100644 --- a/server/src/widgetgenerator.h +++ b/server/src/widgetgenerator.h @@ -34,6 +34,21 @@ #include "luaquerymapper.h" #include "database.h" +/** + * This prettyprints the Macro datastructure as XML. + * Furthermore it fills out the values of all the widgets, according to their value, + * and map attributes. + * If the value exists in the database it will be used if recent enough. + * If the map points to a value that is more recent than the one in the database (if + * there is one) it will be used. + * If no data is available from the database or the map (or they are too old), the + * value of the 'value' attribute will be used. + * @param cpr An std::string containing the patient id to use with the database lookup. + * @param macro The Macro to prettyprint. + * @param mapper The LUAQueryMapper to look for mappings in. + * @param db The Database to search for recent values. + * @return An std::srting containing the prettyprinted version of the Macro. + */ std::string widgetgenerator(std::string cpr, Macro ¯o, LUAQueryMapper &mapper, |