~aleteoryx/muditaos

ref: c25ad794213acd3226463d08e39c60b52672b50b muditaos/module-db/tests/AlarmsTable_tests.cpp -rw-r--r-- 3.6 KiB
c25ad794 — RobertPiet Revert "[EGD-3572] SettingsTable exchanged to Settings::Settings (#968)" (#1035) 5 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

/*
 * AlarmsTable_tests.cpp
 *
 *  Created on: 16 lip 2019
 *      Author: kuba
 */
#include "vfs.hpp"

#include <catch2/catch.hpp>

#include "Database/Database.hpp"
#include "Databases/AlarmsDB.hpp"
#include "Tables/AlarmsTable.hpp"

#include <algorithm>

#include <cstdint>
#include <cstdio>
#include <cstring>

TEST_CASE("Alarms Table tests")
{
    Database::initialize();

    vfs.remove(AlarmsDB::GetDBName());

    AlarmsDB alarmsDb;
    REQUIRE(alarmsDb.isInitialized());

    auto alarmsRow = alarmsDb.alarms.getById(1);
    REQUIRE(alarmsRow.ID == 1);

    alarmsRow.time   = 1234;
    alarmsRow.snooze = 2345;
    alarmsRow.status = 1;
    alarmsRow.path   = "awesome.jp2";

    REQUIRE(alarmsDb.alarms.update(alarmsRow));

    auto alarmsRow2 = alarmsDb.alarms.getById(1);

    REQUIRE(alarmsRow2.time == 1234);
    REQUIRE(alarmsRow2.snooze == 2345);
    REQUIRE(alarmsRow2.status == 1);
    REQUIRE(alarmsRow2.path == "awesome.jp2");

    // add 3 elements into table
    REQUIRE(alarmsDb.alarms.add(alarmsRow));
    REQUIRE(alarmsDb.alarms.add(alarmsRow));
    REQUIRE(alarmsDb.alarms.add(alarmsRow));

    // Table should have 4 elements
    REQUIRE(alarmsDb.alarms.count() == 4);

    // update existing element in table
    alarmsRow.ID   = 4;
    alarmsRow.path = "updated";
    REQUIRE(alarmsDb.alarms.update(alarmsRow));

    // Get table row using valid ID & check if it was updated
    auto alarm = alarmsDb.alarms.getById(4);
    REQUIRE(alarm.path == alarmsRow.path);

    // Get table row using invalid ID(should return empty alarmsDb.alarmsRow)
    auto alarmFailed = alarmsDb.alarms.getById(100);
    REQUIRE(alarmFailed.path == "");

    // Get table rows using valid offset/limit parameters
    auto retOffsetLimit = alarmsDb.alarms.getLimitOffset(0, 4);
    REQUIRE(retOffsetLimit.size() == 4);

    // Get table rows using valid offset/limit parameters and specific field's ID
    REQUIRE(alarmsDb.alarms.getLimitOffsetByField(0, 4, AlarmsTableFields::Status, "1").size() == 4);

    // Get table rows using invalid limit parameters(should return 4 elements instead of 100)
    auto retOffsetLimitBigger = alarmsDb.alarms.getLimitOffset(0, 100);
    REQUIRE(retOffsetLimitBigger.size() == 4);

    // Get table rows using invalid offset/limit parameters(should return empty object)
    auto retOffsetLimitFailed = alarmsDb.alarms.getLimitOffset(5, 4);
    REQUIRE(retOffsetLimitFailed.size() == 0);

    // Get count of elements by field's ID
    REQUIRE(alarmsDb.alarms.countByFieldId("status", 1) == 4);

    // Get count of elements by invalid field's ID
    REQUIRE(alarmsDb.alarms.countByFieldId("invalid_field", 0) == 0);

    // update existing element in table
    alarmsRow.ID   = 4;
    alarmsRow.path = "updated";
    alarmsRow.time = 2222;
    REQUIRE(alarmsDb.alarms.update(alarmsRow));

    // Get record by time
    auto alarmByTime = alarmsDb.alarms.next(2000);

    REQUIRE(alarmByTime.ID == 4);
    REQUIRE(alarmByTime.time == 2222);

    // Table should have now 3 elements
    REQUIRE(alarmsDb.alarms.removeById(3));

    REQUIRE(alarmsDb.alarms.count() == 3);

    // Remove non existing element
    REQUIRE(alarmsDb.alarms.removeById(13));

    REQUIRE(alarmsDb.alarms.count() == 3);

    // Remove all elements from table
    REQUIRE(alarmsDb.alarms.removeById(1));
    REQUIRE(alarmsDb.alarms.removeById(2));
    REQUIRE(alarmsDb.alarms.removeById(4));

    // Table should be empty now
    REQUIRE(alarmsDb.alarms.count() == 0);

    Database::deinitialize();
}