File indexing completed on 2024-05-12 16:45:26
0001 /*************************************************************************** 0002 * SPDX-FileCopyrightText: 2022 S. MANKOWSKI stephane@mankowski.fr 0003 * SPDX-FileCopyrightText: 2022 G. DE BURE support@mankowski.fr 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 ***************************************************************************/ 0006 /** @file 0007 * This file is a test script. 0008 * 0009 * @author Stephane MANKOWSKI / Guillaume DE BURE 0010 */ 0011 #include "skgtestmacro.h" 0012 #include "skgbankincludes.h" 0013 #include "skgimportexportmanager.h" 0014 0015 /** 0016 * The main function of the unit test 0017 * @param argc the number of arguments 0018 * @param argv the list of arguments 0019 */ 0020 int main(int argc, char** argv) 0021 { 0022 Q_UNUSED(argc) 0023 Q_UNUSED(argv) 0024 0025 // Init test 0026 SKGINITTEST(true) 0027 0028 // ============================================================================ 0029 { 0030 // Test import OFX skrooge 0031 SKGDocumentBank document1; 0032 SKGTESTERROR(QStringLiteral("document1.initialize()"), document1.initialize(), true) 0033 0034 SKGError err; 0035 // Initialisation document 0036 { 0037 // Scope of the transaction 0038 SKGBEGINTRANSACTION(document1, QStringLiteral("IMPORT_OFX"), err) 0039 SKGImportExportManager imp1(&document1, QUrl::fromLocalFile(SKGTest::getTestPath(QStringLiteral("IN")) % "/skgtestimportofx/385366.ofx")); 0040 SKGTESTERROR(QStringLiteral("imp1.importFile"), imp1.importFile(), true) 0041 } 0042 0043 // Check static methods 0044 { 0045 auto list = SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::SEARCH); 0046 list << SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::UPDATE); 0047 list << SKGRuleObject::getListOfOperators(SKGServices::INTEGER, SKGRuleObject::SEARCH); 0048 list << SKGRuleObject::getListOfOperators(SKGServices::INTEGER, SKGRuleObject::UPDATE); 0049 list << SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::SEARCH); 0050 list << SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::UPDATE); 0051 list << SKGRuleObject::getListOfOperators(SKGServices::DATE, SKGRuleObject::SEARCH); 0052 list << SKGRuleObject::getListOfOperators(SKGServices::DATE, SKGRuleObject::UPDATE); 0053 list << SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::ALARM); 0054 list << SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::APPLYTEMPLATE); 0055 for (const auto& i : qAsConst(list)) { 0056 SKGRuleObject::getDisplayForOperator(i, QLatin1String(""), QLatin1String(""), QLatin1String("")); 0057 SKGRuleObject::getToolTipForOperator(i); 0058 } 0059 SKGRuleObject::getListOfOperators(SKGServices::INTEGER, SKGRuleObject::SEARCH); 0060 SKGRuleObject::getListOfOperators(SKGServices::FLOAT, SKGRuleObject::SEARCH); 0061 SKGRuleObject::getListOfOperators(SKGServices::DATE, SKGRuleObject::SEARCH); 0062 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::SEARCH); 0063 SKGRuleObject::getListOfOperators(SKGServices::TRISTATE, SKGRuleObject::SEARCH); 0064 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::SEARCH); 0065 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::SEARCH); 0066 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::SEARCH); 0067 0068 SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::UPDATE); 0069 SKGRuleObject::getListOfOperators(SKGServices::INTEGER, SKGRuleObject::UPDATE); 0070 SKGRuleObject::getListOfOperators(SKGServices::FLOAT, SKGRuleObject::UPDATE); 0071 SKGRuleObject::getListOfOperators(SKGServices::DATE, SKGRuleObject::UPDATE); 0072 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::UPDATE); 0073 SKGRuleObject::getListOfOperators(SKGServices::TRISTATE, SKGRuleObject::UPDATE); 0074 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::UPDATE); 0075 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::UPDATE); 0076 SKGRuleObject::getListOfOperators(SKGServices::BOOL, SKGRuleObject::UPDATE); 0077 0078 SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::ALARM); 0079 0080 SKGRuleObject::getListOfOperators(SKGServices::TEXT, SKGRuleObject::APPLYTEMPLATE); 0081 } 0082 0083 // Rule creation 0084 SKGRuleObject rule1; 0085 { 0086 SKGBEGINTRANSACTION(document1, QStringLiteral("RULE_1"), err) 0087 0088 // Create rule 0089 rule1 = SKGRuleObject(&document1); 0090 QString searchDef = QStringLiteral("<element> <!--OR-->" 0091 "<element> <!--AND-->" 0092 "<element attribute=\"t_comment\" operator=\"#ATT#='#V1S#'\" value=\"REINVESTMENT\"/>" 0093 "</element>" 0094 "</element>"); 0095 SKGTESTERROR(QStringLiteral("RULE:setXMLSearchDefinition"), rule1.setXMLSearchDefinition(searchDef), true) 0096 SKGTEST(QStringLiteral("RULE:getXMLSearchDefinition"), rule1.getXMLSearchDefinition(), searchDef) 0097 0098 QString actionDef = QStringLiteral("<element> <!--OR-->" 0099 "<element> <!--AND-->" 0100 "<element attribute=\"t_mode\" operator=\"#ATT#='#V1#'\" value=\"modified\" />" 0101 "</element>" 0102 "</element>"); 0103 SKGTESTERROR(QStringLiteral("RULE:setXMLActionDefinition"), rule1.setXMLActionDefinition(actionDef), true) 0104 SKGTEST(QStringLiteral("RULE:getXMLActionDefinition"), rule1.getXMLActionDefinition(), actionDef) 0105 0106 SKGTESTERROR(QStringLiteral("RULE:setSearchDescription"), rule1.setSearchDescription(QStringLiteral("search description")), true) 0107 SKGTEST(QStringLiteral("RULE:getSearchDescription"), rule1.getSearchDescription(), QStringLiteral("search description")) 0108 SKGTESTERROR(QStringLiteral("RULE:setActionDescription"), rule1.setActionDescription(QStringLiteral("action description")), true) 0109 SKGTEST(QStringLiteral("RULE:getActionDescription"), rule1.getActionDescription(), QStringLiteral("action description")) 0110 0111 SKGTESTERROR(QStringLiteral("RULE:setActionType"), rule1.setActionType(SKGRuleObject::SEARCH), true) 0112 SKGTESTERROR(QStringLiteral("RULE:setActionType"), rule1.setActionType(SKGRuleObject::APPLYTEMPLATE), true) 0113 SKGTESTERROR(QStringLiteral("RULE:setActionType"), rule1.setActionType(SKGRuleObject::UPDATE), true) 0114 SKGTEST(QStringLiteral("RULE:getActionType"), static_cast<unsigned int>(rule1.getActionType()), static_cast<unsigned int>(SKGRuleObject::UPDATE)) 0115 0116 SKGTESTERROR(QStringLiteral("RULE:setOrder"), rule1.setOrder(-1), true) 0117 SKGTEST(QStringLiteral("RULE:getOrder"), rule1.getOrder(), 1) 0118 0119 SKGTESTBOOL("RULE:setOrder", rule1.isBookmarked(), false) 0120 SKGTESTERROR(QStringLiteral("RULE:getOrder"), rule1.bookmark(true), true) 0121 SKGTESTBOOL("RULE:setOrder", rule1.isBookmarked(), true) 0122 0123 SKGTESTERROR(QStringLiteral("UNIT:save"), rule1.save(), true) 0124 SKGTESTERROR(QStringLiteral("UNIT:load"), rule1.load(), true) 0125 0126 rule1.getDisplayName(); 0127 0128 SKGRuleObject rule1bis = SKGRuleObject(rule1); 0129 SKGRuleObject rule1ter = SKGRuleObject(static_cast<SKGObjectBase>(rule1)); 0130 SKGRuleObject rule4; 0131 rule4 = static_cast<SKGObjectBase>(rule1); 0132 SKGRuleObject rule5(SKGObjectBase(&document1, QStringLiteral("xxx"), rule1.getID())); 0133 } 0134 0135 // Rule creation (ALARM) 0136 SKGRuleObject alarm1; 0137 { 0138 SKGBEGINTRANSACTION(document1, QStringLiteral("ALARM_1"), err) 0139 0140 // Create rule 0141 alarm1 = SKGRuleObject(&document1); 0142 QString searchDef = QStringLiteral("<element> <!--OR-->" 0143 "<element> <!--AND-->" 0144 "<element attribute=\"t_comment\" operator=\"#ATT#='#V1S#'\" value=\"REINVESTMENT\"/>" 0145 "</element>" 0146 "</element>"); 0147 SKGTESTERROR(QStringLiteral("RULE:setXMLSearchDefinition"), alarm1.setXMLSearchDefinition(searchDef), true) 0148 SKGTEST(QStringLiteral("RULE:getXMLSearchDefinition"), alarm1.getXMLSearchDefinition(), searchDef) 0149 0150 QString actionDef = QStringLiteral("<element> <!--OR-->" 0151 "<element> <!--AND-->" 0152 "<element attribute=\"f_REALCURRENTAMOUNT\" operator=\"ABS(TOTAL(#ATT#))#OP##V1#,ABS(TOTAL(#ATT#)), #V1#, '#V2S#'\" value=\"100\" value2=\"Take care!\"operator2=\">=\"/>" 0153 "</element>" 0154 "</element>"); 0155 SKGTESTERROR(QStringLiteral("RULE:setXMLActionDefinition"), alarm1.setXMLActionDefinition(actionDef), true) 0156 SKGTEST(QStringLiteral("RULE:getXMLActionDefinition"), alarm1.getXMLActionDefinition(), actionDef) 0157 0158 SKGTESTERROR(QStringLiteral("RULE:setSearchDescription"), alarm1.setSearchDescription(QStringLiteral("search description")), true) 0159 SKGTEST(QStringLiteral("RULE:getSearchDescription"), alarm1.getSearchDescription(), QStringLiteral("search description")) 0160 SKGTESTERROR(QStringLiteral("RULE:setActionDescription"), alarm1.setActionDescription(QStringLiteral("action description")), true) 0161 SKGTEST(QStringLiteral("RULE:getActionDescription"), alarm1.getActionDescription(), QStringLiteral("action description")) 0162 0163 SKGTESTERROR(QStringLiteral("RULE:setActionType"), alarm1.setActionType(SKGRuleObject::ALARM), true) 0164 SKGTEST(QStringLiteral("RULE:getActionType"), static_cast<unsigned int>(alarm1.getActionType()), static_cast<unsigned int>(SKGRuleObject::ALARM)) 0165 0166 SKGTESTERROR(QStringLiteral("RULE:setOrder"), alarm1.setOrder(-1), true) 0167 SKGTEST(QStringLiteral("RULE:getOrder"), alarm1.getOrder(), 2) 0168 0169 SKGTESTERROR(QStringLiteral("UNIT:save"), alarm1.save(), true) 0170 SKGTESTERROR(QStringLiteral("UNIT:load"), alarm1.load(), true) 0171 0172 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), alarm1.getAlarmInfo().Message, QStringLiteral("Take care!")) 0173 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), static_cast<unsigned int>(alarm1.getAlarmInfo().Raised), static_cast<unsigned int>(true)) 0174 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), alarm1.getAlarmInfo().Amount, 121.41) 0175 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), alarm1.getAlarmInfo().Limit, 100) 0176 } 0177 0178 // Process rule1 0179 { 0180 SKGBEGINTRANSACTION(document1, QStringLiteral("PROCESS_1"), err) 0181 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(), true) 0182 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::IMPORTING), true) 0183 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::IMPORTEDNOTVALIDATE), true) 0184 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::IMPORTED), true) 0185 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::NOTCHECKED), true) 0186 } 0187 0188 // Rule creation (BUG:345974) 0189 { 0190 SKGBEGINTRANSACTION(document1, QStringLiteral("ALARM_2"), err) 0191 0192 // Create rule 0193 alarm1 = SKGRuleObject(&document1); 0194 QString searchDef = QStringLiteral("<element> <!--OR-->" 0195 "<element> <!--AND-->" 0196 "<element attribute=\"t_comment\" operator=\"#ATT#='#V1S#'\" value=\"REINVESTMENT\"/>" 0197 "</element>" 0198 "</element>"); 0199 SKGTESTERROR(QStringLiteral("RULE:setXMLSearchDefinition"), alarm1.setXMLSearchDefinition(searchDef), true) 0200 SKGTEST(QStringLiteral("RULE:getXMLSearchDefinition"), alarm1.getXMLSearchDefinition(), searchDef) 0201 0202 QString actionDef = QStringLiteral("<element> <!--OR-->" 0203 "<element> <!--AND-->" 0204 "<element attribute=\"f_REALCURRENTAMOUNT\" operator=\"ABS(TOTAL(#ATT#))#OP##V1#,ABS(TOTAL(#ATT#)), #V1#, '#V2S#'\" value=\"200\" value2=\"Take care!\"operator2=\">=\"/>" 0205 "</element>" 0206 "</element>"); 0207 SKGTESTERROR(QStringLiteral("RULE:setXMLActionDefinition"), alarm1.setXMLActionDefinition(actionDef), true) 0208 SKGTEST(QStringLiteral("RULE:getXMLActionDefinition"), alarm1.getXMLActionDefinition(), actionDef) 0209 0210 SKGTESTERROR(QStringLiteral("RULE:setSearchDescription"), alarm1.setSearchDescription(QStringLiteral("search description")), true) 0211 SKGTEST(QStringLiteral("RULE:getSearchDescription"), alarm1.getSearchDescription(), QStringLiteral("search description")) 0212 SKGTESTERROR(QStringLiteral("RULE:setActionDescription"), alarm1.setActionDescription(QStringLiteral("action description")), true) 0213 SKGTEST(QStringLiteral("RULE:getActionDescription"), alarm1.getActionDescription(), QStringLiteral("action description")) 0214 0215 SKGTESTERROR(QStringLiteral("RULE:setActionType"), alarm1.setActionType(SKGRuleObject::ALARM), true) 0216 SKGTEST(QStringLiteral("RULE:getActionType"), static_cast<unsigned int>(alarm1.getActionType()), static_cast<unsigned int>(SKGRuleObject::ALARM)) 0217 0218 SKGTESTERROR(QStringLiteral("UNIT:save"), alarm1.save(), true) 0219 SKGTESTERROR(QStringLiteral("UNIT:load"), alarm1.load(), true) 0220 0221 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), alarm1.getAlarmInfo().Message, QStringLiteral("Take care!")) 0222 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), static_cast<unsigned int>(alarm1.getAlarmInfo().Raised), static_cast<unsigned int>(false)) 0223 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), alarm1.getAlarmInfo().Amount, 121.41) 0224 SKGTEST(QStringLiteral("RULE:getAlarmInfo"), alarm1.getAlarmInfo().Limit, 200) 0225 } 0226 0227 // Process rule1 0228 { 0229 SKGBEGINTRANSACTION(document1, QStringLiteral("PROCESS_1"), err) 0230 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(), true) 0231 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::IMPORTING), true) 0232 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::IMPORTEDNOTVALIDATE), true) 0233 SKGTESTERROR(QStringLiteral("RULE:execute"), rule1.execute(SKGRuleObject::IMPORTED), true) 0234 } 0235 0236 document1.dump(DUMPOPERATION | DUMPACCOUNT); 0237 } 0238 0239 0240 // ============================================================================ 0241 { 0242 // Test import OFX skrooge 0243 SKGDocumentBank document1; 0244 SKGTESTERROR(QStringLiteral("document1.load()"), document1.load(SKGTest::getTestPath(QStringLiteral("IN")) % "skgtestrule/file.skg"), true) 0245 0246 // Process rules 0247 SKGError err; 0248 { 0249 SKGBEGINTRANSACTION(document1, QStringLiteral("PROCESS_1"), err) 0250 SKGObjectBase::SKGListSKGObjectBase rules; 0251 SKGTESTERROR(QStringLiteral("RULE:execute"), document1.getObjects(QStringLiteral("rule"), QLatin1String(""), rules), true) 0252 for (int i = 0; i < rules.count(); ++i) { 0253 SKGRuleObject rule(rules.at(i)); 0254 SKGTESTERROR(QStringLiteral("RULE:execute"), rule.execute(), true) 0255 } 0256 } 0257 0258 { 0259 // Scope of the transaction 0260 SKGBEGINTRANSACTION(document1, QStringLiteral("IMPORT_OFX"), err) 0261 SKGImportExportManager imp1(&document1, QUrl::fromLocalFile(SKGTest::getTestPath(QStringLiteral("IN")) % "/skgtestimportofx/ofx_spec201_stmtrs_example.ofx")); 0262 imp1.setAutomaticApplyRules(true); 0263 SKGTESTERROR(QStringLiteral("imp1.importFile"), imp1.importFile(), true) 0264 } 0265 } 0266 0267 // End test 0268 SKGENDTEST() 0269 }