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"
|