diff --git a/src/presentation/pagemodel.cpp b/src/presentation/pagemodel.cpp --- a/src/presentation/pagemodel.cpp +++ b/src/presentation/pagemodel.cpp @@ -102,6 +102,35 @@ return task->title(); case Qt::CheckStateRole: return task->isDone() ? Qt::Checked : Qt::Unchecked; + case Presentation::QueryTreeModelBase::IsChildRole: + return !info ? QVariant() : info->childTask; + case Presentation::QueryTreeModelBase::ProjectRole: + if (!info || !info->projectQueryResult) { + return QVariant(); + } else if (info->projectQueryResult->data().isEmpty()) { + return QString(); + } else { + return info->projectQueryResult->data().at(0)->name(); + } + case Presentation::QueryTreeModelBase::DataSourceRole: + if (!info || !info->dataSourceQueryResult) { + return QVariant(); + } else if (info->dataSourceQueryResult->data().isEmpty()) { + return QString(); + } else { + return info->dataSourceQueryResult->data().at(0)->name(); + } + case Presentation::QueryTreeModelBase::ContextListRole: + if (!info || !info->contextQueryResult) { + return QVariant(); + } else { + const auto contexts = info->contextQueryResult->data(); + auto result = QStringList(); + std::transform(std::cbegin(contexts), std::cend(contexts), + std::back_inserter(result), + [](const Domain::Context::Ptr &context) { return context->name(); }); + return result; + } case Presentation::QueryTreeModelBase::AdditionalInfoRole: if (!info || info->childTask) return QString(); diff --git a/src/presentation/querytreemodelbase.h b/src/presentation/querytreemodelbase.h --- a/src/presentation/querytreemodelbase.h +++ b/src/presentation/querytreemodelbase.h @@ -75,6 +75,10 @@ IconNameRole, IsDefaultRole, AdditionalInfoRole, + IsChildRole, + ProjectRole, + DataSourceRole, + ContextListRole, UserRole }; diff --git a/tests/units/presentation/alltaskspagemodeltest.cpp b/tests/units/presentation/alltaskspagemodeltest.cpp --- a/tests/units/presentation/alltaskspagemodeltest.cpp +++ b/tests/units/presentation/alltaskspagemodeltest.cpp @@ -89,19 +89,22 @@ auto projectResult = Domain::QueryResult::create(projectProvider); projectProvider->append(project); + auto inboxProvider = Domain::QueryResultProvider::Ptr::create(); + auto inboxResult = Domain::QueryResult::create(inboxProvider); + Utils::MockObject taskQueriesMock; taskQueriesMock(&Domain::TaskQueries::findTopLevel).when().thenReturn(taskResult); taskQueriesMock(&Domain::TaskQueries::findChildren).when(task1).thenReturn(childTaskResult); taskQueriesMock(&Domain::TaskQueries::findChildren).when(task2).thenReturn(Domain::QueryResult::Ptr()); taskQueriesMock(&Domain::TaskQueries::findChildren).when(task3).thenReturn(Domain::QueryResult::Ptr()); taskQueriesMock(&Domain::TaskQueries::findChildren).when(childTask11).thenReturn(Domain::QueryResult::Ptr()); taskQueriesMock(&Domain::TaskQueries::findChildren).when(childTask12).thenReturn(Domain::QueryResult::Ptr()); - taskQueriesMock(&Domain::TaskQueries::findProject).when(task1).thenReturn(Domain::QueryResult::Ptr()); + taskQueriesMock(&Domain::TaskQueries::findProject).when(task1).thenReturn(inboxResult); taskQueriesMock(&Domain::TaskQueries::findProject).when(task2).thenReturn(projectResult); - taskQueriesMock(&Domain::TaskQueries::findProject).when(task3).thenReturn(Domain::QueryResult::Ptr()); - taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask11).thenReturn(Domain::QueryResult::Ptr()); - taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask12).thenReturn(Domain::QueryResult::Ptr()); + taskQueriesMock(&Domain::TaskQueries::findProject).when(task3).thenReturn(inboxResult); + taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask11).thenReturn(inboxResult); + taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask12).thenReturn(inboxResult); Utils::MockObject taskRepositoryMock; @@ -170,10 +173,16 @@ QCOMPARE(model->data(task3Index, Qt::CheckStateRole).toBool(), task3->isDone()); QCOMPARE(model->data(taskChildTask12Index, Qt::CheckStateRole).toBool(), childTask12->isDone()); - QCOMPARE(model->data(task1Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString("Inbox")); - QCOMPARE(model->data(task2Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString("Project: KDE")); - QCOMPARE(model->data(childTask11Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString()); - QCOMPARE(model->data(childTask12Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString()); + QVERIFY(model->data(task1Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QVERIFY(model->data(task2Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QCOMPARE(model->data(task1Index, Presentation::QueryTreeModelBase::ProjectRole).toString(), QString()); + QCOMPARE(model->data(task2Index, Presentation::QueryTreeModelBase::ProjectRole).toString(), QString("KDE")); + QCOMPARE(model->data(task1Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), false); + QCOMPARE(model->data(task2Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), false); + QVERIFY(!model->data(childTask11Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QVERIFY(!model->data(childTask12Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QCOMPARE(model->data(childTask11Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), true); + QCOMPARE(model->data(childTask12Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), true); // WHEN taskRepositoryMock(&Domain::TaskRepository::update).when(task1).thenReturn(new FakeJob(this)); diff --git a/tests/units/presentation/workdaypagemodeltest.cpp b/tests/units/presentation/workdaypagemodeltest.cpp --- a/tests/units/presentation/workdaypagemodeltest.cpp +++ b/tests/units/presentation/workdaypagemodeltest.cpp @@ -89,19 +89,22 @@ auto projectResult = Domain::QueryResult::create(projectProvider); projectProvider->append(project); + auto inboxProvider = Domain::QueryResultProvider::Ptr::create(); + auto inboxResult = Domain::QueryResult::create(inboxProvider); + Utils::MockObject taskQueriesMock; taskQueriesMock(&Domain::TaskQueries::findWorkdayTopLevel).when().thenReturn(taskResult); taskQueriesMock(&Domain::TaskQueries::findChildren).when(task1).thenReturn(childTaskResult); taskQueriesMock(&Domain::TaskQueries::findChildren).when(task2).thenReturn(Domain::QueryResult::Ptr()); taskQueriesMock(&Domain::TaskQueries::findChildren).when(task3).thenReturn(Domain::QueryResult::Ptr()); taskQueriesMock(&Domain::TaskQueries::findChildren).when(childTask11).thenReturn(Domain::QueryResult::Ptr()); taskQueriesMock(&Domain::TaskQueries::findChildren).when(childTask12).thenReturn(Domain::QueryResult::Ptr()); - taskQueriesMock(&Domain::TaskQueries::findProject).when(task1).thenReturn(Domain::QueryResult::Ptr()); + taskQueriesMock(&Domain::TaskQueries::findProject).when(task1).thenReturn(inboxResult); taskQueriesMock(&Domain::TaskQueries::findProject).when(task2).thenReturn(projectResult); - taskQueriesMock(&Domain::TaskQueries::findProject).when(task3).thenReturn(Domain::QueryResult::Ptr()); - taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask11).thenReturn(Domain::QueryResult::Ptr()); - taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask12).thenReturn(Domain::QueryResult::Ptr()); + taskQueriesMock(&Domain::TaskQueries::findProject).when(task3).thenReturn(inboxResult); + taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask11).thenReturn(inboxResult); + taskQueriesMock(&Domain::TaskQueries::findProject).when(childTask12).thenReturn(inboxResult); Utils::MockObject taskRepositoryMock; @@ -170,10 +173,16 @@ QCOMPARE(model->data(task3Index, Qt::CheckStateRole).toBool(), task3->isDone()); QCOMPARE(model->data(taskChildTask12Index, Qt::CheckStateRole).toBool(), childTask12->isDone()); - QCOMPARE(model->data(task1Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString("Inbox")); - QCOMPARE(model->data(task2Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString("Project: KDE")); - QCOMPARE(model->data(childTask11Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString()); - QCOMPARE(model->data(childTask12Index, Presentation::QueryTreeModelBase::AdditionalInfoRole).toString(), QString()); + QVERIFY(model->data(task1Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QVERIFY(model->data(task2Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QCOMPARE(model->data(task1Index, Presentation::QueryTreeModelBase::ProjectRole).toString(), QString()); + QCOMPARE(model->data(task2Index, Presentation::QueryTreeModelBase::ProjectRole).toString(), QString("KDE")); + QCOMPARE(model->data(task1Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), false); + QCOMPARE(model->data(task2Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), false); + QVERIFY(!model->data(childTask11Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QVERIFY(!model->data(childTask12Index, Presentation::QueryTreeModelBase::ProjectRole).isValid()); + QCOMPARE(model->data(childTask11Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), true); + QCOMPARE(model->data(childTask12Index, Presentation::QueryTreeModelBase::IsChildRole).toBool(), true); // WHEN taskRepositoryMock(&Domain::TaskRepository::update).when(task1).thenReturn(new FakeJob(this));