File indexing completed on 2024-05-12 16:39:23

0001 /* This file is part of the KDE project
0002    Copyright (C) 2009 Dag Andersen <danders@get2net.dk>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; either
0007    version 2 of the License, or (at your option) any later version.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 */
0019 
0020 // clazy:excludeall=qstring-arg
0021 #include "InsertProjectTester.h"
0022 
0023 #include "kptcommand.h"
0024 #include "kptmaindocument.h"
0025 #include "kptpart.h"
0026 #include "kptcalendar.h"
0027 #include "kptresource.h"
0028 #include "kpttask.h"
0029 #include "kptaccount.h"
0030 
0031 #include <KoXmlReader.h>
0032 
0033 #include <QTest>
0034 
0035 namespace KPlato
0036 {
0037 
0038 Account *InsertProjectTester::addAccount(MainDocument &part, Account *parent)
0039 {
0040     Project &p = part.getProject();
0041     Account *a = new Account();
0042     QString s = parent == 0 ? "Account" : parent->name();
0043     a->setName(p.accounts().uniqueId(s));
0044     KUndo2Command *c = new AddAccountCmd(p, a, parent);
0045     part.addCommand(c);
0046     return a;
0047 }
0048 
0049 void InsertProjectTester::testAccount()
0050 {
0051     Part pp(0);
0052     MainDocument part(&pp);
0053     pp.setDocument(&part);
0054 
0055     addAccount(part);
0056     Project &p = part.getProject();
0057     QCOMPARE(p.accounts().accountCount(), 1);
0058 
0059     Part pp2(0);
0060     MainDocument part2(&pp2);
0061     pp2.setDocument(&part2);
0062 
0063     part2.insertProject(p, 0, 0);
0064     QCOMPARE(part2.getProject().accounts().accountCount(), 1);
0065 
0066     part2.insertProject(part.getProject(), 0, 0);
0067     QCOMPARE(part2.getProject().accounts().accountCount(), 1);
0068 
0069     Part ppB(0);
0070     MainDocument partB(&ppB);
0071     ppB.setDocument(&partB);
0072 
0073     Account *parent = addAccount(partB);
0074     QCOMPARE(partB.getProject().accounts().accountCount(), 1);
0075     addAccount(partB, parent);
0076     QCOMPARE(partB.getProject().accounts().accountCount(), 1);
0077     QCOMPARE(parent->childCount(), 1);
0078 
0079     part2.insertProject(partB.getProject(), 0, 0);
0080     QCOMPARE(part2.getProject().accounts().accountCount(), 1);
0081     QCOMPARE(part2.getProject().accounts().accountAt(0)->childCount(), 1);
0082 }
0083 
0084 Calendar *InsertProjectTester::addCalendar(MainDocument &part)
0085 {
0086     Project &p = part.getProject();
0087     Calendar *c = new Calendar();
0088     p.setCalendarId(c);
0089     part.addCommand(new CalendarAddCmd(&p, c, -1, 0));
0090     return c;
0091 }
0092 
0093 void InsertProjectTester::testCalendar()
0094 {
0095     Part pp(0);
0096     MainDocument part(&pp);
0097     pp.setDocument(&part);
0098 
0099     addCalendar(part);
0100     Project &p = part.getProject();
0101     QVERIFY(p.calendarCount() == 1);
0102 
0103     Part pp2(0);
0104     MainDocument part2(&pp2);
0105     pp2.setDocument(&part2);
0106 
0107     part2.insertProject(part.getProject(), 0, 0);
0108     QVERIFY(part2.getProject().calendarCount() == 1);
0109     QVERIFY(part2.getProject().defaultCalendar() == 0);
0110 }
0111 
0112 void InsertProjectTester::testDefaultCalendar()
0113 {
0114     Part pp(0);
0115     MainDocument part(&pp);
0116     pp.setDocument(&part);
0117 
0118     Calendar *c = addCalendar(part);
0119     Project &p = part.getProject();
0120     p.setDefaultCalendar(c);
0121     QVERIFY(p.calendarCount() == 1);
0122     QCOMPARE(p.defaultCalendar(), c);
0123 
0124     Part pp2(0);
0125     MainDocument part2(&pp2);
0126     pp2.setDocument(&part2);
0127 
0128     part2.insertProject(p, 0, 0);
0129     QVERIFY(part2.getProject().calendarCount() == 1);
0130     QCOMPARE(part2.getProject().defaultCalendar(), c);
0131 
0132     Part ppB(0);
0133     MainDocument partB(&ppB);
0134     ppB.setDocument(&partB);
0135 
0136     Calendar *c2 = addCalendar(partB);
0137     partB.getProject().setDefaultCalendar(c2);
0138     part2.insertProject(partB.getProject(), 0, 0);
0139     QVERIFY(part2.getProject().calendarCount() == 2);
0140     QCOMPARE(part2.getProject().defaultCalendar(), c); // NB: still c, not c2
0141 }
0142 
0143 ResourceGroup *InsertProjectTester::addResourceGroup(MainDocument &part)
0144 {
0145     Project &p = part.getProject();
0146     ResourceGroup *g = new ResourceGroup();
0147     KUndo2Command *c = new AddResourceGroupCmd(&p, g);
0148     part.addCommand(c);
0149     QString s = QString("G%1").arg(part.getProject().indexOf(g));
0150     g->setName(s);
0151     return g;
0152 }
0153 
0154 void InsertProjectTester::testResourceGroup()
0155 {
0156     Part pp(0);
0157     MainDocument part(&pp);
0158     pp.setDocument(&part);
0159 
0160     addResourceGroup(part);
0161     Project &p = part.getProject();
0162     QVERIFY(p.resourceGroupCount() == 1);
0163 
0164     Part pp2(0);
0165     MainDocument part2(&pp2);
0166     pp2.setDocument(&part2);
0167     part2.insertProject(p, 0, 0);
0168     QVERIFY(part2.getProject().resourceGroupCount() == 1);
0169 }
0170 
0171 Resource *InsertProjectTester::addResource(MainDocument &part, ResourceGroup *g)
0172 {
0173     Project &p = part.getProject();
0174     if (g == 0) {
0175         g = p.resourceGroupAt(0);
0176     }
0177     Resource *r = new Resource();
0178     KUndo2Command *c = new AddResourceCmd(g, r);
0179     part.addCommand(c);
0180     QString s = QString("%1.R%2").arg(r->parentGroup()->name()).arg(r->parentGroup()->indexOf(r));
0181     r->setName(s);
0182     return r;
0183 }
0184 
0185 void InsertProjectTester::testResource()
0186 {
0187     Part pp(0);
0188     MainDocument part(&pp);
0189     pp.setDocument(&part);
0190 
0191     addResourceGroup(part);
0192     addResource(part);
0193     Project &p = part.getProject();
0194     QVERIFY(p.resourceGroupAt(0)->numResources() == 1);
0195 
0196     Part pp2(0);
0197     MainDocument part2(&pp2);
0198     pp2.setDocument(&part2);
0199     part2.insertProject(p, 0, 0);
0200     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0201 }
0202 
0203 void InsertProjectTester::testTeamResource()
0204 {
0205     Part pp(0);
0206     MainDocument part(&pp);
0207     pp.setDocument(&part);
0208 
0209     addResourceGroup(part);
0210     Resource *r = addResource(part);
0211     r->setType(Resource::Type_Team);
0212     ResourceGroup *tg = addResourceGroup(part);
0213     Resource *t1 = addResource(part, tg);
0214     Resource *t2 = addResource(part, tg);
0215     r->setRequiredIds(QStringList() << t1->id() << t2->id());
0216     Project &p = part.getProject();
0217     QVERIFY(p.resourceGroupAt(0)->numResources() == 1);
0218     QVERIFY(p.resourceGroupAt(1)->numResources() == 2);
0219     QList<Resource*> required = p.resourceGroupAt(0)->resources().at(0)->requiredResources();
0220     QCOMPARE(required.count(), 2);
0221     QCOMPARE(required.at(0), t1);
0222     QCOMPARE(required.at(1), t2);
0223 
0224     Part pp2(0);
0225     MainDocument part2(&pp2);
0226     pp2.setDocument(&part2);
0227 
0228     part2.insertProject(p, 0, 0);
0229     Project &p2 = part2.getProject();
0230     QVERIFY(p2.resourceGroupAt(0)->numResources() == 1);
0231     QVERIFY(p2.resourceGroupAt(1)->numResources() == 2);
0232     required = p2.resourceGroupAt(0)->resources().at(0)->requiredResources();
0233     QCOMPARE(required.count(), 2);
0234     QCOMPARE(required.at(0), t1);
0235     QCOMPARE(required.at(1), t2);
0236 }
0237 
0238 void InsertProjectTester::testResourceAccount()
0239 {
0240     Part pp(0);
0241     MainDocument part(&pp);
0242     pp.setDocument(&part);
0243 
0244     addResourceGroup(part);
0245     Resource *r = addResource(part);
0246     Account *a = addAccount(part);
0247     part.addCommand(new ResourceModifyAccountCmd(*r, r->account(), a));
0248 
0249     Project &p = part.getProject();
0250     QVERIFY(p.resourceGroupAt(0)->numResources() == 1);
0251 
0252     Part pp2(0);
0253     MainDocument part2(&pp2);
0254     pp2.setDocument(&part2);
0255 
0256     part2.insertProject(p, 0, 0);
0257     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0258     QVERIFY(part2.getProject().accounts().allAccounts().contains(a));
0259     QCOMPARE(part2.getProject().resourceGroupAt(0)->resourceAt(0)->account(), a);
0260 }
0261 
0262 void InsertProjectTester::testResourceCalendar()
0263 {
0264     Part pp(0);
0265     MainDocument part(&pp);
0266     pp.setDocument(&part);
0267 
0268     Calendar *c = addCalendar(part);
0269     Project &p = part.getProject();
0270     QVERIFY(p.calendarCount() == 1);
0271 
0272     addResourceGroup(part);
0273     Resource *r = addResource(part);
0274     part.addCommand(new ModifyResourceCalendarCmd(r, c));
0275 
0276     QVERIFY(p.resourceGroupAt(0)->numResources() == 1);
0277 
0278     Part pp2(0);
0279     MainDocument part2(&pp2);
0280     pp2.setDocument(&part2);
0281 
0282     part2.insertProject(p, 0, 0);
0283     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0284     QCOMPARE(part2.getProject().allCalendars().count(), 1);
0285     QVERIFY(part2.getProject().allCalendars().contains(c));
0286     QCOMPARE(part2.getProject().resourceGroupAt(0)->resourceAt(0)->calendar(true), c);
0287 }
0288 
0289 Task *InsertProjectTester::addTask(MainDocument &part)
0290 {
0291     Project &p = part.getProject();
0292     Task *t = new Task();
0293     t->setId(p.uniqueNodeId());
0294     KUndo2Command *c = new TaskAddCmd(&p, t, 0);
0295     part.addCommand(c);
0296     return t;
0297 }
0298 
0299 void InsertProjectTester::testTask()
0300 {
0301     Part pp(0);
0302     MainDocument part(&pp);
0303     pp.setDocument(&part);
0304 
0305     addTask(part);
0306     Project &p = part.getProject();
0307     QVERIFY(p.numChildren() == 1);
0308 
0309     Part pp2(0);
0310     MainDocument part2(&pp2);
0311     pp2.setDocument(&part2);
0312 
0313     part2.insertProject(p, 0, 0);
0314     QVERIFY(part2.getProject().numChildren() == 1);
0315 }
0316 
0317 void InsertProjectTester::addGroupRequest(MainDocument &part)
0318 {
0319     Project &p = part.getProject();
0320     Task *t = static_cast<Task*>(p.childNode(0));
0321     int requests = p.resourceGroupAt(0)->requests().count();
0322     KUndo2Command *c = new AddResourceGroupRequestCmd(*t, new ResourceGroupRequest(p.resourceGroupAt(0), 1));
0323     part.addCommand(c);
0324     QVERIFY(p.resourceGroupAt(0)->requests().count() == requests+1);
0325 }
0326 
0327 void InsertProjectTester::testGroupRequest()
0328 {
0329     Part pp(0);
0330     MainDocument part(&pp);
0331     pp.setDocument(&part);
0332 
0333     addCalendar(part);
0334     addResourceGroup(part);
0335     addResource(part);
0336     addTask(part);
0337     addGroupRequest(part);
0338 
0339     Project &p = part.getProject();
0340     QVERIFY(p.numChildren() == 1);
0341 
0342     Part pp2(0);
0343     MainDocument part2(&pp2);
0344     pp2.setDocument(&part2);
0345 
0346     part2.insertProject(p, 0, 0);
0347     Project &p2 = part2.getProject();
0348     QVERIFY(p2.childNode(0)->resourceGroupRequest(p2.resourceGroupAt(0)) != 0);
0349 }
0350 
0351 void InsertProjectTester::addResourceRequest(MainDocument &part)
0352 {
0353     Project &p = part.getProject();
0354     ResourceGroupRequest *g = p.childNode(0)->requests().requests().at(0);
0355     KUndo2Command *c = new AddResourceRequestCmd(g, new  ResourceRequest(p.resourceGroupAt(0)->resourceAt(0), 1));
0356     part.addCommand(c);
0357 }
0358 
0359 void InsertProjectTester::testResourceRequest()
0360 {
0361     Part pp(0);
0362     MainDocument part(&pp);
0363     pp.setDocument(&part);
0364 
0365     addCalendar(part);
0366     addResourceGroup(part);
0367     addResource(part);
0368     addTask(part);
0369     addGroupRequest(part);
0370     addResourceRequest(part);
0371 
0372     Project &p = part.getProject();
0373     Part pp2(0);
0374     MainDocument part2(&pp2);
0375     pp2.setDocument(&part2);
0376     part2.insertProject(p, 0, 0);
0377     Project &p2 = part2.getProject();
0378     QVERIFY(p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0)) != 0);
0379 }
0380 
0381 void InsertProjectTester::testTeamResourceRequest()
0382 {
0383     Part pp(0);
0384     MainDocument part(&pp);
0385     pp.setDocument(&part);
0386 
0387     addCalendar(part);
0388     addResourceGroup(part);
0389     Resource *r = addResource(part);
0390     r->setType(Resource::Type_Team);
0391     ResourceGroup *tg = addResourceGroup(part);
0392     Resource *t1 = addResource(part, tg);
0393     r->addTeamMemberId(t1->id());
0394     Resource *t2 = addResource(part, tg);
0395     r->addTeamMemberId(t2->id());
0396     addTask(part);
0397     addGroupRequest(part);
0398     addResourceRequest(part);
0399 
0400     qDebug()<<"Start test:";
0401     Part pp2(0);
0402     MainDocument part2(&pp2);
0403     pp2.setDocument(&part2);
0404     part2.insertProject(part.getProject(), 0, 0);
0405     Project &p2 = part2.getProject();
0406     ResourceRequest *rr = p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0407     QVERIFY(rr);
0408     QCOMPARE(rr->resource(), r);
0409     QCOMPARE(rr->resource()->teamMembers().count(), 2);
0410     QCOMPARE(rr->resource()->teamMembers().at(0), t1);
0411     QCOMPARE(rr->resource()->teamMembers().at(1), t2);
0412 }
0413 
0414 Relation *InsertProjectTester::addDependency(MainDocument &part, Task *t1, Task *t2)
0415 {
0416     Project &p = part.getProject();
0417     Relation *r = new Relation(t1, t2);
0418     part.addCommand(new AddRelationCmd(p, r));
0419     return r;
0420 }
0421 
0422 void InsertProjectTester::testDependencies()
0423 {
0424     Part pp(0);
0425     MainDocument part(&pp);
0426     pp.setDocument(&part);
0427 
0428     Task *t1 = addTask(part);
0429     Task *t2 = addTask(part);
0430     QCOMPARE(t1->numDependChildNodes(), 0);
0431     QCOMPARE(t2->numDependParentNodes(), 0);
0432 
0433     Relation *r = addDependency(part, t1, t2);
0434 
0435     QCOMPARE(t1->numDependChildNodes(), 1);
0436     QCOMPARE(t2->numDependParentNodes(), 1);
0437     QCOMPARE(t1->getDependChildNode(0), r);
0438     QCOMPARE(t2->getDependParentNode(0), r);
0439 
0440     Part pp2(0);
0441     MainDocument part2(&pp2);
0442     pp2.setDocument(&part2);
0443 
0444     QVERIFY(part2.insertProject(part.getProject(), 0, 0));
0445     Project &p2 = part2.getProject();
0446 
0447     QVERIFY(p2.numChildren() == 2);
0448     QCOMPARE(p2.childNode(0), t1);
0449     QCOMPARE(p2.childNode(1), t2);
0450 
0451     QCOMPARE(t1->numDependChildNodes(), 1);
0452     QCOMPARE(t2->numDependParentNodes(), 1);
0453     QCOMPARE(t1->getDependChildNode(0), r);
0454     QCOMPARE(t2->getDependParentNode(0), r);
0455 }
0456 
0457 void InsertProjectTester::testExistingResourceAccount()
0458 {
0459     Part pp(0);
0460     MainDocument part(&pp);
0461     pp.setDocument(&part);
0462 
0463     addResourceGroup(part);
0464     Resource *r = addResource(part);
0465     Account *a = addAccount(part);
0466     part.addCommand(new ResourceModifyAccountCmd(*r, r->account(), a));
0467 
0468     Project &p = part.getProject();
0469     QVERIFY(p.resourceGroupAt(0)->numResources() == 1);
0470 
0471     QDomDocument doc = part.saveXML();
0472 
0473     Part pp2(0);
0474     MainDocument part2(&pp2);
0475     pp2.setDocument(&part2);
0476 
0477     part2.insertProject(p, 0, 0);
0478     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0479     QVERIFY(part2.getProject().accounts().allAccounts().contains(a));
0480     QCOMPARE(part2.getProject().resourceGroupAt(0)->resourceAt(0)->account(), a);
0481 
0482     part2.addCommand(new ResourceModifyAccountCmd(*(part2.getProject().resourceGroupAt(0)->resourceAt(0)), part2.getProject().resourceGroupAt(0)->resourceAt(0)->account(), 0));
0483 
0484     KoXmlDocument xdoc;
0485     xdoc.setContent(doc.toString());
0486     part.loadXML(xdoc, 0);
0487 
0488     part2.insertProject(part.getProject(), 0, 0);
0489     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0490     QVERIFY(part2.getProject().accounts().allAccounts().contains(a));
0491     QVERIFY(part2.getProject().resourceGroupAt(0)->resourceAt(0)->account() == 0);
0492 }
0493 
0494 void InsertProjectTester::testExistingResourceCalendar()
0495 {
0496     Part pp(0);
0497     MainDocument part(&pp);
0498     pp.setDocument(&part);
0499 
0500     Calendar *c = addCalendar(part);
0501     Project &p = part.getProject();
0502     QVERIFY(p.calendarCount() == 1);
0503 
0504     addResourceGroup(part);
0505     Resource *r = addResource(part);
0506     part.addCommand(new ModifyResourceCalendarCmd(r, c));
0507 
0508     QVERIFY(p.resourceGroupAt(0)->numResources() == 1);
0509 
0510     QDomDocument doc = part.saveXML();
0511 
0512     Part pp2(0);
0513     MainDocument part2(&pp2);
0514     pp2.setDocument(&part2);
0515 
0516     part2.insertProject(p, 0, 0);
0517     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0518     QCOMPARE(part2.getProject().allCalendars().count(), 1);
0519     QVERIFY(part2.getProject().allCalendars().contains(c));
0520     QCOMPARE(part2.getProject().resourceGroupAt(0)->resourceAt(0)->calendar(true), c);
0521 
0522     part2.getProject().resourceGroupAt(0)->resourceAt(0)->setCalendar(0);
0523 
0524     KoXmlDocument xdoc;
0525     xdoc.setContent(doc.toString());
0526     part.loadXML(xdoc, 0);
0527 
0528     part2.insertProject(part.getProject(), 0, 0);
0529     QVERIFY(part2.getProject().resourceGroupAt(0)->numResources() == 1);
0530     QCOMPARE(part2.getProject().allCalendars().count(), 1);
0531     QVERIFY(part2.getProject().allCalendars().contains(c));
0532     QVERIFY(part2.getProject().resourceGroupAt(0)->resourceAt(0)->calendar(true) == 0);
0533 }
0534 
0535 void InsertProjectTester::testExistingResourceRequest()
0536 {
0537     Part pp(0);
0538     MainDocument part(&pp);
0539     pp.setDocument(&part);
0540 
0541     addCalendar(part);
0542     addResourceGroup(part);
0543     addResource(part);
0544     addTask(part);
0545     addGroupRequest(part);
0546     addResourceRequest(part);
0547 
0548     QDomDocument doc = part.saveXML();
0549 
0550     Project &p = part.getProject();
0551     Part pp2(0);
0552     MainDocument part2(&pp2);
0553     pp2.setDocument(&part2);
0554     part2.insertProject(p, 0, 0);
0555     Project &p2 = part2.getProject();
0556     QVERIFY(p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0)) != 0);
0557 
0558     KoXmlDocument xdoc;
0559     xdoc.setContent(doc.toString());
0560     part.loadXML(xdoc, 0);
0561 
0562     part2.insertProject(part.getProject(), 0, 0);
0563     QVERIFY(p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0)) != 0);
0564     QVERIFY(p2.childNode(1)->requests().find(p2.resourceGroupAt(0)->resourceAt(0)) != 0);
0565 }
0566 
0567 void InsertProjectTester::testExistingRequiredResourceRequest()
0568 {
0569     Part pp(0);
0570     MainDocument part(&pp);
0571     pp.setDocument(&part);
0572 
0573     addCalendar(part);
0574     addResourceGroup(part);
0575     Resource *r = addResource(part);
0576     ResourceGroup *g = addResourceGroup(part);
0577     g->setType(ResourceGroup::Type_Material);
0578     QList<Resource*> m; m << addResource(part, g);
0579     m.first()->setType(Resource::Type_Material);
0580     r->setRequiredIds(QStringList() << m.first()->id());
0581     addTask(part);
0582     addGroupRequest(part);
0583     addResourceRequest(part);
0584 
0585     QDomDocument doc = part.saveXML();
0586 
0587     Project &p = part.getProject();
0588     Part pp2(0);
0589     MainDocument part2(&pp2);
0590     pp2.setDocument(&part2);
0591     part2.insertProject(p, 0, 0);
0592     Project &p2 = part2.getProject();
0593     ResourceRequest *rr = p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0594     QVERIFY(rr);
0595     QVERIFY(! rr->requiredResources().isEmpty());
0596     QCOMPARE(rr->requiredResources().at(0), m.first());
0597 
0598     KoXmlDocument xdoc;
0599     xdoc.setContent(doc.toString());
0600     part.loadXML(xdoc, 0);
0601 
0602     part2.insertProject(part.getProject(), 0, 0);
0603     rr = p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0604     QVERIFY(rr);
0605     QVERIFY(! rr->requiredResources().isEmpty());
0606     QCOMPARE(rr->requiredResources().at(0), m.first());
0607 
0608     rr = p2.childNode(1)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0609     QVERIFY(rr);
0610     QVERIFY(! rr->requiredResources().isEmpty());
0611     QCOMPARE(rr->requiredResources().at(0), m.first());
0612 }
0613 
0614 void InsertProjectTester::testExistingTeamResourceRequest()
0615 {
0616     Part pp(0);
0617     MainDocument part(&pp);
0618     pp.setDocument(&part);
0619 
0620     addCalendar(part);
0621     addResourceGroup(part);
0622     Resource *r = addResource(part);
0623     r->setName("R1");
0624     r->setType(Resource::Type_Team);
0625     ResourceGroup *tg = addResourceGroup(part);
0626     tg->setName("TG");
0627     Resource *t1 = addResource(part, tg);
0628     t1->setName("T1");
0629     r->addTeamMemberId(t1->id());
0630     Resource *t2 = addResource(part, tg);
0631     t2->setName("T2");
0632     r->addTeamMemberId(t2->id());
0633     addTask(part);
0634     addGroupRequest(part);
0635     addResourceRequest(part);
0636 
0637     QDomDocument doc = part.saveXML();
0638 
0639     Part pp2(0);
0640     MainDocument part2(&pp2);
0641     pp2.setDocument(&part2);
0642 
0643     Project &p2 = part2.getProject();
0644     part2.insertProject(part.getProject(), 0, 0);
0645     ResourceRequest *rr = p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0646     QVERIFY(rr);
0647     QCOMPARE(rr->resource()->teamMembers().count(), 2);
0648     QCOMPARE(rr->resource()->teamMembers().at(0), t1);
0649     QCOMPARE(rr->resource()->teamMembers().at(1), t2);
0650 
0651     KoXmlDocument xdoc;
0652     xdoc.setContent(doc.toString());
0653     part.loadXML(xdoc, 0);
0654 
0655     part2.insertProject(part.getProject(), 0, 0);
0656     QCOMPARE(p2.numChildren(), 2);
0657 
0658     QVERIFY(! p2.childNode(0)->requests().isEmpty());
0659     rr = p2.childNode(0)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0660     QVERIFY(rr);
0661     QCOMPARE(rr->resource()->teamMembers().count(), 2);
0662     QCOMPARE(rr->resource()->teamMembers().at(0), t1);
0663     QCOMPARE(rr->resource()->teamMembers().at(1), t2);
0664 
0665     QVERIFY(! p2.childNode(1)->requests().isEmpty());
0666     rr = p2.childNode(1)->requests().find(p2.resourceGroupAt(0)->resourceAt(0));
0667     QVERIFY(rr);
0668     QCOMPARE(rr->resource()->teamMembers().count(), 2);
0669     QCOMPARE(rr->resource()->teamMembers().at(0), t1);
0670     QCOMPARE(rr->resource()->teamMembers().at(1), t2);
0671 }
0672 
0673 } //namespace KPlato
0674 
0675 QTEST_MAIN(KPlato::InsertProjectTester)