~aleteoryx/muditaos

ref: ff218162593ed0ccd74ef4d759a9eacbdbb62e49 muditaos/module-db/tests/NotesRecord_tests.cpp -rw-r--r-- 2.9 KiB
ff218162 — RobertPiet [EGD-5118] Unit tests for service-db solved 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
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "vfs.hpp"
#include <catch2/catch.hpp>

#include <Interface/NotesRecord.hpp>
#include <queries/notes/QueryNotesGet.hpp>
#include <queries/notes/QueryNotesGetByText.hpp>
#include <queries/notes/QueryNoteRemove.hpp>
#include <queries/notes/QueryNoteStore.hpp>
#include <purefs/filesystem_paths.hpp>

#include "Database/Database.hpp"
#include "Databases/NotesDB.hpp"

TEST_CASE("Notes Record tests")
{
    vfs.Init();
    Database::initialize();

    const auto notesDbPath = purefs::dir::getUserDiskPath() / "notes.db";
    NotesDB notesDb{notesDbPath.c_str()};
    REQUIRE(notesDb.isInitialized());

    NotesRecordInterface notesRecordInterface{&notesDb};
    notesRecordInterface.RemoveAll(); // Empty the notes database.

    constexpr auto testSnippet = "TEST SNIPPET";

    NotesRecord recordIn;
    recordIn.snippet = testSnippet;

    notesRecordInterface.Add(recordIn);
    REQUIRE(notesRecordInterface.GetCount() == 1);

    SECTION("Get notes query")
    {
        auto query     = std::make_unique<db::query::QueryNotesGet>(0, notesRecordInterface.GetCount());
        auto response  = notesRecordInterface.runQuery(std::move(query));
        auto getResult = static_cast<db::query::NotesGetResult *>(response.get());

        REQUIRE(getResult->getRecords().size() == notesRecordInterface.GetCount());
        REQUIRE(getResult->getCount() == notesRecordInterface.GetCount());
        REQUIRE(getResult->getRecords()[0].snippet == testSnippet);
    }

    SECTION("Get notes by text query")
    {
        constexpr auto testSearch = "TEST";
        auto query                = std::make_unique<db::query::QueryNotesGetByText>(testSearch);
        auto response             = notesRecordInterface.runQuery(std::move(query));
        auto getResult            = static_cast<db::query::NotesGetByTextResult *>(response.get());

        REQUIRE(getResult->getRecords().size() == 1);
        REQUIRE(getResult->getRecords()[0].snippet == testSnippet);
    }

    SECTION("Add a note")
    {
        NotesRecord record;
        record.snippet = testSnippet;

        auto query     = std::make_unique<db::query::QueryNoteStore>(record);
        auto response  = notesRecordInterface.runQuery(std::move(query));
        auto addResult = static_cast<db::query::NoteStoreResult *>(response.get());

        REQUIRE(addResult->succeed());
        REQUIRE(notesRecordInterface.GetCount() == 2);
    }

    SECTION("Remove a note")
    {
        auto query        = std::make_unique<db::query::QueryNoteRemove>(1);
        auto response     = notesRecordInterface.runQuery(std::move(query));
        auto removeResult = static_cast<db::query::NoteRemoveResult *>(response.get());

        REQUIRE(removeResult->succeed());
        REQUIRE(notesRecordInterface.GetCount() == 0);
    }

    Database::deinitialize();
};