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 }