/*! * * Copyright (c) 2019-2020 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 NemaiPour * \date (last) 23-Jun-2020 * \author (original) Behrouz NematiPour * \date (original) 21-Apr-2020 * */ #include "tst_views.h" // Qt #include // Project #include "vtreatmentadjustmentresponsebase.h" #include "vtreatmentadjustmentultrafiltrationstate.h" #include "mtreatmentparameters.h" #include "filehandler.h" tst_views::tst_views(QObject *parent) : QObject(parent) { } void tst_views::VTreatmentAdjustmentsResponse_text_NoReason() { View::VTreatmentAdjustmentResponseBase v; v.adjustment_Reason(GuiRequestReasons::REQUEST_REJECT_REASON_NONE); QVERIFY(v.text().isEmpty()); } void tst_views::VTreatmentAdjustmentsResponse_text_WAReason() { View::VTreatmentAdjustmentResponseBase v; v.adjustment_Reason(GuiRequestReasons::REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE); QVERIFY(! v.text().isEmpty()); } void tst_views::VTreatmentAdjustmentUltrafiltrationState_text() { View::VTreatmentAdjustmentUltrafiltrationState v; // if accepted then return empty v.adjustment_Accepted(true); v.adjustment_Reason(GuiRequestReasons::REQUEST_REJECT_REASON_NONE); QCOMPARE(v.text(), ""); // try rejected v.adjustment_Accepted(false); v.isPaused(true); // if not accepted and a reason passed then the parent should translate it and return v.adjustment_Reason(GuiRequestReasons::REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE); QCOMPARE(v.text(), tr("REQUEST_REJECT_REASON_INVALID_TREATMENT_STATE")); // if not accepted and not a reason passed then general message will be returned regarding the paused state v.isPaused(true); v.adjustment_Reason(GuiRequestReasons::REQUEST_REJECT_REASON_NONE); QCOMPARE(v.text(), tr("Unable to Resume Ultrafiltration or already running")); // if not accepted and not a reason passed then general message will be returned regarding the paused state v.isPaused(false); v.adjustment_Reason(GuiRequestReasons::REQUEST_REJECT_REASON_NONE); QCOMPARE(v.text(), tr("Unable to Pause Ultrafiltration or already paused")); v.isPaused(false); } /*! * \brief tst_views::VCreateTreatment_validation * Tests treatment parameter validation */ void tst_views::VCreateTreatment_validation() { for (int i = 0; i < 18; ++i) { View::VCreateTreatment view; if (i != 0) view.set_bloodFlowRate(view.bloodFlowRateMax()); if (i != 1) view.set_dialysateFlowRate(view.dialysateFlowRateMax()); if (i != 2) view.set_duration(view.durationMax()); if (i != 3) view.set_heparinDispensingRate(view.heparinDispensingRateMax()); if (i != 4) view.set_heparinBolusVolume(view.heparinBolusVolumeMax()); if (i != 5) view.set_heparinStopTime(view.heparinStopTimeMax()); if (i != 6) view.set_salineBolusVolume(0); if (i != 7) view.set_acidConcentrate(0); if (i != 8) view.set_bicarbonateConcentrate(0); if (i != 9) view.set_dialyzerType(0); if (i != 10) view.set_dialysateTemp(view.dialysateTempMax()); if (i != 11) view.set_arterialPressureLimitLow(view.arterialPressureLimitLowMin()); if (i != 12) view.set_arterialPressureLimitHigh(view.arterialPressureLimitHighMax()); if (i != 13) view.set_venousPressureLimitLow(view.venousPressureLimitLowMin()); if (i != 14) view.set_venousPressureLimitHigh(view.venousPressureLimitHighMax()); if (i != 15) view.set_bloodPressureMeasureInterval(view.bloodPressureMeasureIntervalMax()); if (i != 16) view.set_rinsebackFlowRate(view.rinsebackFlowRateMax()); if (i == 17) { 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.isarterialPressureLimitLowSet, true); QCOMPARE(view.isarterialPressureLimitHighSet, true); QCOMPARE(view.isvenousPressureLimitLowSet, true); QCOMPARE(view.isvenousPressureLimitHighSet, true); QCOMPARE(view.isbloodPressureMeasureIntervalSet, true); QCOMPARE(view.isrinsebackFlowRateSet, true); QCOMPARE(view.validate(view.treatmentData), true); } 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::VCreateTreatment &view) { view.set_bloodFlowRate(view.bloodFlowRateMax()); view.set_dialysateFlowRate(view.dialysateFlowRateMax()); view.set_duration(view.durationMax()); view.set_heparinDispensingRate(view.heparinDispensingRateMax()); view.set_heparinBolusVolume(view.heparinBolusVolumeMax()); view.set_heparinStopTime(view.heparinStopTimeMax()); view.set_salineBolusVolume(0); view.set_acidConcentrate(0); view.set_bicarbonateConcentrate(0); view.set_dialyzerType(0); view.set_dialysateTemp(view.dialysateTempMax()); view.set_arterialPressureLimitLow(view.arterialPressureLimitLowMin()); view.set_arterialPressureLimitHigh(view.arterialPressureLimitHighMax()); view.set_venousPressureLimitLow(view.venousPressureLimitLowMin()); view.set_venousPressureLimitHigh(view.venousPressureLimitHighMax()); view.set_bloodPressureMeasureInterval(view.bloodPressureMeasureIntervalMax()); view.set_rinsebackFlowRate(view.rinsebackFlowRateMax()); } /*! * \brief tst_views::VCreateTreatment_validation_ranges * Tests the treatment parameter validation ranges are checked */ void tst_views::VCreateTreatment_validation_ranges() { View::VCreateTreatment view; view.set_bloodFlowRate(-1); view.set_dialysateFlowRate(-1); view.set_duration(-1); view.set_heparinDispensingRate(-1); view.set_heparinBolusVolume(-1); view.set_heparinStopTime(-1); view.set_salineBolusVolume(-1); view.set_acidConcentrate(-1); view.set_bicarbonateConcentrate(-1); view.set_dialyzerType(-1); view.set_dialysateTemp(-1); view.set_arterialPressureLimitLow(-1); view.set_arterialPressureLimitHigh(-1); view.set_venousPressureLimitLow(-1); view.set_venousPressureLimitHigh(-1); view.set_bloodPressureMeasureInterval(-1); view.set_rinsebackFlowRate(-1); 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.isarterialPressureLimitLowSet, true); QCOMPARE(view.isarterialPressureLimitHighSet, true); QCOMPARE(view.isvenousPressureLimitLowSet, true); QCOMPARE(view.isvenousPressureLimitHighSet, true); QCOMPARE(view.isbloodPressureMeasureIntervalSet, true); QCOMPARE(view.isrinsebackFlowRateSet, true); QCOMPARE(view.validate(view.treatmentData), false); for (int i = 0; i < 17; ++i) { VCreateTreatment_simulate_valid_parameters(view); if (i == 0) view.set_bloodFlowRate(view.bloodFlowRateMax()+1); if (i == 1) view.set_dialysateFlowRate(view.dialysateFlowRateMax()+1); if (i == 2) view.set_duration(view.durationMax()+1); if (i == 3) view.set_heparinDispensingRate(view.heparinDispensingRateMax()+1); if (i == 4) view.set_heparinBolusVolume(view.heparinBolusVolumeMax()+1); if (i == 5) view.set_heparinStopTime(view.heparinStopTimeMax()+1); if (i == 6) view.set_salineBolusVolume(view.salineBolusOptions().length()); if (i == 7) view.set_acidConcentrate(view.acidConcentrateOptions().length()); if (i == 8) view.set_bicarbonateConcentrate(view.bicarbonateConcentrateOptions().length()); if (i == 9) view.set_dialyzerType(view.dialyzerTypeOptions().length()); if (i == 10) view.set_dialysateTemp(view.dialysateTempMax()+1); if (i == 11) view.set_arterialPressureLimitLow(view.arterialPressureLimitLowMax()+1); if (i == 12) view.set_arterialPressureLimitHigh(view.arterialPressureLimitHighMax()+1); if (i == 13) view.set_venousPressureLimitLow(view.venousPressureLimitLowMax()+1); if (i == 14) view.set_venousPressureLimitHigh(view.venousPressureLimitHighMax()+1); if (i == 15) view.set_bloodPressureMeasureInterval(view.bloodPressureMeasureIntervalMax()+1); if (i == 16) view.set_rinsebackFlowRate(view.rinsebackFlowRateMax()+1); QCOMPARE(view.validate(view.treatmentData), false); } } /*! * \brief tst_views::VCreateTreatment_save * Tests that VCreateTreatment saves treatment profiles properly. */ void tst_views::VCreateTreatment_save() { View::VCreateTreatment view; QJsonObject objectWritten { {"bloodFlowRate", QString::number(view.treatmentData.bloodFlowRate)}, {"dialysateFlowRate", QString::number(view.treatmentData.dialysateFlowRate)}, {"duration", QString::number(view.treatmentData.duration)}, {"heparinDispensingRate", QString::number(view.treatmentData.heparinDispensingRate)}, {"heparinBolusVolume", QString::number(view.treatmentData.heparinBolusVolume)}, {"heparinStopTime", QString::number(view.treatmentData.heparinStopTime)}, {"acidConcentrate", QString::number(view.treatmentData.acidConcentrate)}, {"bicarbonateConcentrate", QString::number(view.treatmentData.bicarbonateConcentrate)}, {"dialyzerType", QString::number(view.treatmentData.dialyzerType)}, {"dialysateTemp", QString::number(view.treatmentData.dialysateTemp)}, {"arterialPressureLimitLow", QString::number(view.treatmentData.arterialPressureLimitLow)}, {"arterialPressureLimitHigh", QString::number(view.treatmentData.arterialPressureLimitHigh)}, {"venousPressureLimitLow", QString::number(view.treatmentData.venousPressureLimitLow)}, {"venousPressureLimitHigh", QString::number(view.treatmentData.venousPressureLimitHigh)}, {"bloodPressureMeasureInterval",QString::number(view.treatmentData.bloodPressureMeasureInterval)}, {"rinsebackFlowRate", QString::number(view.treatmentData.rinsebackFlowRate)} }; QString filename = view.saveNewTreatment(objectWritten); QThread::msleep(500); QJsonObject objectRead; QVERIFY(FileHandler::readJSON(filename, objectRead)); QCOMPARE(objectWritten, objectRead); } /*! * \brief tst_views::VCreateTreatment_enums * Tests that enums are handled properly */ void tst_views::VCreateTreatment_enums() { View::VCreateTreatment view; GuiRequestReasons reason = 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(GuiRequestReasons::NUM_OF_REQUEST_REJECT_REASONS + 1)), QString("[%0] Unknown Rejection Reason").arg(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() { View::VCreateTreatment view; QJsonArray arr; QStringList list; QCOMPARE(view.jsonArrayToStringList(arr), list); arr << "1"; 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); }