mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-24 22:08:33 -05:00
306 lines
14 KiB
C++
306 lines
14 KiB
C++
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include <catch2/catch.hpp>
|
|
|
|
#include "Database/Database.hpp"
|
|
#include "Databases/EventsDB.hpp"
|
|
|
|
#include "Tables/EventsTable.hpp"
|
|
|
|
#include <vfs.hpp>
|
|
#include <stdint.h>
|
|
#include <string>
|
|
#include <algorithm>
|
|
#include <iostream>
|
|
|
|
TEST_CASE("Events Table tests")
|
|
{
|
|
Database::initialize();
|
|
|
|
vfs.remove(EventsDB::GetDBName());
|
|
|
|
EventsDB eventsDb;
|
|
REQUIRE(eventsDb.isInitialized());
|
|
|
|
auto &eventsTbl = eventsDb.events;
|
|
REQUIRE(eventsTbl.count() == 0);
|
|
|
|
SECTION("Default Constructor")
|
|
{
|
|
EventsTableRow testRow;
|
|
REQUIRE(testRow.ID == DB_ID_NONE);
|
|
REQUIRE(testRow.title == "");
|
|
REQUIRE(testRow.date_from == TIME_POINT_INVALID);
|
|
REQUIRE(testRow.date_till == TIME_POINT_INVALID);
|
|
REQUIRE(testRow.reminder == 0);
|
|
REQUIRE(testRow.repeat == 0);
|
|
REQUIRE(testRow.reminder_fired == TIME_POINT_INVALID);
|
|
REQUIRE_FALSE(testRow.isValid());
|
|
}
|
|
|
|
REQUIRE(eventsTbl.add({{.ID = 0},
|
|
.title = "Event3",
|
|
.date_from = TimePointFromString("2019-10-20 14:24:00"),
|
|
.date_till = TimePointFromString("2019-10-20 15:36:00"),
|
|
.reminder = 1,
|
|
.repeat = 2}));
|
|
REQUIRE(eventsTbl.add({{.ID = 0},
|
|
.title = "Event4",
|
|
.date_from = TimePointFromString("2021-10-20 12:24:00"),
|
|
.date_till = TimePointFromString("2021-10-20 15:36:00"),
|
|
.reminder = 0,
|
|
.repeat = 3}));
|
|
|
|
REQUIRE(eventsTbl.count() == 2);
|
|
|
|
SECTION("Get entry by ID")
|
|
{
|
|
auto entry = eventsTbl.getById(2);
|
|
REQUIRE(entry.ID == 2);
|
|
REQUIRE(entry.title == "Event4");
|
|
REQUIRE(entry.date_from == TimePointFromString("2021-10-20 12:24:00"));
|
|
REQUIRE(entry.date_till == TimePointFromString("2021-10-20 15:36:00"));
|
|
REQUIRE(entry.reminder == 0);
|
|
REQUIRE(entry.repeat == 3);
|
|
REQUIRE(entry.isValid());
|
|
}
|
|
|
|
SECTION("Remove entry by ID")
|
|
{
|
|
auto response = eventsTbl.removeById(2);
|
|
REQUIRE(response);
|
|
REQUIRE_FALSE(eventsTbl.count() == 2);
|
|
REQUIRE_NOTHROW(eventsTbl.getById(2));
|
|
auto entry = eventsTbl.getById(1);
|
|
REQUIRE(entry.ID == 1);
|
|
REQUIRE(entry.title == "Event3");
|
|
REQUIRE(entry.date_from == TimePointFromString("2019-10-20 14:24:00"));
|
|
REQUIRE(entry.date_till == TimePointFromString("2019-10-20 15:36:00"));
|
|
REQUIRE(entry.reminder == 1);
|
|
REQUIRE(entry.repeat == 2);
|
|
REQUIRE(entry.isValid());
|
|
}
|
|
|
|
SECTION("Update entry by ID")
|
|
{
|
|
auto entry = EventsTableRow({{.ID = 2},
|
|
"TestUpdateEvent",
|
|
TimePointFromString("2019-10-20 15:00:00"),
|
|
TimePointFromString("2019-10-20 18:54:00"),
|
|
0,
|
|
2});
|
|
REQUIRE(eventsTbl.update(entry));
|
|
auto record = eventsTbl.getById(2);
|
|
REQUIRE(record.ID == 2);
|
|
REQUIRE(record.title == "TestUpdateEvent");
|
|
REQUIRE(record.date_from == TimePointFromString("2019-10-20 15:00:00"));
|
|
REQUIRE(record.date_till == TimePointFromString("2019-10-20 18:54:00"));
|
|
REQUIRE(record.reminder == 0);
|
|
REQUIRE(record.repeat == 2);
|
|
REQUIRE(record.isValid());
|
|
}
|
|
|
|
SECTION("Select entry by date")
|
|
{
|
|
REQUIRE(eventsTbl.add({{.ID = 0},
|
|
.title = "Event5",
|
|
.date_from = TimePointFromString("2019-10-20 14:24:00"),
|
|
.date_till = TimePointFromString("2019-10-20 15:36:00"),
|
|
.reminder = 1,
|
|
.repeat = 2}));
|
|
REQUIRE(eventsTbl.add({{.ID = 1},
|
|
.title = "Event6",
|
|
.date_from = TimePointFromString("2021-04-19 12:24:00"),
|
|
.date_till = TimePointFromString("2021-04-20 15:36:00"),
|
|
.reminder = 0,
|
|
.repeat = 3}));
|
|
REQUIRE(eventsTbl.add({{.ID = 2},
|
|
.title = "Event7",
|
|
.date_from = TimePointFromString("2019-10-20 15:24:00"),
|
|
.date_till = TimePointFromString("2019-10-20 15:36:00"),
|
|
.reminder = 1,
|
|
.repeat = 2}));
|
|
REQUIRE(eventsTbl.add({{.ID = 3},
|
|
.title = "Event8",
|
|
.date_from = TimePointFromString("2021-04-19 12:24:00"),
|
|
.date_till = TimePointFromString("2019-10-20 15:36:00"),
|
|
.reminder = 0,
|
|
.repeat = 3}));
|
|
REQUIRE(eventsTbl.add({{.ID = 4},
|
|
.title = "Event9",
|
|
.date_from = TimePointFromString("2025-10-20 15:24:00"),
|
|
.date_till = TimePointFromString("2025-10-20 15:36:00"),
|
|
.reminder = 1,
|
|
.repeat = 2}));
|
|
REQUIRE(eventsTbl.add({{.ID = 5},
|
|
.title = "Event10",
|
|
.date_from = TimePointFromString("2021-12-19 12:24:00"),
|
|
.date_till = TimePointFromString("2021-12-20 15:36:00"),
|
|
.reminder = 0,
|
|
.repeat = 3}));
|
|
|
|
auto entries = eventsTbl.selectByDatePeriod(TimePointFromString("2000-01-01 00:00:00"),
|
|
TimePointFromString("2012-12-31 23:59:00"));
|
|
|
|
REQUIRE(entries.size() == 0);
|
|
}
|
|
for (uint32_t i = 1; i <= 8; ++i) {
|
|
auto response = eventsTbl.removeById(i);
|
|
REQUIRE(response);
|
|
}
|
|
REQUIRE(eventsTbl.count() == 0);
|
|
|
|
SECTION("Get all limited by date")
|
|
{
|
|
for (uint32_t i = 1; i <= 3; ++i) {
|
|
auto response = eventsTbl.removeById(i);
|
|
REQUIRE(response);
|
|
}
|
|
REQUIRE(eventsTbl.count() == 0);
|
|
|
|
const std::array<TimePoint, 6> paramDate{TimePointFromString("2018-10-20 15:24"),
|
|
TimePointFromString("2019-10-30 14:24"),
|
|
TimePointFromString("2020-10-20 14:24"),
|
|
TimePointFromString("2021-12-20 14:24"),
|
|
TimePointFromString("2022-10-20 14:24"),
|
|
TimePointFromString("2023-10-20 14:24")};
|
|
const std::array<uint32_t, 6> paramID{3, 4, 5, 6, 7, 8};
|
|
const std::array<std::string, 6> paramName{"Event1", "Event2", "Event3", "Event4", "Event5", "Event6"};
|
|
REQUIRE(eventsTbl.add({{.ID = 1},
|
|
.title = "Event1",
|
|
.date_from = paramDate[0],
|
|
.date_till = TimePointFromString("2030-10-20 15:24"),
|
|
.reminder = 0,
|
|
.repeat = 0}));
|
|
REQUIRE(eventsTbl.add({{.ID = 2},
|
|
.title = "Event2",
|
|
.date_from = paramDate[5],
|
|
.date_till = TimePointFromString("2030-10-20 15:24"),
|
|
.reminder = 0,
|
|
.repeat = 0}));
|
|
REQUIRE(eventsTbl.add({{.ID = 3},
|
|
.title = "Event3",
|
|
.date_from = paramDate[2],
|
|
.date_till = TimePointFromString("2030-10-20 15:24"),
|
|
.reminder = 0,
|
|
.repeat = 0}));
|
|
REQUIRE(eventsTbl.add({{.ID = 4},
|
|
.title = "Event4",
|
|
.date_from = paramDate[3],
|
|
.date_till = TimePointFromString("2030-10-20 15:24"),
|
|
.reminder = 0,
|
|
.repeat = 0}));
|
|
REQUIRE(eventsTbl.add({{.ID = 5},
|
|
.title = "Event5",
|
|
.date_from = paramDate[4],
|
|
.date_till = TimePointFromString("2030-10-20 15:24"),
|
|
.reminder = 0,
|
|
.repeat = 0}));
|
|
REQUIRE(eventsTbl.add({{.ID = 6},
|
|
.title = "Event6",
|
|
.date_from = paramDate[1],
|
|
.date_till = TimePointFromString("2030-10-20 15:24"),
|
|
.reminder = 0,
|
|
.repeat = 0}));
|
|
|
|
auto entries = eventsTbl.getLimitOffsetByDate(0, 6);
|
|
REQUIRE(entries.size() == 6);
|
|
uint32_t index = 0;
|
|
for (auto entry : entries) {
|
|
REQUIRE(entry.ID == paramID[index]);
|
|
REQUIRE(entry.title == paramName[index]);
|
|
REQUIRE(entry.date_from == paramDate[index]);
|
|
REQUIRE(entry.date_till == TimePointFromString("2030-10-20 15:24"));
|
|
REQUIRE(entry.reminder == 0);
|
|
REQUIRE(entry.repeat == 0);
|
|
REQUIRE(entry.isValid());
|
|
++index;
|
|
}
|
|
}
|
|
|
|
SECTION("Select first upcoming event")
|
|
{
|
|
for (uint32_t i = 1; i <= 10; ++i) {
|
|
auto response = eventsTbl.removeById(i);
|
|
REQUIRE(response);
|
|
}
|
|
REQUIRE(eventsTbl.count() == 0);
|
|
|
|
const std::array<TimePoint, 6> paramDate{TimePointFromString("2018-10-20 15:24:00"),
|
|
TimePointFromString("2019-10-30 14:24:00"),
|
|
TimePointFromString("2020-10-20 14:24:00"),
|
|
TimePointFromString("2021-12-20 14:24:00"),
|
|
TimePointFromString("2022-10-20 14:24:00"),
|
|
TimePointFromString("2023-10-20 14:24:00")};
|
|
TimePoint startDate1 = TimePointFromString("2018-10-20 14:24:00");
|
|
TimePoint startDate2 = TimePointFromString("2020-10-20 14:24:00");
|
|
|
|
TimePoint tillDate = TimePointFromString("2030-10-20 15:24:00");
|
|
TimePoint firedDate = TimePointFromString("2018-10-20 14:24:00");
|
|
|
|
REQUIRE(eventsTbl.add({{.ID = 1},
|
|
.title = "Event1",
|
|
.date_from = paramDate[0],
|
|
.date_till = tillDate,
|
|
.reminder = 120,
|
|
.repeat = 0,
|
|
.reminder_fired = TIME_POINT_INVALID}));
|
|
REQUIRE(eventsTbl.add({{.ID = 2},
|
|
.title = "Event2",
|
|
.date_from = paramDate[1],
|
|
.date_till = tillDate,
|
|
.reminder = 120,
|
|
.repeat = 0,
|
|
.reminder_fired = TIME_POINT_INVALID}));
|
|
REQUIRE(eventsTbl.add({{.ID = 3},
|
|
.title = "Event3",
|
|
.date_from = paramDate[2],
|
|
.date_till = tillDate,
|
|
.reminder = 120,
|
|
.repeat = 0,
|
|
.reminder_fired = firedDate}));
|
|
REQUIRE(eventsTbl.add({{.ID = 4},
|
|
.title = "Event4",
|
|
.date_from = paramDate[3],
|
|
.date_till = tillDate,
|
|
.reminder = 120,
|
|
.repeat = 0,
|
|
.reminder_fired = firedDate}));
|
|
REQUIRE(eventsTbl.add({{.ID = 5},
|
|
.title = "Event5",
|
|
.date_from = paramDate[4],
|
|
.date_till = tillDate,
|
|
.reminder = 120,
|
|
.repeat = 0,
|
|
.reminder_fired = TIME_POINT_INVALID}));
|
|
REQUIRE(eventsTbl.add({{.ID = 6},
|
|
.title = "Event6",
|
|
.date_from = paramDate[5],
|
|
.date_till = tillDate,
|
|
.reminder = 120,
|
|
.repeat = 0,
|
|
.reminder_fired = TIME_POINT_INVALID}));
|
|
|
|
auto entries = eventsTbl.SelectFirstUpcoming(startDate1, tillDate);
|
|
REQUIRE(entries.size() == 1);
|
|
for (auto entry : entries) {
|
|
REQUIRE(entry.title == "Event2");
|
|
}
|
|
|
|
entries = eventsTbl.SelectFirstUpcoming(startDate2, tillDate);
|
|
REQUIRE(entries.size() == 1);
|
|
for (auto entry : entries) {
|
|
REQUIRE(entry.title == "Event5");
|
|
}
|
|
|
|
for (uint32_t i = 1; i <= 10; ++i) {
|
|
auto response = eventsTbl.removeById(i);
|
|
REQUIRE(response);
|
|
}
|
|
REQUIRE(eventsTbl.count() == 0);
|
|
}
|
|
|
|
Database::deinitialize();
|
|
}
|