Changeset View
Changeset View
Standalone View
Standalone View
tests/units/presentation/contextpagemodeltest.cpp
Show All 18 Lines | 1 | /* This file is part of Zanshin | |||
---|---|---|---|---|---|
19 | You should have received a copy of the GNU General Public License | 19 | You should have received a copy of the GNU General Public License | ||
20 | along with this program; if not, write to the Free Software | 20 | along with this program; if not, write to the Free Software | ||
21 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, | 21 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, | ||
22 | USA. | 22 | USA. | ||
23 | */ | 23 | */ | ||
24 | 24 | | |||
25 | #include <testlib/qtest_zanshin.h> | 25 | #include <testlib/qtest_zanshin.h> | ||
26 | 26 | | |||
27 | #include <memory> | ||||
28 | | ||||
29 | #include <QMimeData> | ||||
30 | | ||||
27 | #include "utils/mockobject.h" | 31 | #include "utils/mockobject.h" | ||
28 | 32 | | |||
29 | #include "domain/context.h" | 33 | #include "domain/context.h" | ||
30 | #include "domain/task.h" | 34 | #include "domain/task.h" | ||
31 | #include "domain/contextqueries.h" | 35 | #include "domain/contextqueries.h" | ||
32 | #include "domain/taskqueries.h" | 36 | #include "domain/taskqueries.h" | ||
33 | 37 | | |||
34 | #include "domain/contextqueries.h" | 38 | #include "domain/contextqueries.h" | ||
▲ Show 20 Lines • Show All 186 Lines • ▼ Show 20 Line(s) | 67 | void shouldListAssociatedTaskInContextCentralListView() { | |||
221 | 225 | | |||
222 | // THEN | 226 | // THEN | ||
223 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::update).when(task1).exactly(2)); | 227 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::update).when(task1).exactly(2)); | ||
224 | 228 | | |||
225 | QCOMPARE(task1->title(), QStringLiteral("newTask1")); | 229 | QCOMPARE(task1->title(), QStringLiteral("newTask1")); | ||
226 | QCOMPARE(task2->title(), QStringLiteral("newTask2")); | 230 | QCOMPARE(task2->title(), QStringLiteral("newTask2")); | ||
227 | 231 | | |||
228 | // WHEN a task is dragged | 232 | // WHEN a task is dragged | ||
229 | QMimeData *data = model->mimeData(QModelIndexList() << task2Index); | 233 | auto data = std::unique_ptr<QMimeData>(model->mimeData(QModelIndexList() << task2Index)); | ||
230 | 234 | | |||
231 | // THEN | 235 | // THEN | ||
232 | QVERIFY(data->hasFormat(QStringLiteral("application/x-zanshin-object"))); | 236 | QVERIFY(data->hasFormat(QStringLiteral("application/x-zanshin-object"))); | ||
233 | QCOMPARE(data->property("objects").value<Domain::Artifact::List>(), | 237 | QCOMPARE(data->property("objects").value<Domain::Artifact::List>(), | ||
234 | Domain::Artifact::List() << task2); | 238 | Domain::Artifact::List() << task2); | ||
235 | 239 | | |||
236 | // WHEN a task is dropped | 240 | // WHEN a task is dropped | ||
237 | auto childTask2 = Domain::Task::Ptr::create(); | 241 | auto childTask2 = Domain::Task::Ptr::create(); | ||
238 | taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask2).thenReturn(new FakeJob(this)); | 242 | taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask2).thenReturn(new FakeJob(this)); | ||
239 | data = new QMimeData; | 243 | data.reset(new QMimeData); | ||
240 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | 244 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | ||
241 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask2)); | 245 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask2)); | ||
242 | model->dropMimeData(data, Qt::MoveAction, -1, -1, task1Index); | 246 | model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, task1Index); | ||
243 | 247 | | |||
244 | // THEN | 248 | // THEN | ||
245 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask2).exactly(1)); | 249 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask2).exactly(1)); | ||
246 | 250 | | |||
247 | // WHEN two tasks are dropped | 251 | // WHEN two tasks are dropped | ||
248 | auto childTask3 = Domain::Task::Ptr::create(); | 252 | auto childTask3 = Domain::Task::Ptr::create(); | ||
249 | auto childTask4 = Domain::Task::Ptr::create(); | 253 | auto childTask4 = Domain::Task::Ptr::create(); | ||
250 | taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask3).thenReturn(new FakeJob(this)); | 254 | taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask3).thenReturn(new FakeJob(this)); | ||
251 | taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask4).thenReturn(new FakeJob(this)); | 255 | taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask4).thenReturn(new FakeJob(this)); | ||
252 | data = new QMimeData; | 256 | data.reset(new QMimeData); | ||
253 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | 257 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | ||
254 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask3 << childTask4)); | 258 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask3 << childTask4)); | ||
255 | model->dropMimeData(data, Qt::MoveAction, -1, -1, task1Index); | 259 | model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, task1Index); | ||
256 | 260 | | |||
257 | // THEN | 261 | // THEN | ||
258 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask3).exactly(1)); | 262 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask3).exactly(1)); | ||
259 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask4).exactly(1)); | 263 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask4).exactly(1)); | ||
260 | 264 | | |||
261 | // WHEN a task and a note are dropped | 265 | // WHEN a task and a note are dropped | ||
262 | Domain::Artifact::Ptr childTask5(new Domain::Task); | 266 | Domain::Artifact::Ptr childTask5(new Domain::Task); | ||
263 | Domain::Artifact::Ptr childNote(new Domain::Note); | 267 | Domain::Artifact::Ptr childNote(new Domain::Note); | ||
264 | data = new QMimeData; | 268 | data.reset(new QMimeData); | ||
265 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | 269 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | ||
266 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask5 << childNote)); | 270 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask5 << childNote)); | ||
267 | model->dropMimeData(data, Qt::MoveAction, -1, -1, task1Index); | 271 | model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, task1Index); | ||
268 | 272 | | |||
269 | // THEN | 273 | // THEN | ||
270 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask5.objectCast<Domain::Task>()).exactly(0)); | 274 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::associate).when(task1, childTask5.objectCast<Domain::Task>()).exactly(0)); | ||
271 | } | 275 | } | ||
272 | 276 | | |||
273 | void shouldAddTasksInContext() | 277 | void shouldAddTasksInContext() | ||
274 | { | 278 | { | ||
275 | // GIVEN | 279 | // GIVEN | ||
▲ Show 20 Lines • Show All 347 Lines • ▼ Show 20 Line(s) | 585 | { | |||
623 | page.setErrorHandler(&errorHandler); | 627 | page.setErrorHandler(&errorHandler); | ||
624 | 628 | | |||
625 | // WHEN a task is dropped | 629 | // WHEN a task is dropped | ||
626 | auto childTask2 = Domain::Task::Ptr::create(); | 630 | auto childTask2 = Domain::Task::Ptr::create(); | ||
627 | childTask2->setTitle(QStringLiteral("childTask2")); | 631 | childTask2->setTitle(QStringLiteral("childTask2")); | ||
628 | auto job = new FakeJob(this); | 632 | auto job = new FakeJob(this); | ||
629 | job->setExpectedError(KJob::KilledJobError, QStringLiteral("Foo")); | 633 | job->setExpectedError(KJob::KilledJobError, QStringLiteral("Foo")); | ||
630 | taskRepositoryMock(&Domain::TaskRepository::associate).when(parentTask, childTask2).thenReturn(job); | 634 | taskRepositoryMock(&Domain::TaskRepository::associate).when(parentTask, childTask2).thenReturn(job); | ||
631 | auto data = new QMimeData; | 635 | auto data = std::make_unique<QMimeData>(); | ||
632 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | 636 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | ||
633 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask2)); | 637 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask2)); | ||
634 | model->dropMimeData(data, Qt::MoveAction, -1, -1, parentTaskIndex); | 638 | model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, parentTaskIndex); | ||
635 | 639 | | |||
636 | // THEN | 640 | // THEN | ||
637 | QTest::qWait(150); | 641 | QTest::qWait(150); | ||
638 | QCOMPARE(errorHandler.m_message, QStringLiteral("Cannot move task childTask2 as sub-task of A parent task: Foo")); | 642 | QCOMPARE(errorHandler.m_message, QStringLiteral("Cannot move task childTask2 as sub-task of A parent task: Foo")); | ||
639 | } | 643 | } | ||
640 | 644 | | |||
641 | void shouldAssociateToContextWithNoParentWhenDroppingOnEmptyArea() | 645 | void shouldAssociateToContextWithNoParentWhenDroppingOnEmptyArea() | ||
642 | { | 646 | { | ||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Line(s) | |||||
686 | auto model = page.centralListModel(); | 690 | auto model = page.centralListModel(); | ||
687 | 691 | | |||
688 | // WHEN | 692 | // WHEN | ||
689 | taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask1).thenReturn(new FakeJob(this)); | 693 | taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask1).thenReturn(new FakeJob(this)); | ||
690 | taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask2).thenReturn(new FakeJob(this)); | 694 | taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask2).thenReturn(new FakeJob(this)); | ||
691 | contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask1).thenReturn(new FakeJob(this)); | 695 | contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask1).thenReturn(new FakeJob(this)); | ||
692 | contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask2).thenReturn(new FakeJob(this)); | 696 | contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask2).thenReturn(new FakeJob(this)); | ||
693 | 697 | | |||
694 | auto data = new QMimeData; | 698 | auto data = std::make_unique<QMimeData>(); | ||
695 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | 699 | data->setData(QStringLiteral("application/x-zanshin-object"), "object"); | ||
696 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask1 << childTask2)); // both will be DnD on the empty part | 700 | data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << childTask1 << childTask2)); // both will be DnD on the empty part | ||
697 | model->dropMimeData(data, Qt::MoveAction, -1, -1, QModelIndex()); | 701 | model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, QModelIndex()); | ||
698 | 702 | | |||
699 | // THEN | 703 | // THEN | ||
700 | QTest::qWait(150); | 704 | QTest::qWait(150); | ||
701 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask1).exactly(1)); | 705 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask1).exactly(1)); | ||
702 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask2).exactly(1)); | 706 | QVERIFY(taskRepositoryMock(&Domain::TaskRepository::dissociate).when(childTask2).exactly(1)); | ||
703 | QVERIFY(contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask1).exactly(1)); | 707 | QVERIFY(contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask1).exactly(1)); | ||
704 | QVERIFY(contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask2).exactly(1)); | 708 | QVERIFY(contextRepositoryMock(&Domain::ContextRepository::associate).when(context, childTask2).exactly(1)); | ||
705 | } | 709 | } | ||
706 | }; | 710 | }; | ||
707 | 711 | | |||
708 | ZANSHIN_TEST_MAIN(ContextPageModelTest) | 712 | ZANSHIN_TEST_MAIN(ContextPageModelTest) | ||
709 | 713 | | |||
710 | #include "contextpagemodeltest.moc" | 714 | #include "contextpagemodeltest.moc" |