/*! * * Copyright (c) 2020-2025 Diality Inc. - All Rights Reserved. * \copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * \file tst_views.cpp * \author (last) Behrouz NematiPour * \date (last) 22-Feb-2024 * \author (original) Behrouz NematiPour * \date (original) 21-Apr-2020 * */ #include "tst_views.h" // Qt // Project #include "VAdjustmentResponseBase.h" #include "VTreatmentAdjustmentUltrafiltrationState.h" #include "FileHandler.h" #include "VPreTreatmentDisposablesPrimeData.h" #include "VAlarmStatus.h" #include "MsgDefs.h" #include "GuiGlobals.h" tst_views::tst_views(QObject *parent) : QObject(parent) { } void tst_views::VTreatmentAdjustmentsResponse_text_NoReason() { View::VAdjustmentResponseBase v; v.adjustment_Reason(Gui::GuiRequestReasons::REQUEST_REJECT_REASON_NONE); QVERIFY(v.text().isEmpty()); } void tst_views::VTreatmentAdjustmentsResponse_text_WAReason() { View::VAdjustmentResponseBase v; v.adjustment_Reason(Gui::GuiRequestReasons::REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE); QVERIFY(! v.text().isEmpty()); } void tst_views::tst_VTreatmentAdjustmentUltrafiltrationState_text() { View::VTreatmentAdjustmentUltrafiltrationState v; // if accepted then return empty v.adjustment_Accepted(true); v.adjustment_Reason(Gui::GuiRequestReasons::REQUEST_REJECT_REASON_NONE); QCOMPARE(v.text(), ""); // try rejected v.adjustment_Accepted(false); // if not accepted and a reason passed then the parent should translate it and return v.adjustment_Reason(Gui::GuiRequestReasons::REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE); QCOMPARE(v.text(), tr("REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE")); // if not accepted and not running v.adjustment_Reason(Gui::GuiRequestReasons::REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS); QCOMPARE(v.text(), tr("REQUEST_REJECT_REASON_UF_NOT_IN_PROGESS")); // if not accepted and not paused v.adjustment_Reason(Gui::GuiRequestReasons::REQUEST_REJECT_REASON_UF_NOT_PAUSED); QCOMPARE(v.text(), tr("REQUEST_REJECT_REASON_UF_NOT_PAUSED")); } /*! * \brief tst_views::VCreateTreatment_validation * Tests treatment parameter validation */ void tst_views::tst_createTreatment_validation() { for (int i = 0; i < 15; ++i) { View::VTreatmentCreate view; if (i != 0) view.bloodFlowRate(view.bloodFlowRate()); if (i != 1) view.dialysateFlowRate(view.dialysateFlowRate()); if (i != 2) view.treatmentDuration(view.treatmentDuration()); if (i != 3) view.heparinDispensingRate(view.heparinDispensingRate()); if (i != 4) view.heparinBolusVolume(view.heparinBolusVolume()); if (i != 5) view.heparinStopTime(view.heparinStopTime()); if (i != 6) view.salineBolusVolume(view.salineBolusVolume()); if (i != 7) view.acidConcentrate(view.acidConcentrate()); if (i != 8) view.bicarbonateConcentrate(view.bicarbonateConcentrate()); if (i != 9) view.dialyzerType(view.dialyzerType()); if (i != 10) view.dialysateTemp(view.dialysateTemp()); if (i != 11) view.arterialPressureLimitWindow(view.arterialPressureLimitWindow()); if (i != 12) view.venousPressureLimitWindow(view.venousPressureLimitWindow()); if (i != 13) view.bloodPressureMeasureInterval(view.bloodPressureMeasureInterval()); if (i != 14) view.rinsebackFlowRate(view.rinsebackFlowRate()); if (i == 15) { // QCOMPARE(view.isbloodFlowRateSet, true); // QCOMPARE(view.isdialysateFlowRateSet, true); // QCOMPARE(view.isdurationSet, true); // QCOMPARE(view.isheparinDispensingRateSet, true); // QCOMPARE(view.isheparinBolusVolumeSet, true); // QCOMPARE(view.isheparinStopTimeSet, true); // QCOMPARE(view.issalineBolusVolumeSet, true); // QCOMPARE(view.isacidConcentrateSet, true); // QCOMPARE(view.isbicarbonateConcentrateSet, true); // QCOMPARE(view.isdialyzerTypeSet, true); // QCOMPARE(view.isdialysateTempSet, true); // QCOMPARE(view.isarterialPressureLimitWindowSet, true); // QCOMPARE(view.isarterialPressureLimitHighSet, true); // QCOMPARE(view.isvenousPressureLimitWindowSet, true); // QCOMPARE(view.isvenousPressureLimitAsymtrcSet, true); // QCOMPARE(view.isbloodPressureMeasureIntervalSet, true); // QCOMPARE(view.isrinsebackFlowRateSet, true); // QCOMPARE(view.validate(view.treatmentData), true); // check getters QCOMPARE(view.bloodFlowRate(), view.bloodFlowRate()); QCOMPARE(view.dialysateFlowRate(), view.dialysateFlowRate()); QCOMPARE(view.treatmentDuration(), view.treatmentDuration()); QCOMPARE(view.heparinDispensingRate(),view.heparinDispensingRate()); QCOMPARE(view.heparinBolusVolume(),view.heparinBolusVolume()); QCOMPARE(view.heparinStopTime(),view.heparinStopTime()); QCOMPARE(view.salineBolusVolume(), view.salineBolusVolume()); QCOMPARE(view.acidConcentrate(), view.acidConcentrate()); QCOMPARE(view.bicarbonateConcentrate(), view.bicarbonateConcentrate()); QCOMPARE(view.dialyzerType(), view.dialyzerType()); QCOMPARE(view.dialysateTemp(), view.dialysateTemp()); QCOMPARE(view.arterialPressureLimitWindow(),view.arterialPressureLimitWindow()); QCOMPARE(view.venousPressureLimitWindow(), view.venousPressureLimitWindow()); QCOMPARE(view.venousPressureLimitAsymtrc(), view.venousPressureLimitAsymtrc()); QCOMPARE(view.bloodPressureMeasureInterval(), view.bloodPressureMeasureInterval()); QCOMPARE(view.rinsebackFlowRate(), view.rinsebackFlowRate()); view.doValidation(); } else { // QCOMPARE(view.validate(view.treatmentData), false); } } } /*! * \brief tst_views::VCreateTreatment_simulate_valid_parameters * Simulates a user selection of valid parameters * \param view VCreateTreatment object to be set with valid parameters */ void tst_views::VCreateTreatment_simulate_valid_parameters(View::VTreatmentCreate &view) { view.bloodFlowRate(view.bloodFlowRate()); view.dialysateFlowRate(view.dialysateFlowRate()); view.treatmentDuration(view.treatmentDuration()); view.heparinDispensingRate(view.heparinDispensingRate()); view.heparinBolusVolume(view.heparinBolusVolume()); view.heparinStopTime(view.heparinStopTime()); view.salineBolusVolume(view.salineBolusVolume()); view.acidConcentrate(view.acidConcentrate()); view.bicarbonateConcentrate(view.bicarbonateConcentrate()); view.dialyzerType(view.dialyzerType()); view.dialysateTemp(view.dialysateTemp()); view.arterialPressureLimitWindow(view.arterialPressureLimitWindow()); view.venousPressureLimitWindow(view.venousPressureLimitWindow()); view.venousPressureLimitAsymtrc(view.venousPressureLimitAsymtrc()); view.bloodPressureMeasureInterval(view.bloodPressureMeasureInterval()); view.rinsebackFlowRate(view.rinsebackFlowRate()); } /*! * \brief tst_views::VCreateTreatment_init_ranges * Initializes the treatment parameter ranges * \param obj - QJsonObject to write the ranges to */ void tst_views::VCreateTreatment_init_ranges(QJsonObject &obj) { obj["bloodFlowRate"] = 100; obj["bloodFlowRate"] = 500; obj["dialysateFlowRate"] = 100; obj["dialysateFlowRate"] = 600; obj["treatmentDuration"] = 60; obj["heparinDispensingRate"] = 0; obj["heparinDispensingRate"] = 1000; obj["heparinBolusVolume"] = 100; obj["heparinBolusVolume"] = 2000; obj["heparinStopTime"] = 2000; obj["salineBolusVolume"] = 100; obj["salineBolusVolume"] = 300; // obj["acidConcentrateOptions"] = QJsonArray({ // "08-1251-1", // "08-2251-0", // "08-3251-9" // }), // obj["bicarbonateConcentrateOptions"] = QJsonArray({ // "Dimesol - BC-201" // }), // obj["dialyzerTypeOptions"] = QJsonArray({ // "Nipro Elisio-H 17", // "Nipro Elisio-H 19", // "Fresenius Optiflux F160NRe", // "Fresenius Optiflux F180NRe" // }); obj["dialysateTemp"] = 35; obj["dialysateTemp"] = 39; obj["arterialPressureLimitWindow"] = -300; obj["arterialPressureLimitWindow"] = 200; // obj["arterialPressureLimitHigh"] = -300; // obj["arterialPressureLimitHigh"] = 200; obj["venousPressureLimitWindow"] = -100; obj["venousPressureLimitWindow"] = 600; obj["venousPressureLimitAsymtrc"] = 0; obj["venousPressureLimitAsymtrc"] = 600; obj["bloodPressureMeasureInterval"] = 0; obj["bloodPressureMeasureInterval"] = 30; obj["rinsebackFlowRate"] = 50; obj["rinsebackFlowRate"] = 150; } /*! * \brief tst_views::VCreateTreatment_validation_ranges * Tests the treatment parameter validation ranges are checked */ void tst_views::VCreateTreatment_validation_ranges() { View::VTreatmentCreate v; // check resolutions QCOMPARE(v.bloodFlowRate(), quint32(25)); QCOMPARE(v.dialysateFlowRate(), quint32(50 )); QCOMPARE(v.treatmentDuration(), quint32(15 )); QCOMPARE(v.heparinDispensingRate(), qreal(0.1)); QCOMPARE(v.heparinBolusVolume(), qreal(0.1)); QCOMPARE(v.heparinStopTime(), quint32(10 )); QCOMPARE(v.salineBolusVolume(), quint32(100)); QCOMPARE(v.acidConcentrate(), quint32(1)); QCOMPARE(v.bicarbonateConcentrate(), quint32(1)); QCOMPARE(v.dialyzerType(), quint32(1)); QCOMPARE(v.dialysateTemp(), qreal(0.5)); QCOMPARE(v.arterialPressureLimitWindow(), qint32(10)); // QCOMPARE(v.arterialPressureLimitHigh(), qint32(10)); QCOMPARE(v.venousPressureLimitWindow(), qint32(10)); QCOMPARE(v.venousPressureLimitAsymtrc(), qint32(10)); QCOMPARE(v.bloodPressureMeasureInterval(), quint32(5)); QCOMPARE(v.rinsebackFlowRate(), quint32(25)); v.bloodFlowRate (quint32(26)); v.dialysateFlowRate (quint32(51)); v.treatmentDuration (quint32(16)); v.heparinDispensingRate (qreal(0.2)); v.heparinBolusVolume (qreal(0.2)); v.heparinStopTime (quint32(11)); v.salineBolusVolume (quint32(101)); v.acidConcentrate (quint32(2)); v.bicarbonateConcentrate (quint32(2)); v.dialyzerType (quint32(2)); v.dialysateTemp (qreal(0.6)); v.arterialPressureLimitWindow (qint32(11)); v.venousPressureLimitWindow (qint32(11)); v.venousPressureLimitAsymtrc (qint32(11)); v.bloodPressureMeasureInterval (quint32(6)); v.rinsebackFlowRate (quint32(26)); QCOMPARE(v.bloodFlowRate(), quint32(26)); QCOMPARE(v.dialysateFlowRate(), quint32(51)); QCOMPARE(v.treatmentDuration(), quint32(16)); QCOMPARE(v.heparinDispensingRate(), qreal(0.2)); QCOMPARE(v.heparinBolusVolume(), qreal(0.2)); QCOMPARE(v.heparinStopTime(), quint32(11)); QCOMPARE(v.salineBolusVolume(), quint32(101)); QCOMPARE(v.acidConcentrate(), quint32(2)); QCOMPARE(v.bicarbonateConcentrate(), quint32(2)); QCOMPARE(v.dialyzerType(), quint32(2)); QCOMPARE(v.dialysateTemp(), qreal(0.6)); QCOMPARE(v.arterialPressureLimitWindow(), qint32(11)); QCOMPARE(v.venousPressureLimitWindow(), qint32(11)); QCOMPARE(v.venousPressureLimitAsymtrc(), qint32(11)); QCOMPARE(v.bloodPressureMeasureInterval(), quint32(6)); QCOMPARE(v.rinsebackFlowRate(), quint32(26)); View::VTreatmentCreate view; // adjust quint32 enums view.bloodFlowRate(1); view.dialysateFlowRate(1); view.treatmentDuration(1); view.heparinDispensingRate(2); view.heparinBolusVolume(1); view.salineBolusVolume(1); view.acidConcentrate(1); view.bicarbonateConcentrate(1); view.dialyzerType(1); view.dialysateTemp(1); view.arterialPressureLimitWindow(2); // view.arterialPressureLimitHigh(2); view.venousPressureLimitWindow(2); view.venousPressureLimitAsymtrc(2); view.bloodPressureMeasureInterval(2); view.rinsebackFlowRate(1); // setters view.bloodFlowRate(0); view.dialysateFlowRate(0); view.treatmentDuration(0); view.heparinDispensingRate(1); view.heparinBolusVolume(0); view.heparinStopTime(0); view.salineBolusVolume(0); view.acidConcentrate(view.acidConcentrate()); view.bicarbonateConcentrate(view.bicarbonateConcentrate()); view.dialyzerType(view.dialyzerType()); view.dialysateTemp(0); view.arterialPressureLimitWindow(1); // view.arterialPressureLimitHigh(1); view.venousPressureLimitWindow(1); view.venousPressureLimitAsymtrc(1); view.bloodPressureMeasureInterval(1); view.rinsebackFlowRate(0); // view.setTreatmentData(); // QCOMPARE(view.isbloodFlowRateSet, true); // QCOMPARE(view.isdialysateFlowRateSet, true); // QCOMPARE(view.isdurationSet, true); // QCOMPARE(view.isheparinDispensingRateSet, true); // QCOMPARE(view.isheparinBolusVolumeSet, true); // QCOMPARE(view.isheparinStopTimeSet, true); // QCOMPARE(view.issalineBolusVolumeSet, true); // QCOMPARE(view.isacidConcentrateSet, true); // QCOMPARE(view.isbicarbonateConcentrateSet, true); // QCOMPARE(view.isdialyzerTypeSet, true); // QCOMPARE(view.isdialysateTempSet, true); // QCOMPARE(view.isarterialPressureLimitWindowSet, true); //// QCOMPARE(view.isarterialPressureLimitHighSet, true); // QCOMPARE(view.isvenousPressureLimitWindowSet, true); // QCOMPARE(view.isvenousPressureLimitAsymtrcSet, true); // QCOMPARE(view.isbloodPressureMeasureIntervalSet, true); // QCOMPARE(view.isrinsebackFlowRateSet, true); // QCOMPARE(view.validate(view.treatmentData), false); // edge case when pressure lows are set greater than the highs // view.arterialPressureLimitWindow(view.arterialPressureLimitHigh()+1); view.venousPressureLimitWindow(view.venousPressureLimitAsymtrc()+1); // QCOMPARE(view.validate(view.treatmentData), false); // view.doResetCreateTreatment(); for (int i = 0; i < 17; ++i) { VCreateTreatment_simulate_valid_parameters(view); switch (i) { case 0: view.bloodFlowRate(view.bloodFlowRate()+1); break; case 1: view.dialysateFlowRate(view.dialysateFlowRate()+1); break; case 2: view.treatmentDuration(view.treatmentDuration()+1); break; case 3: view.heparinDispensingRate(view.heparinDispensingRate()+1); break; case 4: view.heparinBolusVolume(view.heparinBolusVolume()+1); break; case 5: view.heparinStopTime(view.heparinStopTime()+1); break; case 6: view.salineBolusVolume(view.salineBolusVolume()+1); break; // case 7: view.acidConcentrate(view.acidConcentrateOptions().length()); break; // case 8: view.bicarbonateConcentrate(view.bicarbonateConcentrateOptions().length()); break; // case 9: view.dialyzerType(view.dialyzerTypeOptions().length()); break; case 10: view.dialysateTemp(view.dialysateTemp()+1); break; case 11: view.arterialPressureLimitWindow(view.arterialPressureLimitWindow()+1); break; // case 12: view.arterialPressureLimitHigh(view.arterialPressureLimitHigh()+1); break; case 13: view.venousPressureLimitWindow(view.venousPressureLimitWindow()+1); break; case 14: view.venousPressureLimitAsymtrc(view.venousPressureLimitAsymtrc()+1); break; case 15: view.bloodPressureMeasureInterval(view.bloodPressureMeasureInterval()+1); break; case 16: view.rinsebackFlowRate(view.rinsebackFlowRate()+1); break; default: break; } // QCOMPARE(view.validate(view.treatmentData), false); view.doValidation(); } view.dialyzerType(-1); // QVERIFY(!(view.dialyzerTypeOptions().length() - 1 < (int)view.dialyzerType())); QStringList result = view.doGetOperatingParameterValues(); QCOMPARE(result.at(2), "None"); } void tst_views::VCreateTreatment_check_init() { View::VTreatmentCreate view; quint32 val = 150; view.bloodFlowRate(val); ++val; view.bloodFlowRate(val); view.bloodFlowRate(val); QCOMPARE(val, view.bloodFlowRate()); val = 501; view.bloodFlowRate(val); ++val; view.bloodFlowRate(val); view.bloodFlowRate(val); QCOMPARE(val, view.bloodFlowRate()); val = 100; view.dialysateFlowRate(val); ++val; view.dialysateFlowRate(val); QCOMPARE(val, view.dialysateFlowRate()); val = 600; view.dialysateFlowRate(val); ++val; view.dialysateFlowRate(val); view.dialysateFlowRate(val); QCOMPARE(val, view.dialysateFlowRate()); val = 60; view.treatmentDuration(val); ++val; view.treatmentDuration(val); QCOMPARE(val, view.treatmentDuration()); val = 480; view.treatmentDuration(val); ++val; view.treatmentDuration(val); view.treatmentDuration(val); QCOMPARE(val, view.treatmentDuration()); val = 0; view.heparinDispensingRate(val); ++val; view.heparinDispensingRate(val); view.heparinDispensingRate(val); QCOMPARE(val, view.heparinDispensingRate()); val = 1000; view.heparinDispensingRate(val); ++val; view.heparinDispensingRate(val); view.heparinDispensingRate(val); QCOMPARE(val, view.heparinDispensingRate()); val = 100; view.heparinBolusVolume(val); ++val; view.heparinBolusVolume(val); view.heparinBolusVolume(val); QCOMPARE(val, view.heparinBolusVolume()); val = 2000; view.heparinBolusVolume(val); ++val; view.heparinBolusVolume(val); view.heparinBolusVolume(val); QCOMPARE(val, view.heparinBolusVolume()); val = 2000; view.heparinStopTime(val); ++val; view.heparinStopTime(val); view.heparinStopTime(val); QCOMPARE(val, view.heparinStopTime()); val = 480; view.treatmentDuration(val); ++val; view.treatmentDuration(val); view.treatmentDuration(val); QCOMPARE(val, view.treatmentDuration()); val = 300; view.salineBolusVolume(val); ++val; view.salineBolusVolume(val); view.salineBolusVolume(val); QCOMPARE(val, view.salineBolusVolume()); QStringList options = QStringList() << "08-1251-1" << "08-2251-0" << "08-3251-9"; // TODO need to update // view.acidConcentrate(options); options.append(" "); // view.acidConcentrate(view.acidConcentrate()+1); // view.acidConcentrateOptions(options); // view.acidConcentrateOptions(options); // QCOMPARE(options, view.acidConcentrateOptions()); options = QStringList() << "Dimesol - BC-201"; // TODO need to update // view.bicarbonateConcentrateOptions(options); options.append(" "); // view.bicarbonateConcentrate(view.bicarbonateConcentrate()+1); // view.bicarbonateConcentrateOptions(options); // view.bicarbonateConcentrateOptions(options); // QCOMPARE(options, view.bicarbonateConcentrateOptions()); options = QStringList() << "Nipro Elisio-H 17" << "Nipro Elisio-H 19" << "Fresenius Optiflux F160NRe" << "Fresenius Optiflux F180NRe"; // TODO Need to update // view.dialyzerTypeOptions(options); options.append(" "); // view.dialyzerType(view.dialyzerType()+1); // view.dialyzerTypeOptions(options); // view.dialyzerTypeOptions(options); // QCOMPARE(options, view.dialyzerTypeOptions()); val = 37; view.dialysateTemp(val); ++val; view.dialysateTemp(val); view.dialysateTemp(val); QCOMPARE(val, view.dialysateTemp()); qint32 v; v = 201; view.arterialPressureLimitWindow(v); ++v; view.arterialPressureLimitWindow(v); view.arterialPressureLimitWindow(v); QCOMPARE(v, view.arterialPressureLimitWindow()); v = 601; view.venousPressureLimitWindow(v); ++v; view.venousPressureLimitWindow(v); view.venousPressureLimitWindow(v); QCOMPARE(v, view.venousPressureLimitWindow()); v = 601; view.venousPressureLimitAsymtrc(v); ++v; view.venousPressureLimitAsymtrc(v); view.venousPressureLimitAsymtrc(v); QCOMPARE(v, view.venousPressureLimitAsymtrc()); val = 31; view.bloodPressureMeasureInterval(val); ++val; view.bloodPressureMeasureInterval(val); view.bloodPressureMeasureInterval(val); QCOMPARE(val, view.bloodPressureMeasureInterval()); val = 149; view.rinsebackFlowRate(val); ++val; view.rinsebackFlowRate(val); view.rinsebackFlowRate(val); QCOMPARE(val, view.rinsebackFlowRate()); bool b = false; view.continueEnabled(b); view.continueEnabled(b); QCOMPARE(b, view.continueEnabled()); } void tst_views::VCreateTreatment_save_csv() { // TODO need to update // View::VTreatmentCreate view; // QString csvData = view.getParameterRangesDataCSV(); // QString filename = QString("/tmp/out_%0.csv").arg(QDateTime::currentDateTime().toString(datetimeFormat)); // view.saveTreatmentRangesCSV(filename); // QString readCsvData; // FileHandler::read(filename, readCsvData); // QCOMPARE(csvData, readCsvData); // QVERIFY(!FileHandler::read(filename + "invalid", readCsvData)); } /*! * \brief tst_views::VCreateTreatment_save * Tests that VCreateTreatment saves treatment profiles properly. */ void tst_views::VCreateTreatment_save() { // TODO need to update // View::VTreatmentCreate view; // QJsonObject objectWritten { // {"bloodFlowRate", QString::number(view.bloodFlowRate)}, // {"dialysateFlowRate", QString::number(view.dialysateFlowRate)}, // {"treatmentDuration", QString::number(view.treatmentDuration)}, // {"heparinDispensingRate", QString::number(view.heparinDispensingRate)}, // {"heparinBolusVolume", QString::number(view.heparinBolusVolume)}, // {"heparinStopTime", QString::number(view.heparinStopTime)}, // {"acidConcentrate", QString::number(view.acidConcentrate)}, // {"bicarbonateConcentrate", QString::number(view.bicarbonateConcentrate)}, // {"dialyzerType", QString::number(view.dialyzerType)}, // {"dialysateTemp", QString::number(view.dialysateTemp)}, // {"arterialPressureLimitWindow", QString::number(view.arterialPressureLimitWindow)}, //// {"arterialPressureLimitHigh", QString::number(view.arterialPressureLimitHigh)}, // {"venousPressureLimitWindow", QString::number(view.venousPressureLimitWindow)}, // {"venousPressureLimitAsymtrc", QString::number(view.venousPressureLimitAsymtrc)}, // {"bloodPressureMeasureInterval",QString::number(view.bloodPressureMeasureInterval)}, // {"rinsebackFlowRate", QString::number(view.rinsebackFlowRate)} // }; // QString dir = QString("/tmp/newTreatment_%0.json").arg(QDateTime::currentDateTime().toString(datetimeFormat)); // QString oldFilename = view.saveNewTreatment(objectWritten, dir); // QDateTime startTime = QDateTime::currentDateTime(); // int elapsedSeconds = 0; // while (!QFile(oldFilename).exists()) // { // elapsedSeconds = startTime.secsTo(QDateTime::currentDateTime()); // } // startTime = QDateTime::currentDateTime(); // QString filename = view.saveNewTreatment(objectWritten, dir); // QVERIFY(oldFilename != filename); // QVERIFY(elapsedSeconds < 0.5); // elapsedSeconds = 0; // QJsonObject objectReadTemp; // while (!FileHandler::read(filename, objectReadTemp) || (objectWritten != objectReadTemp)) // { // elapsedSeconds = startTime.secsTo(QDateTime::currentDateTime()); // } // QVERIFY(elapsedSeconds < 0.5); // QJsonObject objectRead; // QVERIFY(FileHandler::read(filename, objectRead)); // QCOMPARE(objectWritten, objectRead); } /*! * \brief tst_views::VCreateTreatment_enums * Tests that enums are handled properly */ void tst_views::VCreateTreatment_enums() { View::VTreatmentCreate view; Gui::GuiRequestReasons reason = Gui::GuiRequestReasons::REQUEST_REJECT_REASON_NONE; QCOMPARE(view.enumToString(reason), "REQUEST_REJECT_REASON_NONE"); QCOMPARE(view.enumToString(static_cast(-1)), "[-1] Unknown Rejection Reason"); QCOMPARE(view.enumToString(static_cast(Gui::GuiRequestReasons::NUM_OF_REQUEST_REJECT_REASONS + 1)), QString("[%0] Unknown Rejection Reason").arg(Gui::GuiRequestReasons::NUM_OF_REQUEST_REJECT_REASONS + 1)); } /*! * \brief tst_views::VCreateTreatment_json * Tests a helper function's conversion from QJsonArray to QStringList */ void tst_views::VCreateTreatment_json() { // TODO need to update // View::VTreatmentCreate view; // QJsonArray arr; // QStringList list; // QCOMPARE(view.jsonArrayToStringList(arr), list); // arr << "1"; // QVERIFY(view.jsonArrayToStringList(arr) != list); // list << "1"; // QCOMPARE(view.jsonArrayToStringList(arr), list); // arr << QJsonValue("1") << QJsonValue("2"); // list << "1" << "2"; // QCOMPARE(view.jsonArrayToStringList(arr), list); // arr << 3 << 4; // list << "3" << "4"; // QVERIFY(view.jsonArrayToStringList(arr) != list); } /*! * \brief tst_views::VCreateTreatment_fw_validation_response * Tests handling of a FW validation response and parameter integrity */ void tst_views::VCreateTreatment_fw_validation_response() { // TODO need to update // View::VTreatmentCreate view; // GuiActionType action = GuiActionType::ID_AdjustParametersValidationRsp; // for (int i = 0; i < 18; ++i) // { // // 0 = OK, 1,2,3 ... parameter is not OK // QVariantList messageData; // AdjustParametersValidationResponseData respData; // if (i == 0) respData.mAccepted = 1; else respData.mAccepted = 0; // if (i == 1) respData.mBloodFlowRate = 1; else respData.mBloodFlowRate = 0; // if (i == 2) respData.mDialysateFlowRate = 1; else respData.mDialysateFlowRate = 0; // if (i == 3) respData.mDuration = 1; else respData.mDuration = 0; // if (i == 4) respData.mHeparinStopTime = 1; else respData.mHeparinStopTime = 0; // if (i == 5) respData.mSalineBolus = 1; else respData.mSalineBolus = 0; // if (i == 6) respData.mAcidConcentrate = 1; else respData.mAcidConcentrate = 0; // if (i == 7) respData.mBicarbonateConcentrate = 1; else respData.mBicarbonateConcentrate = 0; // if (i == 8) respData.mDialyzerType = 1; else respData.mDialyzerType = 0; // if (i == 9) respData.mBloodPressureMeasureInterval = 1; else respData.mBloodPressureMeasureInterval= 0; // if (i == 10) respData.mRinsebackFlowRate = 1; else respData.mRinsebackFlowRate = 0; // if (i == 11) respData.mArterialPressureLimitWindow = 1; else respData.mArterialPressureLimitWindow = 0; // if (i == 12) respData.mVenousPressureLimitWindow = 1; else respData.mVenousPressureLimitWindow = 0; // if (i == 13) respData.mVenousPressureLimitAsymtrc = 1; else respData.mVenousPressureLimitAsymtrc = 0; // if (i == 14) respData.mHeparinBolusVolume = 1; else respData.mHeparinBolusVolume = 0; // if (i == 15) respData.mDialysateTemp = 1; else respData.mDialysateTemp = 0; //// QVERIFY(!view.onActionReceive(respData)); // } // AdjustParametersValidationRequestData dataBackup = view.treatmentData; // AdjustParametersValidationResponseData respData; // QVERIFY(view.onActionReceive(respData)); // view.saveTreatmentProfile(false); // QVERIFY(!view._saveTreatmentProfile); // view.doConfirm(); // view.saveTreatmentProfile(true); // QVERIFY(view._saveTreatmentProfile); // view.doConfirm(); // view.doStartTreatment(); // QCOMPARE(view.bloodFlowRate, dataBackup.bloodFlowRate); // QCOMPARE(view.dialysateFlowRate, dataBackup.dialysateFlowRate); // QCOMPARE(view.treatmentDuration, dataBackup.treatmentDuration); // QCOMPARE(view.heparinDispensingRate, dataBackup.heparinDispensingRate); // QCOMPARE(view.heparinBolusVolume, dataBackup.heparinBolusVolume); // QCOMPARE(view.heparinStopTime, dataBackup.heparinStopTime); // QCOMPARE(view.salineBolus, dataBackup.salineBolus); // QCOMPARE(view.acidConcentrate, dataBackup.acidConcentrate); // QCOMPARE(view.bicarbonateConcentrate, dataBackup.bicarbonateConcentrate); // QCOMPARE(view.dialyzerType, dataBackup.dialyzerType); // QCOMPARE(view.dialysateTemp, dataBackup.dialysateTemp); // QCOMPARE(view.arterialPressureLimitWindow, dataBackup.arterialPressureLimitWindow); // QCOMPARE(view.venousPressureLimitWindow, dataBackup.venousPressureLimitWindow); // QCOMPARE(view.venousPressureLimitAsymtrc, dataBackup.venousPressureLimitWindow); // QCOMPARE(view.bloodPressureMeasureInterval, dataBackup.bloodPressureMeasureInterval); // QCOMPARE(view.rinsebackFlowRate, dataBackup.rinsebackFlowRate); } /*! * \brief tst_views::VCreateTreatment_load_parameter_ranges * Tests that parameter ranges are loaded correctly from disk. */ void tst_views::VCreateTreatment_load_parameter_ranges() { // TODO need to update // View::VTreatmentCreate view; // QJsonObject obj; // VCreateTreatment_init_ranges(obj); // obj["UnexpectedParameter"] = 123; // QJsonDocument document(obj); // QString path = QString("/tmp/ranges_%0.json").arg(QDateTime::currentDateTime().toString(datetimeFormat));; // _FileSaver.onConcurrentSave(path, document.toJson(), false); // int elapsedSeconds = 0; // QDateTime startTime = QDateTime::currentDateTime(); // while (view.loadTreatmentParameterRanges(path) != obj) // elapsedSeconds += startTime.secsTo(QDateTime::currentDateTime()); // QJsonObject readObj = view.loadTreatmentParameterRanges(path); // QCOMPARE(obj, readObj); // QVERIFY(elapsedSeconds < 2); // readObj = view.loadTreatmentParameterRanges(QString("/tmp/wrong_path_%0.json") // .arg(QDateTime::currentDateTime().toString(datetimeFormat))); // QVERIFY(obj != readObj); }