File: TimeSheetProcessorTests.cpp

package info (click to toggle)
charmtimetracker 1.12.0-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,340 kB
  • sloc: cpp: 19,176; xml: 284; python: 120; makefile: 14
file content (102 lines) | stat: -rw-r--r-- 3,626 bytes parent folder | download | duplicates (2)
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
/*
  TimeSheetProcessorTests.cpp

  This file is part of Charm, a task-based time tracking application.

  Copyright (C) 2015-2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com

  Author: Franck Arrecot <franck.arrecot@kdab.com>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "TimeSheetProcessorTests.h"
#include <QtTest/QtTest>
#include <QSqlQuery>
#include <QSqlRecord>
#include <QSqlError>

#include "Tools/TimesheetProcessor/Operations.h"
#include "Tools/TimesheetProcessor/CommandLine.h"
#include "Core/MySqlStorage.h"
#include <QDebug>

#include <QDateTime>

TimeSheetProcessorTests::TimeSheetProcessorTests()
    : m_idTimeSheet(0)
    , m_adminId(43)
    , m_reportPath(QStringLiteral(":/timeSheetProcessorTest/Data/test-timesheet-report.charmreport"))
{
}

void TimeSheetProcessorTests::testAddRemoveTimeSheet()
{
    // Add and Remove in the same function to avoid order dependency
    // TimesheetProcessor -a filename -u userid -m comment  <-- add timesheet from file

    // GIVEN
    Q_ASSERT(!m_reportPath.isEmpty());
    CommandLine cmdAdd(m_reportPath, m_adminId);

    // WHEN
    addTimesheet(cmdAdd);

    // THEN
    MySqlStorage storage;
    MySqlStorage::Parameters parameters = MySqlStorage::parseParameterEnvironmentVariable();
    storage.configure(parameters);
    QVERIFY(storage.database().open());

    QSqlQuery query(storage.database());
    query.prepare(QStringLiteral(
        "SELECT id, date_time_uploaded from timesheets where filename=:file AND userid=:user"));
    query.bindValue(QStringLiteral("file"), m_reportPath);
    query.bindValue(QStringLiteral("user"), m_adminId);
    QVERIFY(storage.runQuery(query));
    QVERIFY(query.next());

    QSqlRecord record = query.record();
    m_idTimeSheet = record.value(record.indexOf(QStringLiteral("id"))).toInt();
    uint dateTimeUploaded = record.value(record.indexOf(QStringLiteral("date_time_uploaded"))).toInt();
    uint nowTimeStamp = (QDateTime::currentMSecsSinceEpoch()/1000);// seconds since 1970-01-01

    QVERIFY(m_idTimeSheet > 0);
    QVERIFY(dateTimeUploaded > (nowTimeStamp - 60*60));    // one hour ago
    QVERIFY(dateTimeUploaded < (nowTimeStamp + 60*60));   // in one hour

    // GIVEN
    Q_ASSERT(m_idTimeSheet != 0);
    CommandLine cmdRemove(m_adminId, m_idTimeSheet);

    // WHEN
    removeTimesheet(cmdRemove);

    // THEN
    MySqlStorage storageRemove;
    storageRemove.configure(parameters);
    QVERIFY(storageRemove.database().open());

    QSqlQuery queryRemove(storageRemove.database());
    queryRemove.prepare(QStringLiteral(
        "SELECT id, date_time_uploaded from timesheets where filename=:file AND userid=:user"));
    queryRemove.bindValue(QStringLiteral("file"), m_reportPath);
    queryRemove.bindValue(QStringLiteral("user"), m_adminId);
    QVERIFY(storageRemove.runQuery(queryRemove));
    QVERIFY(!queryRemove.next());   // not retrievable since it was deleted, must return false
}

QTEST_MAIN(TimeSheetProcessorTests)

#include "moc_TimeSheetProcessorTests.cpp"