#include #include #include #include #include "consts.h" #include "tst_datetime.h" #include "query.h" #include "tableset.h" #include "tablemodel.h" #include "databasemodel.h" #include "sampletable.h" DateTimeTest::DateTimeTest(QObject *parent) : QObject(parent) { _baseDateTime = QDateTime::currentDateTime(); } void DateTimeTest::initTestCase() { //register all entities with Qt-MetaType mechanism REGISTER(SampleTable); REGISTER(DB); db.setDriver(DRIVER); db.setHostName(HOST); db.setDatabaseName(DATABASE); db.setUserName(USERNAME); db.setPassword(PASSWORD); QVERIFY(db.open()); db.sampleTables()->query().remove(); } #define TEST_DATE(date, command, n) \ do { \ auto s = Nut::create(); \ s->setD(date); \ db.sampleTables()->append(s); \ db.saveChanges(); \ auto count = db.sampleTables() \ ->query() \ .where(SampleTable::dField().command(n) == date.command(n)) \ .count(); \ QVERIFY(count > 0); \ db.sampleTables()->query().remove(); \ } while (false) #define TEST_TIME(time, command, n, num) \ do { \ auto s = Nut::create(); \ s->setT(time); \ db.sampleTables()->append(s); \ db.saveChanges(); \ auto count = db.sampleTables() \ ->query() \ .where(SampleTable::tField().command(n) == time.addSecs(num)) \ .count(); \ QVERIFY(count > 0); \ db.sampleTables()->query().remove(); \ } while (false) #define TEST_DATE2(datetime, command, n) \ do { \ auto s = Nut::create(); \ s->setDT(datetime); \ db.sampleTables()->append(s); \ db.saveChanges(); \ auto count = db.sampleTables() \ ->query() \ .where(SampleTable::dtField().command(n) == datetime.command(n)) \ .count(); \ QVERIFY(count > 0); \ db.sampleTables()->query().remove(); \ } while (false) #define TEST_TIME2(datetime, command, n, num) \ do { \ auto s = Nut::create(); \ s->setDT(datetime); \ db.sampleTables()->append(s); \ db.saveChanges(); \ auto count = db.sampleTables() \ ->query() \ .where(SampleTable::dtField().command(n) == datetime.addSecs(num)) \ .count(); \ QVERIFY(count > 0); \ db.sampleTables()->query().remove(); \ } while (false) #define MINUTE(m) m * 60 #define HOUR(h) MINUTE(h) * 60 void DateTimeTest::dateAdd() { QDate d = QDate::currentDate(); TEST_DATE(d, addYears, 10); TEST_DATE(d, addMonths, 10); TEST_DATE(d, addDays, 10); TEST_DATE(d, addYears, -10); TEST_DATE(d, addMonths, -10); TEST_DATE(d, addDays, -10); } void DateTimeTest::timeAdd() { QTime t(12, 34, 56); TEST_TIME(t, addHours, 10, HOUR(10)); TEST_TIME(t, addMinutes, 10, MINUTE(10)); TEST_TIME(t, addSeconds, 10, 10); TEST_TIME(t, addHours, -10, HOUR(-10)); TEST_TIME(t, addMinutes, -10, MINUTE(-10)); TEST_TIME(t, addSeconds, -10, -10); } void DateTimeTest::dateTimeAdd() { QDateTime dt({2021, 12, 23}, {12, 34, 56}); TEST_DATE2(dt, addYears, 10); TEST_DATE2(dt, addMonths, 10); TEST_DATE2(dt, addDays, 10); TEST_DATE2(dt, addYears, -10); TEST_DATE2(dt, addMonths, -10); TEST_DATE2(dt, addDays, -10); TEST_TIME2(dt, addHours, 10, HOUR(10)); TEST_TIME2(dt, addMinutes, 10, MINUTE(10)); TEST_TIME2(dt, addSeconds, 10, 10); TEST_TIME2(dt, addHours, -10, HOUR(-10)); TEST_TIME2(dt, addMinutes, -10, MINUTE(-10)); TEST_TIME2(dt, addSeconds, -10, -10); } void DateTimeTest::datePart() { db.sampleTables()->query().remove(); QDate d = QDate::currentDate(); auto s = Nut::create(); s->setD(d); db.sampleTables()->append(s); db.saveChanges(); int count; count = db.sampleTables()->query().where(SampleTable::dField().year() == d.year()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dField().month() == d.month()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dField().day() == d.day()).count(); QVERIFY(count); } void DateTimeTest::timePart() { db.sampleTables()->query().remove(); QTime t = QTime::currentTime(); auto s = Nut::create(); s->setT(t); db.sampleTables()->append(s); db.saveChanges(); int count; count = db.sampleTables()->query().where(SampleTable::tField().hour() == t.hour()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::tField().minute() == t.minute()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::tField().second() == t.second()).count(); QVERIFY(count); } void DateTimeTest::dateTimePart() { db.sampleTables()->query().remove(); QDateTime dt = QDateTime::currentDateTime(); auto s = Nut::create(); s->setDT(dt); db.sampleTables()->append(s); db.saveChanges(); int count; count = db.sampleTables()->query().where(SampleTable::dtField().year() == dt.date().year()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dtField().month() == dt.date().month()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dtField().day() == dt.date().day()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dtField().hour() == dt.time().hour()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dtField().minute() == dt.time().minute()).count(); QVERIFY(count); count = db.sampleTables()->query().where(SampleTable::dtField().second() == dt.time().second()).count(); QVERIFY(count); } void DateTimeTest::cleanupTestCase() { db.sampleTables()->query().remove(); db.close(); } QTEST_MAIN(DateTimeTest)