Nut/test/basic/maintest.cpp

173 lines
4.0 KiB
C++
Raw Normal View History

2016-05-12 14:08:58 +08:00
#include <QtTest>
#include <QJsonDocument>
#include <QSqlError>
#include "maintest.h"
#include "query.h"
#include "tableset.h"
2016-05-21 16:09:03 +08:00
#include "tablemodel.h"
2016-05-12 14:08:58 +08:00
#include "databasemodel.h"
#include "post.h"
#include "comment.h"
MainTest::MainTest(QObject *parent) : QObject(parent)
{
}
void MainTest::initTestCase()
{
qDebug() << "User type id:" << qRegisterMetaType<Post*>();
qDebug() << "Comment type id:" << qRegisterMetaType<Comment*>();
qDebug() << "DB type id:" << qRegisterMetaType<WeblogDatabase*>();
2016-05-21 16:09:03 +08:00
//sql server
// db.setDriver("QODBC");
// db.setHostName("127.0.0.1");
// db.setDatabaseName("DRIVER={SQL Server};Server=.;Database=Nut;Uid=sa;Port=1433;Pwd=qwe123!@#;WSID=.");
// db.setUserName("sa");
// db.setPassword("qwe123!@#");
// postgres
db.setDriver("QPSQL");
2016-05-12 14:08:58 +08:00
db.setHostName("127.0.0.1");
2016-05-21 16:09:03 +08:00
db.setDatabaseName("nutdb3");
db.setUserName("postgres");
db.setPassword("856856");
// mysql
// db.setDriver("QMYSQL");
// db.setHostName("127.0.0.1");
// db.setDatabaseName("nutdb");
2016-05-12 14:08:58 +08:00
// db.setUserName("root");
// db.setPassword("onlyonlyi");
2016-05-21 16:09:03 +08:00
2016-05-12 14:08:58 +08:00
bool ok = db.open();
QTEST_ASSERT(ok);
}
void MainTest::dataScheema()
{
auto json = db.model().toJson();
auto model = DatabaseModel::fromJson(json);
// qDebug() << model.toJson();
// qDebug() << db.model().toJson();
QTEST_ASSERT(model == db.model());
}
void MainTest::createPost()
{
Post *newPost = new Post;
newPost->setTitle("post title");
2016-05-21 16:09:03 +08:00
newPost->setSaveDate(QDateTime::currentDateTime());
2016-05-12 14:08:58 +08:00
db.posts()->append(newPost);
for(int i = 0 ; i < 3; i++){
Comment *comment = new Comment;
comment->setMessage("comment #" + QString::number(i));
2016-05-21 16:09:03 +08:00
comment->setSaveDate(QDateTime::currentDateTime());
2016-05-12 14:08:58 +08:00
newPost->comments()->append(comment);
}
db.saveChanges();
postId = newPost->id();
QTEST_ASSERT(newPost->id() != 0);
qDebug() << "New post inserted with id:" << newPost->id();
}
void MainTest::selectPosts()
{
2016-05-24 14:47:37 +08:00
// auto q = FROM(db.posts())
// JOIN(Comment)
// WHERE(Post::idField() == postId);
auto q = db.posts()->createQuery();
q->join("Comment");
q->setWhere(Post::idField() == postId);
2016-05-21 16:09:03 +08:00
2016-05-12 14:08:58 +08:00
auto posts = q->toList();
2016-05-21 16:09:03 +08:00
post = posts.at(0);
post->setBody("");
2016-05-12 14:08:58 +08:00
QTEST_ASSERT(posts.length() == 1);
QTEST_ASSERT(posts.at(0)->comments()->length() == 3);
QTEST_ASSERT(posts.at(0)->title() == "post title");
QTEST_ASSERT(posts.at(0)->comments()->at(0)->message() == "comment #0");
QTEST_ASSERT(posts.at(0)->comments()->at(1)->message() == "comment #1");
QTEST_ASSERT(posts.at(0)->comments()->at(2)->message() == "comment #2");
2016-05-21 16:09:03 +08:00
db.cleanUp();
2016-05-12 14:08:58 +08:00
}
2016-05-21 16:09:03 +08:00
void MainTest::testDate()
{
QDateTime d = QDateTime::currentDateTime();
QTime t = QTime(d.time().hour(), d.time().minute(), d.time().second());
d.setTime(t);
Post *newPost = new Post;
newPost->setTitle("post title");
newPost->setSaveDate(d);
db.posts()->append(newPost);
db.saveChanges();
auto q = FROM(db.posts())
WHERE(Post::idField() == newPost->id())
FIRST();
qDebug() << d << q->saveDate();
QTEST_ASSERT(q->saveDate() == d);
}
2016-05-12 14:08:58 +08:00
void MainTest::selectWithInvalidRelation()
{
auto q = FROM(db.posts())
JOIN(Invalid_Class_Name)
SELECT();
}
void MainTest::modifyPost()
{
auto q = FROM(db.posts())
2016-05-21 16:09:03 +08:00
WHERE(Post::idField() == postId);
2016-05-12 14:08:58 +08:00
Post *post = q->first();
QTEST_ASSERT(post != 0);
post->setTitle("new name");
db.saveChanges();
q = FROM(db.posts())
2016-05-21 16:09:03 +08:00
WHERE(Post::idField() == postId);
2016-05-12 14:08:58 +08:00
post = q->first();
QTEST_ASSERT(post->title() == "new name");
}
void MainTest::deletePost()
{
auto count = FROM(db.posts())
2016-05-21 16:09:03 +08:00
WHERE(Post::idField() == postId)
2016-05-12 14:08:58 +08:00
DELETE();
QTEST_ASSERT(count == 1);
count = FROM(db.posts())
2016-05-21 16:09:03 +08:00
WHERE(Post::idField() == postId)
2016-05-12 14:08:58 +08:00
COUNT();
QTEST_ASSERT(count == 0);
}
2016-05-24 14:47:37 +08:00
2016-05-12 14:08:58 +08:00
QTEST_MAIN(MainTest)