From 5fae63df3ef0389eb0ba1bfea1a85e94a211d909 Mon Sep 17 00:00:00 2001 From: Radoslaw Wicik Date: Thu, 29 Apr 2021 12:38:24 +0200 Subject: [PATCH] [EGD-6648] Fix Events Record tests Update UT for work with SQLite WAL. --- module-db/tests/EventsRecord_tests.cpp | 415 +++++++++++++------------ 1 file changed, 208 insertions(+), 207 deletions(-) diff --git a/module-db/tests/EventsRecord_tests.cpp b/module-db/tests/EventsRecord_tests.cpp index 0796801eb8a91f9b07493ee4652d6377089df719..a3bee433ec3eac7769c4bb32f7deb9400d81aeb6 100644 --- a/module-db/tests/EventsRecord_tests.cpp +++ b/module-db/tests/EventsRecord_tests.cpp @@ -1,21 +1,23 @@ // Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md -#include +#include "common.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include -#include "Interface/EventsRecord.hpp" -#include "Database/Database.hpp" -#include "Databases/EventsDB.hpp" -#include "module-db/queries/calendar/QueryEventsGet.hpp" -#include "module-db/queries/calendar/QueryEventsGetAll.hpp" -#include "module-db/queries/calendar/QueryEventsGetAllLimited.hpp" -#include "module-db/queries/calendar/QueryEventsGetFiltered.hpp" -#include "module-db/queries/calendar/QueryEventsAdd.hpp" -#include "module-db/queries/calendar/QueryEventsRemove.hpp" -#include "module-db/queries/calendar/QueryEventsRemoveICS.hpp" -#include "module-db/queries/calendar/QueryEventsEdit.hpp" -#include "module-db/queries/calendar/QueryEventsEditICS.hpp" -#include "module-db/queries/calendar/QueryEventsSelectFirstUpcoming.hpp" +#include #include #include @@ -40,22 +42,12 @@ TEST_CASE("Events Record tests") Database::initialize(); const auto eventsPath = (std::filesystem::path{"sys/user"} / "events.db"); - if (std::filesystem::exists(eventsPath)) { - REQUIRE(std::filesystem::remove(eventsPath)); - } + RemoveDbFiles(eventsPath.stem()); EventsDB eventsDb{eventsPath.c_str()}; REQUIRE(eventsDb.isInitialized()); - SECTION("Default Constructor") - { - EventsRecord testRec; - REQUIRE(testRec.title == ""); - REQUIRE(testRec.reminder == 0); - REQUIRE(testRec.repeat == 0); - } - EventsTableRow testRow = {{1}, .UID = "test1", .title = "Event1", @@ -142,11 +134,6 @@ TEST_CASE("Events Record tests") CHECK(actual.isValid()); }; - SECTION("Constructor from EventsTableRow") - { - EventsRecord testRecord(testRow); - check_record(testRecord, testRow); - } EventsRecordInterface eventsRecordInterface(&eventsDb); auto numberOfEvents = eventsRecordInterface.GetCount(); @@ -169,6 +156,197 @@ TEST_CASE("Events Record tests") numberOfEvents = eventsRecordInterface.GetCount(); REQUIRE(numberOfEvents == 6); + ///====TEST QUERY==== + auto getQuery = [&](uint32_t id, EventsRecord expected_record) { + auto query = std::make_shared(id); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + auto record = result->getResult(); + check_record(record, expected_record); + }; + + [[maybe_unused]] auto getAll = [&](std::vector expected_records, uint32_t expectedAllRecsNumber) { + auto query = std::make_shared(); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + auto records = result->getResult(); + REQUIRE(records.size() == expectedAllRecsNumber); + + auto expected_record = expected_records.begin(); + std::for_each(records.begin(), records.end(), [&expected_record](const EventsRecord &record) { + CHECK(record.ID == expected_record->ID); + CHECK(record.UID == expected_record->UID); + CHECK(record.title == expected_record->title); + CHECK(TimePointToString(record.date_from) == TimePointToString(expected_record->date_from)); + CHECK(TimePointToString(record.date_till) == TimePointToString(expected_record->date_till)); + CHECK(record.reminder == expected_record->reminder); + CHECK(record.repeat == expected_record->repeat); + CHECK(record.reminder_fired == expected_record->reminder_fired); + CHECK(record.provider_type == expected_record->provider_type); + CHECK(record.provider_id == expected_record->provider_id); + CHECK(record.provider_iCalUid == expected_record->provider_iCalUid); + CHECK(record.isValid()); + expected_record++; + }); + }; + + auto getFiltered = [&](TimePoint filter_from, TimePoint filter_till, std::vector expected_records) { + auto query = std::make_shared(filter_from, filter_till); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + auto records = result->getResult(); + REQUIRE(records.size() == expected_records.size()); + auto count = result->getCountResult(); + REQUIRE(count == expected_records.size()); + + auto expected_record = expected_records.begin(); + std::for_each(records.begin(), records.end(), [&expected_record](const EventsRecord &record) { + CHECK(record.ID == expected_record->ID); + CHECK(record.UID == expected_record->UID); + CHECK(record.title == expected_record->title); + CHECK(TimePointToString(record.date_from) == TimePointToString(expected_record->date_from)); + CHECK(TimePointToString(record.date_till) == TimePointToString(expected_record->date_till)); + CHECK(record.reminder == expected_record->reminder); + CHECK(record.repeat == expected_record->repeat); + CHECK(record.reminder_fired == expected_record->reminder_fired); + CHECK(record.provider_type == expected_record->provider_type); + CHECK(record.provider_id == expected_record->provider_id); + CHECK(record.provider_iCalUid == expected_record->provider_iCalUid); + CHECK(record.isValid()); + expected_record++; + }); + }; + + auto getAllLimited = [&](uint32_t offset, + uint32_t limit, + std::vector expected_records, + uint32_t expectedAllRecsNumber) { + auto query = std::make_shared(offset, limit); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + auto records = result->getResult(); + REQUIRE(records.size() == limit); + auto count = result->getCountResult(); + CHECK(count == expectedAllRecsNumber); + + auto expected_record = expected_records.begin(); + std::for_each(records.begin(), records.end(), [&expected_record](const EventsRecord &record) { + CHECK(record.ID == expected_record->ID); + CHECK(record.UID == expected_record->UID); + CHECK(record.title == expected_record->title); + CHECK(TimePointToString(record.date_from) == TimePointToString(expected_record->date_from)); + CHECK(TimePointToString(record.date_till) == TimePointToString(expected_record->date_till)); + CHECK(record.reminder == expected_record->reminder); + CHECK(record.repeat == expected_record->repeat); + CHECK(record.reminder_fired == expected_record->reminder_fired); + CHECK(record.provider_type == expected_record->provider_type); + CHECK(record.provider_id == expected_record->provider_id); + CHECK(record.provider_iCalUid == expected_record->provider_iCalUid); + CHECK(record.isValid()); + expected_record++; + }); + }; + + auto AddQuery = [&](EventsRecord record) { + auto query = std::make_shared(record); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + REQUIRE(result->getResult()); + + auto entry = eventsRecordInterface.GetByID(record.ID); + check_record(entry, record); + }; + + auto RemoveQueryICS = [&](std::string uid) { + auto query = std::make_shared(uid); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + REQUIRE(result->getResult()); + REQUIRE_NOTHROW(eventsRecordInterface.GetByUID(uid)); + }; + + auto EditQuery = [&](uint32_t id, EventsRecord record) { + auto entryToUpdate = eventsRecordInterface.GetByID(id); + entryToUpdate.title = record.title; + entryToUpdate.date_from = record.date_from; + entryToUpdate.date_till = record.date_till; + entryToUpdate.reminder = record.reminder; + entryToUpdate.repeat = record.repeat; + entryToUpdate.provider_type = record.provider_type; + entryToUpdate.provider_id = record.provider_id; + entryToUpdate.provider_iCalUid = record.provider_iCalUid; + + auto query = std::make_shared(entryToUpdate); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + + auto entry = eventsRecordInterface.GetByID(entryToUpdate.ID); + record.ID = entry.ID; + record.UID = entry.UID; + check_record(entry, record); + }; + + auto RemoveQuery = [&](uint32_t id) { + auto query = std::make_shared(id); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + REQUIRE(result->getResult()); + REQUIRE_NOTHROW(eventsRecordInterface.GetByID(id)); + }; + + auto EditQueryICS = [&](std::string uid, EventsRecord recordUpdateData) { + auto entryToUpdate = eventsRecordInterface.GetByUID(uid); + entryToUpdate.title = recordUpdateData.title; + entryToUpdate.date_from = recordUpdateData.date_from; + entryToUpdate.date_till = recordUpdateData.date_till; + entryToUpdate.reminder = recordUpdateData.reminder; + entryToUpdate.repeat = recordUpdateData.repeat; + entryToUpdate.provider_type = recordUpdateData.provider_type; + entryToUpdate.provider_id = recordUpdateData.provider_id; + entryToUpdate.provider_iCalUid = recordUpdateData.provider_iCalUid; + + auto query = std::make_shared(entryToUpdate); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + + auto entry = eventsRecordInterface.GetByID(entryToUpdate.ID); + recordUpdateData.ID = entry.ID; + recordUpdateData.UID = entry.UID; + check_record(entry, recordUpdateData); + }; + + [[maybe_unused]] auto selectFirstUpcomingEvent = [&](TimePoint filter_from, TimePoint filter_till) { + auto query = std::make_shared(filter_from, filter_till); + auto ret = eventsRecordInterface.runQuery(query); + auto result = dynamic_cast(ret.get()); + REQUIRE(result != nullptr); + auto records = result->getResult(); + return records; + }; + + SECTION("Default Constructor") + { + EventsRecord testRec; + REQUIRE(testRec.title == ""); + REQUIRE(testRec.reminder == 0); + REQUIRE(testRec.repeat == 0); + } + + SECTION("Constructor from EventsTableRow") + { + EventsRecord testRecord(testRow); + check_record(testRecord, testRow); + } + SECTION("Get entry by ID") { auto entry = eventsRecordInterface.GetByID(testRecord3.ID); @@ -743,16 +921,6 @@ TEST_CASE("Events Record tests") REQUIRE(nextEventsRecord.ID == 2); } - ///====TEST QUERY==== - auto getQuery = [&](uint32_t id, EventsRecord expected_record) { - auto query = std::make_shared(id); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - auto record = result->getResult(); - check_record(record, expected_record); - }; - SECTION("Check Get via query") { getQuery(testRecord.ID, testRecord); @@ -760,32 +928,6 @@ TEST_CASE("Events Record tests") getQuery(testRecord6.ID, testRecord6); } - [[maybe_unused]] auto getAll = [&](std::vector expected_records, uint32_t expectedAllRecsNumber) { - auto query = std::make_shared(); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - auto records = result->getResult(); - REQUIRE(records.size() == expectedAllRecsNumber); - - auto expected_record = expected_records.begin(); - std::for_each(records.begin(), records.end(), [&expected_record](const EventsRecord &record) { - CHECK(record.ID == expected_record->ID); - CHECK(record.UID == expected_record->UID); - CHECK(record.title == expected_record->title); - CHECK(TimePointToString(record.date_from) == TimePointToString(expected_record->date_from)); - CHECK(TimePointToString(record.date_till) == TimePointToString(expected_record->date_till)); - CHECK(record.reminder == expected_record->reminder); - CHECK(record.repeat == expected_record->repeat); - CHECK(record.reminder_fired == expected_record->reminder_fired); - CHECK(record.provider_type == expected_record->provider_type); - CHECK(record.provider_id == expected_record->provider_id); - CHECK(record.provider_iCalUid == expected_record->provider_iCalUid); - CHECK(record.isValid()); - expected_record++; - }); - }; - SECTION("Get All via query") { std::vector expectedRecords; @@ -798,34 +940,6 @@ TEST_CASE("Events Record tests") getAll(expectedRecords, numberOfEvents); } - auto getFiltered = [&](TimePoint filter_from, TimePoint filter_till, std::vector expected_records) { - auto query = std::make_shared(filter_from, filter_till); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - auto records = result->getResult(); - REQUIRE(records.size() == expected_records.size()); - auto count = result->getCountResult(); - REQUIRE(count == expected_records.size()); - - auto expected_record = expected_records.begin(); - std::for_each(records.begin(), records.end(), [&expected_record](const EventsRecord &record) { - CHECK(record.ID == expected_record->ID); - CHECK(record.UID == expected_record->UID); - CHECK(record.title == expected_record->title); - CHECK(TimePointToString(record.date_from) == TimePointToString(expected_record->date_from)); - CHECK(TimePointToString(record.date_till) == TimePointToString(expected_record->date_till)); - CHECK(record.reminder == expected_record->reminder); - CHECK(record.repeat == expected_record->repeat); - CHECK(record.reminder_fired == expected_record->reminder_fired); - CHECK(record.provider_type == expected_record->provider_type); - CHECK(record.provider_id == expected_record->provider_id); - CHECK(record.provider_iCalUid == expected_record->provider_iCalUid); - CHECK(record.isValid()); - expected_record++; - }); - }; - SECTION("GetFiltered via query") { auto startDate = testRecord2.date_from; @@ -837,37 +951,6 @@ TEST_CASE("Events Record tests") getFiltered(startDate, endDate, expectedFilteredRecords); } - auto getAllLimited = [&](uint32_t offset, - uint32_t limit, - std::vector expected_records, - uint32_t expectedAllRecsNumber) { - auto query = std::make_shared(offset, limit); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - auto records = result->getResult(); - REQUIRE(records.size() == limit); - auto count = result->getCountResult(); - CHECK(count == expectedAllRecsNumber); - - auto expected_record = expected_records.begin(); - std::for_each(records.begin(), records.end(), [&expected_record](const EventsRecord &record) { - CHECK(record.ID == expected_record->ID); - CHECK(record.UID == expected_record->UID); - CHECK(record.title == expected_record->title); - CHECK(TimePointToString(record.date_from) == TimePointToString(expected_record->date_from)); - CHECK(TimePointToString(record.date_till) == TimePointToString(expected_record->date_till)); - CHECK(record.reminder == expected_record->reminder); - CHECK(record.repeat == expected_record->repeat); - CHECK(record.reminder_fired == expected_record->reminder_fired); - CHECK(record.provider_type == expected_record->provider_type); - CHECK(record.provider_id == expected_record->provider_id); - CHECK(record.provider_iCalUid == expected_record->provider_iCalUid); - CHECK(record.isValid()); - expected_record++; - }); - }; - SECTION("Get All Limited via query") { std::vector expectedRecords; @@ -879,17 +962,6 @@ TEST_CASE("Events Record tests") getAllLimited(testRecord2.ID - 1, limit, expectedRecords, numberOfEvents); } - auto AddQuery = [&](EventsRecord record) { - auto query = std::make_shared(record); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - REQUIRE(result->getResult()); - - auto entry = eventsRecordInterface.GetByID(record.ID); - check_record(entry, record); - }; - SECTION("Add via query") { EventsTableRow testRow7 = {{7}, @@ -908,15 +980,6 @@ TEST_CASE("Events Record tests") AddQuery(testRecord7); } - auto RemoveQuery = [&](uint32_t id) { - auto query = std::make_shared(id); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - REQUIRE(result->getResult()); - REQUIRE_NOTHROW(eventsRecordInterface.GetByID(id)); - }; - SECTION("Remove via query") { RemoveQuery(testRecord2.ID); @@ -930,15 +993,6 @@ TEST_CASE("Events Record tests") getAll(expectedRecords, numberOfEvents - 1); } - auto RemoveQueryICS = [&](std::string uid) { - auto query = std::make_shared(uid); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - REQUIRE(result->getResult()); - REQUIRE_NOTHROW(eventsRecordInterface.GetByUID(uid)); - }; - SECTION("RemoveICS via query") { RemoveQueryICS(testRecord2.UID); @@ -952,28 +1006,6 @@ TEST_CASE("Events Record tests") getAll(expectedRecords, numberOfEvents - 1); } - auto EditQuery = [&](uint32_t id, EventsRecord record) { - auto entryToUpdate = eventsRecordInterface.GetByID(id); - entryToUpdate.title = record.title; - entryToUpdate.date_from = record.date_from; - entryToUpdate.date_till = record.date_till; - entryToUpdate.reminder = record.reminder; - entryToUpdate.repeat = record.repeat; - entryToUpdate.provider_type = record.provider_type; - entryToUpdate.provider_id = record.provider_id; - entryToUpdate.provider_iCalUid = record.provider_iCalUid; - - auto query = std::make_shared(entryToUpdate); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - - auto entry = eventsRecordInterface.GetByID(entryToUpdate.ID); - record.ID = entry.ID; - record.UID = entry.UID; - check_record(entry, record); - }; - SECTION("Update via query") { EditQuery(testRecord.ID, testRecord); @@ -981,28 +1013,6 @@ TEST_CASE("Events Record tests") EditQuery(testRecord6.ID, testRecord6); } - auto EditQueryICS = [&](std::string uid, EventsRecord recordUpdateData) { - auto entryToUpdate = eventsRecordInterface.GetByUID(uid); - entryToUpdate.title = recordUpdateData.title; - entryToUpdate.date_from = recordUpdateData.date_from; - entryToUpdate.date_till = recordUpdateData.date_till; - entryToUpdate.reminder = recordUpdateData.reminder; - entryToUpdate.repeat = recordUpdateData.repeat; - entryToUpdate.provider_type = recordUpdateData.provider_type; - entryToUpdate.provider_id = recordUpdateData.provider_id; - entryToUpdate.provider_iCalUid = recordUpdateData.provider_iCalUid; - - auto query = std::make_shared(entryToUpdate); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - - auto entry = eventsRecordInterface.GetByID(entryToUpdate.ID); - recordUpdateData.ID = entry.ID; - recordUpdateData.UID = entry.UID; - check_record(entry, recordUpdateData); - }; - SECTION("Update ICS via query") { EditQueryICS(testRecord.UID, testRecord); @@ -1010,15 +1020,6 @@ TEST_CASE("Events Record tests") EditQueryICS(testRecord6.UID, testRecord6); } - [[maybe_unused]] auto selectFirstUpcomingEvent = [&](TimePoint filter_from, TimePoint filter_till) { - auto query = std::make_shared(filter_from, filter_till); - auto ret = eventsRecordInterface.runQuery(query); - auto result = dynamic_cast(ret.get()); - REQUIRE(result != nullptr); - auto records = result->getResult(); - return records; - }; - SECTION("Select first upcoming via query") { auto date_from = TimePointFromString("2019-10-19 14:24:00");