summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeva <deva>2009-08-07 13:00:10 +0000
committerdeva <deva>2009-08-07 13:00:10 +0000
commit1e1217e49bcac9228e37c7b6868d63da900ab07f (patch)
treef963957dcbc8ffe313e6eb41fc6fbb8f939b2993
parent83722ef5a1c46ee3e9a15d9c16daf227f06e56cb (diff)
Unit test and header documentation.
-rw-r--r--server/src/widgetgenerator.cc121
-rw-r--r--server/src/widgetgenerator.h15
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 &macro, 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 &macro,
LUAQueryMapper &mapper,