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)