Herunterladen als
root/tests/em/tst_querybuilder.cpp @ a873a3ba
cca98131 | Christian Ehringfeld | #include "tst_querybuilder.h"
|
|
f13a6e62 | Christian Ehringfeld | #include <QDebug>
|
|
e7cfc35a | Christian Ehringfeld | ||
4af3f83d | Christian Ehringfeld | void QuerybuilderTest::initTestCase() {
|
|
CuteEntityManager::EntityInstanceFactory::registerClass<Group>();
|
|||
CuteEntityManager::EntityInstanceFactory::registerClass<Person>();
|
|||
CuteEntityManager::EntityInstanceFactory::registerClass<Employee>();
|
|||
CuteEntityManager::EntityInstanceFactory::registerClass<WorkerGroup>();
|
|||
this->e = new CuteEntityManager::EntityManager("QSQLITE",
|
|||
5c7f1541 | Christian Ehringfeld | ":memory:", "", "", "", "", true, "foreign_keys = ON", false);
|
|
4af3f83d | Christian Ehringfeld | QStringList inits = QStringList() << "Person" << "Group" << "Employee" << "WorkerGroup";
|
|
QVERIFY2(this->e->startup("queryBuilderTest", inits), "Failure");
|
|||
QSharedPointer<Person> p1 = QSharedPointer<Person>(new Person("Lucien", "We",
|
|||
21826301 | Christian Ehringfeld | Person::Gender::MALE, "Luc", QDate(1995, 2, 4)));
|
|
4af3f83d | Christian Ehringfeld | QSharedPointer<Employee> p2 = QSharedPointer<Employee>(new Employee(11, "Janine",
|
|
"Musterfrau",
|
|||
21826301 | Christian Ehringfeld | Person::Gender::FEMALE, "", QDate(1992, 8, 5), "B"));
|
|
4af3f83d | Christian Ehringfeld | QSharedPointer<Employee> p3 = QSharedPointer<Employee>(new Employee(42, "Fenja", "Sey.",
|
|
21826301 | Christian Ehringfeld | Person::Gender::FEMALE, "Lotta", QDate(1990, 11, 11), "A"));
|
|
4af3f83d | Christian Ehringfeld | QSharedPointer<Person> p4 = QSharedPointer<Person>(new Person("Fenja", "Neu",
|
|
21826301 | Christian Ehringfeld | Person::Gender::FEMALE, "Fenni", QDate(1980, 5, 30)));
|
|
01fe6db3 | Christian Ehringfeld | QSharedPointer<Employee> p5 = QSharedPointer<Employee>(new Employee(90, "Milan", "Mes.",
|
|
21826301 | Christian Ehringfeld | Person::Gender::MALE, "", QDate(1994, 3, 27), "D"));
|
|
01fe6db3 | Christian Ehringfeld | QSharedPointer<Person> p6 = QSharedPointer<Person>(new Person("Kristina", "Zero",
|
|
21826301 | Christian Ehringfeld | Person::Gender::FEMALE, "", QDate(1996, 5, 17)));
|
|
4af3f83d | Christian Ehringfeld | QSharedPointer<Group> g = QSharedPointer<Group>(new Group("Group Psy"));
|
|
QSharedPointer<Group> g2 = QSharedPointer<Group>(new Group("Group Health"));
|
|||
31ca3a70 | Christian Ehringfeld | QSharedPointer<Group> g3 = QSharedPointer<Group>(new Group("Group ABC"));
|
|
4af3f83d | Christian Ehringfeld | g->setLeader(p1);
|
|
31ca3a70 | Christian Ehringfeld | g3->setLeader(p3);
|
|
g3->setPersons({p3});
|
|||
4af3f83d | Christian Ehringfeld | g->setPersons({p1, p2, p4});
|
|
cca98131 | Christian Ehringfeld | g2->setLeader(p3);
|
|
g2->setPersons({p3});
|
|||
4af3f83d | Christian Ehringfeld | QSharedPointer<WorkerGroup> wg = QSharedPointer<WorkerGroup>(new
|
|
WorkerGroup("Taskforce P&H", 50));
|
|||
wg->addWorker(p2);
|
|||
wg->addWorker(p3);
|
|||
auto gEnt = g.objectCast<Entity>();
|
|||
auto g2Ent = g2.objectCast<Entity>();
|
|||
31ca3a70 | Christian Ehringfeld | auto g3Ent = g3.objectCast<Entity>();
|
|
4af3f83d | Christian Ehringfeld | auto wgEnt = wg.objectCast<Entity>();
|
|
01fe6db3 | Christian Ehringfeld | auto p5Ent = p5.objectCast<Entity>();
|
|
auto p6Ent = p6.objectCast<Entity>();
|
|||
cca98131 | Christian Ehringfeld | try {
|
|
01fe6db3 | Christian Ehringfeld | QVERIFY(this->e->save(p5Ent));
|
|
cca98131 | Christian Ehringfeld | QVERIFY(this->e->save(gEnt));
|
|
QVERIFY(this->e->save(wgEnt));
|
|||
QVERIFY(this->e->save(g2Ent));
|
|||
01fe6db3 | Christian Ehringfeld | QVERIFY(this->e->save(p6Ent));
|
|
31ca3a70 | Christian Ehringfeld | QVERIFY(this->e->save(g3Ent));
|
|
cca98131 | Christian Ehringfeld | } catch(QString s) {
|
|
5c7f1541 | Christian Ehringfeld | qWarning() << s;
|
|
cca98131 | Christian Ehringfeld | }
|
|
e7cfc35a | Christian Ehringfeld | }
|
|
4af3f83d | Christian Ehringfeld | void QuerybuilderTest::cleanupTestCase() {
|
|
auto qb = this->e->getQueryBuilder();
|
|||
QVERIFY(this->e->executeQuery(qb->dropTable("workergroup_workers")));
|
|||
QVERIFY(this->e->executeQuery(qb->dropTable("employee")));
|
|||
QVERIFY(this->e->executeQuery(qb->dropTable("workergroup")));
|
|||
QVERIFY(this->e->executeQuery(qb->dropTable("person_groups")));
|
|||
QVERIFY(this->e->executeQuery(qb->dropTable("group")));
|
|||
QVERIFY(this->e->executeQuery(qb->dropTable("person")));
|
|||
QVERIFY(this->e->removeAll("cuteentitymanager::databasemigration"));
|
|||
if (this->e) {
|
|||
delete this->e;
|
|||
this->e = nullptr;
|
|||
}
|
|||
e7cfc35a | Christian Ehringfeld | }
|
|
4af3f83d | Christian Ehringfeld | void QuerybuilderTest::testFindByAttributes() {
|
|
QHash<QString, QVariant> attributes;
|
|||
attributes["persNumber"] = 42;
|
|||
QSharedPointer<Employee> p = e->findEntityByAttributes<Employee>(attributes, true);
|
|||
QVERIFY(p);
|
|||
QCOMPARE(p->getNickName(), QString("Lotta"));
|
|||
64dc4a24 | Christian Ehringfeld | }
|
|
void QuerybuilderTest::testFindByAttributesManyToManyResolve() {
|
|||
QHash<QString, QVariant> attributes;
|
|||
attributes["persNumber"] = 42;
|
|||
QSharedPointer<Employee> p = e->findEntityByAttributes<Employee>(attributes, true);
|
|||
QVERIFY(p);
|
|||
QCOMPARE(p->getNickName(), QString("Lotta"));
|
|||
31ca3a70 | Christian Ehringfeld | QCOMPARE(p->getGroups().size(), 2);
|
|
f13a6e62 | Christian Ehringfeld | QCOMPARE(p->getGroups().first()->getPersons().last()->getFamilyName(), QString("Sey."));
|
|
64dc4a24 | Christian Ehringfeld | }
|
|
void QuerybuilderTest::testFindByAttributesOneToManyResolve() {
|
|||
QHash<QString, QVariant> attributes;
|
|||
attributes["persNumber"] = 42;
|
|||
QSharedPointer<Employee> p = e->findEntityByAttributes<Employee>(attributes, true);
|
|||
QVERIFY(p);
|
|||
31ca3a70 | Christian Ehringfeld | QCOMPARE(p->getMaintainedGroups().size(), 2);
|
|
64dc4a24 | Christian Ehringfeld | }
|
|
void QuerybuilderTest::testFindByAttributesOneToOneResolve() {
|
|||
}
|
|||
void QuerybuilderTest::testFindByAttributesManyToOneResolve() {
|
|||
QHash<QString, QVariant> attributes;
|
|||
attributes["name"] = QString("Group Health");
|
|||
QSharedPointer<Group> g = this->e->findEntityByAttributes<Group>(attributes, true);
|
|||
31ca3a70 | Christian Ehringfeld | QVERIFY(g->getLeader());
|
|
QCOMPARE(g->getLeader()->getFirstName(), QString("Fenja"));
|
|||
QCOMPARE(g->getLeader()->getFamilyName(), QString("Sey."));
|
|||
e7cfc35a | Christian Ehringfeld | }
|
|
95d9cf46 | Christian Ehringfeld | void QuerybuilderTest::testFindByAttributesSuperClassAttribute() {
|
|
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.equal(qb, "nickName", QString("Lotta")));
|
|||
QList<QSharedPointer<Employee>> list = e->find<Employee>(q, true);
|
|||
QCOMPARE(list.size(), 1);
|
|||
QCOMPARE(list.at(0)->getPersNumber(), (unsigned long long)42);
|
|||
}
|
|||
void QuerybuilderTest::testQueryBuilderCount() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
77000f90 | Christian Ehringfeld | q.appendWhere(q.equal(qb, "gender", (int) Person::Gender::FEMALE));
|
|
95d9cf46 | Christian Ehringfeld | q.appendFrom("person");
|
|
QCOMPARE(this->e->count(q), (quint32)4);
|
|||
}
|
|||
64dc4a24 | Christian Ehringfeld | ||
4af3f83d | Christian Ehringfeld | void QuerybuilderTest::testFindByAttributesManyToOneRelation() {
|
|
QHash<QString, QVariant> attributes;
|
|||
39ea0d06 | Christian Ehringfeld | attributes["firstName"] = QString("Lucien");
|
|
attributes["familyName"] = QString("We");
|
|||
64dc4a24 | Christian Ehringfeld | QSharedPointer<Person> p = this->e->findEntityByAttributes<Person>(attributes, true);
|
|
cca98131 | Christian Ehringfeld | QVERIFY(p);
|
|
39ea0d06 | Christian Ehringfeld | attributes.clear();
|
|
c6e41b5c | Christian Ehringfeld | QVariant var;
|
|
var.setValue<QSharedPointer<Entity>>(p);
|
|||
attributes["leader"] = var;
|
|||
4af3f83d | Christian Ehringfeld | QSharedPointer<Group> group = e->findEntityByAttributes<Group>
|
|
(attributes, true);
|
|||
QVERIFY(group);
|
|||
cca98131 | Christian Ehringfeld | QCOMPARE(group->getName(), QString("Group Psy"));
|
|
e7cfc35a | Christian Ehringfeld | }
|
|
4af3f83d | Christian Ehringfeld | void QuerybuilderTest::testFindByAttributesManyToOneRelationAttribute() {
|
|
QHash<QString, QVariant> attributes;
|
|||
attributes["leader.firstName"] = QString("Fenja");
|
|||
64dc4a24 | Christian Ehringfeld | QSharedPointer<Group> group = this->e->findEntityByAttributes<Group>
|
|
4af3f83d | Christian Ehringfeld | (attributes, true);
|
|
QVERIFY(group);
|
|||
}
|
|||
void QuerybuilderTest::testFindByAttributesManyToManyRelation() {
|
|||
QHash<QString, QVariant> attributes;
|
|||
46d2de48 | Christian Ehringfeld | attributes["firstName"] = "Kristina";
|
|
64dc4a24 | Christian Ehringfeld | QSharedPointer<Person> p = this->e->findEntityByAttributes<Person>(attributes, true);
|
|
cca98131 | Christian Ehringfeld | QVERIFY(p);
|
|
46d2de48 | Christian Ehringfeld | QCOMPARE(p->getFamilyName(), QString("Zero"));
|
|
cca98131 | Christian Ehringfeld | attributes.clear();
|
|
3b82c8c0 | Christian Ehringfeld | QVariant var;
|
|
var.setValue<QSharedPointer<Person>>(p);
|
|||
attributes["persons"] = var;
|
|||
cca98131 | Christian Ehringfeld | QSharedPointer<Group> group = e->findEntityByAttributes<Group>
|
|
(attributes, true);
|
|||
QVERIFY(group);
|
|||
QCOMPARE(group->getName(), QString("Group Health"));
|
|||
4af3f83d | Christian Ehringfeld | }
|
|
cca98131 | Christian Ehringfeld | void QuerybuilderTest::testFindByAttributesManyToManyRelationWithList() {
|
|
4af3f83d | Christian Ehringfeld | QHash<QString, QVariant> attributes;
|
|
cca98131 | Christian Ehringfeld | QList<QSharedPointer<Person>> persons = QList<QSharedPointer<Person>>();
|
|
attributes["firstName"] = QString("Lucien");
|
|||
64dc4a24 | Christian Ehringfeld | QSharedPointer<Person> p1 = this->e->findEntityByAttributes<Person>(attributes, true);
|
|
cca98131 | Christian Ehringfeld | QVERIFY(p1);
|
|
QCOMPARE(p1->getFamilyName(), QString("We"));
|
|||
persons.append(p1);
|
|||
attributes["firstName"] = QString("Janine");
|
|||
64dc4a24 | Christian Ehringfeld | QSharedPointer<Person> p2 = this->e->findEntityByAttributes<Person>(attributes, true);
|
|
cca98131 | Christian Ehringfeld | QVERIFY(p2);
|
|
QCOMPARE(p2->getFamilyName(), QString("Musterfrau"));
|
|||
persons.append(p2);
|
|||
attributes.clear();
|
|||
QVariant var;
|
|||
var.setValue<QList<QSharedPointer<Person>>>(persons);
|
|||
attributes["persons"] = var;
|
|||
64dc4a24 | Christian Ehringfeld | QSharedPointer<Group> group = this->e->findEntityByAttributes<Group>
|
|
4af3f83d | Christian Ehringfeld | (attributes, true);
|
|
QVERIFY(group);
|
|||
cca98131 | Christian Ehringfeld | QCOMPARE(group->getName(), QString("Group Psy"));
|
|
4af3f83d | Christian Ehringfeld | }
|
|
cca98131 | Christian Ehringfeld | void QuerybuilderTest::testFindByAttributesManyToManyRelationAttribute() {
|
|
QHash<QString, QVariant> attributes;
|
|||
attributes["persons.firstName"] = QString("Janine");
|
|||
64dc4a24 | Christian Ehringfeld | QSharedPointer<Group> group = this->e->findEntityByAttributes<Group>
|
|
cca98131 | Christian Ehringfeld | (attributes, true);
|
|
QVERIFY(group);
|
|||
QCOMPARE(group->getName(), QString("Group Psy"));
|
|||
4af3f83d | Christian Ehringfeld | }
|
|
void QuerybuilderTest::testQueryBuilder() {
|
|||
64dc4a24 | Christian Ehringfeld | auto qb = this->e->getQueryBuilder();
|
|
01fe6db3 | Christian Ehringfeld | Query q = Query();
|
|
q.appendWhere(q.like(qb, QString("firstName"), QString("Fenj"),
|
|||
JokerPosition::BEHIND));
|
|||
q.setLimit(10);
|
|||
64dc4a24 | Christian Ehringfeld | QList<QSharedPointer<Person>> list = this->e->find<Person>(q);
|
|
01fe6db3 | Christian Ehringfeld | QCOMPARE(list.size(), 2);
|
|
}
|
|||
void QuerybuilderTest::testQueryBuilderEntityInheritance() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
QSharedPointer<Employee> emp = QSharedPointer<Employee>(new Employee());
|
|||
Query q = Query();
|
|||
q.appendJoins(q.joinBaseClasses(qb, emp));
|
|||
try {
|
|||
64dc4a24 | Christian Ehringfeld | QList<QSharedPointer<Employee>> list = this->e->find<Employee>(q);
|
|
01fe6db3 | Christian Ehringfeld | QCOMPARE(list.size(), 3);
|
|
} catch(QString e) {
|
|||
qWarning() << e;
|
|||
QFAIL("Exception");
|
|||
}
|
|||
}
|
|||
void QuerybuilderTest::testQueryBuilderEntityInheritanceWithoutJoin() {
|
|||
Query q = Query();
|
|||
try {
|
|||
64dc4a24 | Christian Ehringfeld | QList<QSharedPointer<Employee>> list = this->e->find<Employee>(q, true);
|
|
01fe6db3 | Christian Ehringfeld | QCOMPARE(list.size(), 3);
|
|
} catch(QString e) {
|
|||
qWarning() << e;
|
|||
QFAIL("Exception");
|
|||
}
|
|||
}
|
|||
void QuerybuilderTest::testQueryBuilderArbitraryOperator() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.arbitraryOperator(qb, "<", "birthday",
|
|||
QDate(1991, 10, 10)));
|
|||
q.setDistinct(true);
|
|||
q.appendOrderBy(OrderBy(QString("birthday"), Direction::SORT_DESC));
|
|||
q.setLimit(10);
|
|||
64dc4a24 | Christian Ehringfeld | QList<QSharedPointer<Person>> list = this->e->find<Person>(q, true);
|
|
01fe6db3 | Christian Ehringfeld | QCOMPARE(list.size(), 2);
|
|
46d2de48 | Christian Ehringfeld | QCOMPARE(list.at(0)->getFirstName(), QString("Fenja"));
|
|
QCOMPARE(list.at(0)->getFamilyName(), QString("Sey."));
|
|||
QCOMPARE(list.at(1)->getFirstName(), QString("Fenja"));
|
|||
QCOMPARE(list.at(1)->getFamilyName(), QString("Neu"));
|
|||
01fe6db3 | Christian Ehringfeld | }
|
|
void QuerybuilderTest::testQueryBuilderJoins() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
46d2de48 | Christian Ehringfeld | q.appendWhere(q.equal(qb, "firstName", "Milan"));
|
|
01fe6db3 | Christian Ehringfeld | q.appendJoin(Join("person", "person.id = employee.id"));
|
|
64dc4a24 | Christian Ehringfeld | QList<QSharedPointer<Employee>> list = this->e->find<Employee>(q, false);
|
|
01fe6db3 | Christian Ehringfeld | QCOMPARE(list.size(), 1);
|
|
46d2de48 | Christian Ehringfeld | QCOMPARE(list.at(0)->getFirstName(), QString("Milan"));
|
|
QCOMPARE(list.at(0)->getFamilyName(), QString("Mes."));
|
|||
01fe6db3 | Christian Ehringfeld | }
|
|
3b82c8c0 | Christian Ehringfeld | void QuerybuilderTest::testQueryBuilderSingleAttributeOr() {
|
|
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.equal(qb, "nickName", QString("Lotta")));
|
|||
q.appendWhere(q.orOperator(qb));
|
|||
q.appendWhere(q.equal(qb, "nickName", QString("Fenni")));
|
|||
QList<QSharedPointer<Person>> list = e->find<Person>(q, true);
|
|||
QCOMPARE(list.size(), 2);
|
|||
01fe6db3 | Christian Ehringfeld | }
|
|
void QuerybuilderTest::testQueryBuilderManyToOneRelation() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.equal(qb, "persNumber", 42));
|
|||
QList<QSharedPointer<Employee>> list = e->find<Employee>(q, true);
|
|||
QCOMPARE(list.size(), 1);
|
|||
QCOMPARE(list.at(0)->getNickName(), QString("Lotta"));
|
|||
q = Query();
|
|||
c6e41b5c | Christian Ehringfeld | QVariant var;
|
|
var.setValue<QSharedPointer<Entity>>(list.at(0));
|
|||
q.appendWhere(q.equal(qb, "leader", QVariant(var)));
|
|||
01fe6db3 | Christian Ehringfeld | QList<QSharedPointer<Group>> groupList = e->find<Group>(q, false);
|
|
QCOMPARE(groupList.size(), 1);
|
|||
QCOMPARE(groupList.at(0)->getName(), QString("Group Health"));
|
|||
}
|
|||
void QuerybuilderTest::testQueryBuilderManyToOneRelationAttribute() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.equal(qb, "leader.firstName", QString("Fenja")));
|
|||
QList<QSharedPointer<Group>> groupList = e->find<Group>(q, false, false);
|
|||
QCOMPARE(groupList.size(), 1);
|
|||
QCOMPARE(groupList.at(0)->getName(), QString("Group Health"));
|
|||
QCOMPARE(groupList.at(0)->getPersons().size(), 0);
|
|||
}
|
|||
void QuerybuilderTest::testQueryBuilderManyToManyRelation() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.equal(qb, "persNumber", 42));
|
|||
QList<QSharedPointer<Employee>> list = e->find<Employee>(q, true);
|
|||
QCOMPARE(list.size(), 1);
|
|||
QCOMPARE(list.at(0)->getNickName(), QString("Lotta"));
|
|||
q = Query();
|
|||
c6e41b5c | Christian Ehringfeld | QVariant var;
|
|
var.setValue<QSharedPointer<Entity>>(list.at(0));
|
|||
q.appendWhere(q.equal(qb, "persons", QVariant(var)));
|
|||
01fe6db3 | Christian Ehringfeld | QList<QSharedPointer<Group>> groupList = e->find<Group>(q, false);
|
|
QCOMPARE(groupList.size(), 1);
|
|||
QCOMPARE(groupList.at(0)->getName(), QString("Group Health"));
|
|||
}
|
|||
void QuerybuilderTest::testQueryBuilderManyToManyRelationAttribute() {
|
|||
auto qb = e->getQueryBuilder();
|
|||
Query q = Query();
|
|||
q.appendWhere(q.equal(qb, "persons.firstName", QString("Janine")));
|
|||
QList<QSharedPointer<Group>> groupList = e->find<Group>(q, false);
|
|||
QCOMPARE(groupList.size(), 1);
|
|||
QCOMPARE(groupList.at(0)->getName(), QString("Group Psy"));
|
|||
QCOMPARE(groupList.at(0)->getPersons().size(), 3);
|
|||
4af3f83d | Christian Ehringfeld | }
|
|
373a84e2 | Christian Ehringfeld | ||
void QuerybuilderTest::testRefresh() {
|
|||
a873a3ba | Christian Ehringfeld | e->clearCache();
|
|
373a84e2 | Christian Ehringfeld | auto persons = e->findAll<Person>(false);
|
|
QCOMPARE(persons.first()->getGroups().size(), 0);
|
|||
QHash<QString, QVariant> attributes;
|
|||
attributes["name"] = QString("Group Health");
|
|||
a873a3ba | Christian Ehringfeld | QSharedPointer<Group> g = this->e->findEntityByAttributes<Group>(attributes, false,
|
|
false);
|
|||
373a84e2 | Christian Ehringfeld | QCOMPARE(g->getPersons().count(), 0);
|
|
auto entity = g.objectCast<Entity>();
|
|||
e->refresh(entity, true);
|
|||
QCOMPARE(g->getPersons().count(), 1);
|
|||
}
|