diff --git a/src/presentation/availabletaskpagesmodel.h b/src/presentation/availabletaskpagesmodel.h --- a/src/presentation/availabletaskpagesmodel.h +++ b/src/presentation/availabletaskpagesmodel.h @@ -29,6 +29,7 @@ #include "domain/contextqueries.h" #include "domain/contextrepository.h" +#include "domain/datasourcequeries.h" #include "domain/projectqueries.h" #include "domain/projectrepository.h" #include "domain/taskqueries.h" @@ -45,7 +46,8 @@ { Q_OBJECT public: - explicit AvailableTaskPagesModel(const Domain::ProjectQueries::Ptr &projectQueries, + explicit AvailableTaskPagesModel(const Domain::DataSourceQueries::Ptr &dataSourceQueries, + const Domain::ProjectQueries::Ptr &projectQueries, const Domain::ProjectRepository::Ptr &projectRepository, const Domain::ContextQueries::Ptr &contextQueries, const Domain::ContextRepository::Ptr &contextRepository, @@ -72,6 +74,8 @@ QAbstractItemModel *m_pageListModel; Presentation::AvailablePagesSortFilterProxyModel *m_sortProxyModel; + Domain::DataSourceQueries::Ptr m_dataSourceQueries; + Domain::ProjectQueries::Ptr m_projectQueries; Domain::ProjectRepository::Ptr m_projectRepository; diff --git a/src/presentation/availabletaskpagesmodel.cpp b/src/presentation/availabletaskpagesmodel.cpp --- a/src/presentation/availabletaskpagesmodel.cpp +++ b/src/presentation/availabletaskpagesmodel.cpp @@ -48,7 +48,8 @@ using namespace Presentation; -AvailableTaskPagesModel::AvailableTaskPagesModel(const Domain::ProjectQueries::Ptr &projectQueries, +AvailableTaskPagesModel::AvailableTaskPagesModel(const Domain::DataSourceQueries::Ptr &dataSourceQueries, + const Domain::ProjectQueries::Ptr &projectQueries, const Domain::ProjectRepository::Ptr &projectRepository, const Domain::ContextQueries::Ptr &contextQueries, const Domain::ContextRepository::Ptr &contextRepository, @@ -58,6 +59,7 @@ : AvailablePagesModelInterface(parent), m_pageListModel(Q_NULLPTR), m_sortProxyModel(Q_NULLPTR), + m_dataSourceQueries(dataSourceQueries), m_projectQueries(projectQueries), m_projectRepository(projectRepository), m_contextQueries(contextQueries), @@ -190,9 +192,11 @@ if (!object) return Domain::QueryResult::create(m_rootsProvider); else if (object == m_projectsObject) - return Domain::QueryResult::copy(m_projectQueries->findAll()); + return Domain::QueryResult::copy(m_dataSourceQueries->findAllSelected()); else if (object == m_contextsObject) return Domain::QueryResult::copy(m_contextQueries->findAll()); + else if (const auto source = object.objectCast()) + return Domain::QueryResult::copy(m_dataSourceQueries->findProjects(source)); else return Domain::QueryResult::Ptr(); }; @@ -226,7 +230,8 @@ && (object == m_inboxObject || object == m_workdayObject || object == m_projectsObject - || object == m_contextsObject)) { + || object == m_contextsObject + || object.objectCast())) { return QVariant(); } @@ -237,6 +242,7 @@ : (object == m_workdayObject) ? QStringLiteral("go-jump-today") : (object == m_projectsObject) ? QStringLiteral("folder") : (object == m_contextsObject) ? QStringLiteral("folder") + : object.objectCast() ? QStringLiteral("folder") : object.objectCast() ? QStringLiteral("view-pim-notes") : QStringLiteral("view-pim-tasks"); @@ -257,7 +263,8 @@ if (object == m_inboxObject || object == m_workdayObject || object == m_projectsObject - || object == m_contextsObject) { + || object == m_contextsObject + || object.objectCast()) { return false; } diff --git a/src/zanshin/app/dependencies.cpp b/src/zanshin/app/dependencies.cpp --- a/src/zanshin/app/dependencies.cpp +++ b/src/zanshin/app/dependencies.cpp @@ -117,7 +117,8 @@ }); deps.add #include +#include + #include "presentation/applicationmodel.h" #include "presentation/errorhandler.h" #include "presentation/querytreemodelbase.h" +#include "akonadi/akonadiapplicationselectedattribute.h" #include "akonadi/akonadicache.h" #include "akonadi/akonadicachingstorage.h" #include "akonadi/akonadimonitorimpl.h" #include "akonadi/akonadimessaginginterface.h" +#include "akonadi/akonaditimestampattribute.h" #include "utils/dependencymanager.h" #include "utils/jobhandler.h" @@ -102,6 +106,9 @@ initializedDependencies = true; } + Akonadi::AttributeFactory::registerAttribute(); + Akonadi::AttributeFactory::registerAttribute(); + const auto xmlFile = QString::fromLocal8Bit(qgetenv("ZANSHIN_USER_XMLDATA")); if (xmlFile.isEmpty()) { qDebug() << "FATAL ERROR! ZANSHIN_USER_XMLDATA WAS NOT PROVIDED\n\n"; @@ -496,14 +503,12 @@ context->waitForStableState(); } -WHEN("^I rename a \"(.*)\" named \"(.*)\" to \"(.*)\"$") { - REGEX_PARAM(QString, objectType); +WHEN("^I rename the page named \"(.*)\" under \"(.*)\" to \"(.*)\"$") { REGEX_PARAM(QString, oldName); + REGEX_PARAM(QString, path); REGEX_PARAM(QString, newName); - const QString pageNodeName = (objectType == QStringLiteral("project")) ? QStringLiteral("Projects / ") - : (objectType == QStringLiteral("context")) ? QStringLiteral("Contexts / ") - : QString(); + const QString pageNodeName = path + " / "; VERIFY(!pageNodeName.isEmpty()); @@ -522,14 +527,11 @@ context->waitForStableState(); } -WHEN("^I remove a \"(.*)\" named \"(.*)\"$") { - REGEX_PARAM(QString, objectType); - REGEX_PARAM(QString, objectName); +WHEN("^I remove the page named \"(.*)\" under \"(.*)\"$") { + REGEX_PARAM(QString, name); + REGEX_PARAM(QString, path); - const QString pageNodeName = (objectType == QStringLiteral("project")) ? QStringLiteral("Projects / ") - : (objectType == QStringLiteral("context")) ? QStringLiteral("Contexts / ") - : (objectType == QStringLiteral("tag")) ? QStringLiteral("Tags / ") - : QString(); + const QString pageNodeName = path + " / "; VERIFY(!pageNodeName.isEmpty()); @@ -541,7 +543,7 @@ VERIFY(pageListModel); context->waitForStableState(); - QModelIndex pageIndex = Zanshin::findIndex(pageListModel, pageNodeName + objectName); + QModelIndex pageIndex = Zanshin::findIndex(pageListModel, pageNodeName + name); VERIFY(pageIndex.isValid()); VERIFY(QMetaObject::invokeMethod(availablePages, "removeItem", diff --git a/tests/features/renku/features/tags/tag-remove.feature b/tests/features/renku/features/tags/tag-remove.feature --- a/tests/features/renku/features/tags/tag-remove.feature +++ b/tests/features/renku/features/tags/tag-remove.feature @@ -5,7 +5,7 @@ Scenario: Removed tag disappear from the list Given I display the available pages - When I remove a "tag" named "Physics" + When I remove the page named "Physics" under "Tags" And I list the items Then the list is: | display | icon | diff --git a/tests/features/zanshin/features/contexts/context-add.feature b/tests/features/zanshin/features/contexts/context-add.feature --- a/tests/features/zanshin/features/contexts/context-add.feature +++ b/tests/features/zanshin/features/contexts/context-add.feature @@ -9,15 +9,17 @@ When I add a "context" named "Internet" And I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Errands | view-pim-notes | - | Contexts / Internet | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | + | Contexts / Internet | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/features/zanshin/features/contexts/context-drag-and-drop.feature b/tests/features/zanshin/features/contexts/context-drag-and-drop.feature --- a/tests/features/zanshin/features/contexts/context-drag-and-drop.feature +++ b/tests/features/zanshin/features/contexts/context-drag-and-drop.feature @@ -16,7 +16,7 @@ | Buy rutabagas | Scenario: Dropping a task on a context from the project central list - Given I display the "Projects / Prepare talk about TDD" page + Given I display the "Projects / Calendar1 / Prepare talk about TDD" page And there is an item named "Create examples and exercices" in the central list When I drop the item on "Contexts / Online" in the page list And I display the "Contexts / Online" page diff --git a/tests/features/zanshin/features/contexts/context-edit.feature b/tests/features/zanshin/features/contexts/context-edit.feature --- a/tests/features/zanshin/features/contexts/context-edit.feature +++ b/tests/features/zanshin/features/contexts/context-edit.feature @@ -5,16 +5,18 @@ Scenario: Renamed context appear in the list Given I display the available pages - When I rename a "context" named "Errands" to "Chores" + When I rename the page named "Errands" under "Contexts" to "Chores" And I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Chores | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Contexts | folder | + | Contexts / Chores | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/features/zanshin/features/contexts/context-remove.feature b/tests/features/zanshin/features/contexts/context-remove.feature --- a/tests/features/zanshin/features/contexts/context-remove.feature +++ b/tests/features/zanshin/features/contexts/context-remove.feature @@ -3,19 +3,20 @@ I can remove a context In order to maintain their semantic -@wip Scenario: Removed context disappear from the list Given I display the available pages - When I remove a "context" named "Online" + When I remove the page named "Online" under "Contexts" And I list the items Then the list is: - | display | icon | - | Contexts | folder | - | Contexts / Chores | view-pim-notes | - | Contexts / Internet | view-pim-notes | - | Inbox | mail-folder-inbox | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | diff --git a/tests/features/zanshin/features/contexts/context-task-remove.feature b/tests/features/zanshin/features/contexts/context-task-remove.feature --- a/tests/features/zanshin/features/contexts/context-task-remove.feature +++ b/tests/features/zanshin/features/contexts/context-task-remove.feature @@ -4,15 +4,15 @@ In order to keep my context meaningful Scenario: Removing a task from a context keeps it in the project page it's linked to - Given I display the "Projects / Prepare talk about TDD" page + Given I display the "Projects / Calendar1 / Prepare talk about TDD" page And there is an item named "Create examples and exercices" in the central list And I drop the item on "Contexts / Online" in the page list And I display the "Contexts / Online" page And there is an item named "Create examples and exercices" in the central list When I remove the item And I look at the central list Then the list does not contain "Create examples and exercices" - And I display the "Projects / Prepare talk about TDD" page + And I display the "Projects / Calendar1 / Prepare talk about TDD" page Then there is an item named "Create examples and exercices" in the central list Scenario: Removing a task linked only to a context moves it back to the inbox diff --git a/tests/features/zanshin/features/datasource/datasource-selection.feature b/tests/features/zanshin/features/datasource/datasource-selection.feature --- a/tests/features/zanshin/features/datasource/datasource-selection.feature +++ b/tests/features/zanshin/features/datasource/datasource-selection.feature @@ -38,28 +38,31 @@ And I display the available pages And I list the items Then the list is: - | display | - | Inbox | - | Workday | - | Projects | - | Projects / Backlog | - | Contexts | - | Contexts / Errands | - | Contexts / Online | + | display | + | Inbox | + | Workday | + | Projects | + | Projects / Calendar2 | + | Projects / Calendar2 / Backlog | + | Contexts | + | Contexts / Errands | + | Contexts / Online | Scenario: Checking impacts project list Given there is an item named "TestData / Calendar1" in the available data sources When I check the item And I display the available pages And I list the items Then the list is: - | display | - | Inbox | - | Workday | - | Projects | - | Projects / Backlog | - | Projects / Prepare talk about TDD | - | Projects / Read List | - | Contexts | - | Contexts / Errands | - | Contexts / Online | + | display | + | Inbox | + | Workday | + | Projects | + | Projects / Calendar1 | + | Projects / Calendar1 / Prepare talk about TDD | + | Projects / Calendar1 / Read List | + | Projects / Calendar2 | + | Projects / Calendar2 / Backlog | + | Contexts | + | Contexts / Errands | + | Contexts / Online | diff --git a/tests/features/zanshin/features/editing/adding-task.feature b/tests/features/zanshin/features/editing/adding-task.feature --- a/tests/features/zanshin/features/editing/adding-task.feature +++ b/tests/features/zanshin/features/editing/adding-task.feature @@ -11,9 +11,9 @@ Then the list contains "" Examples: - | page | title | - | Inbox | Buy a book | - | Projects / Backlog | Setup a release party | + | page | title | + | Inbox | Buy a book | + | Projects / Calendar2 / Backlog | Setup a release party | Scenario Outline: Adding a task as a child of another task in a page Given I display the "<page>" page @@ -25,6 +25,6 @@ Then the list contains "<parent> / <title>" Examples: - | page | parent | title | - | Inbox | Buy a book | Make sure it is a good book | - | Projects / Backlog | Setup a release party | Make sure there was a release | + | page | parent | title | + | Inbox | Buy a book | Make sure it is a good book | + | Projects / Calendar2 / Backlog | Setup a release party | Make sure there was a release | diff --git a/tests/features/zanshin/features/editing/removing-task.feature b/tests/features/zanshin/features/editing/removing-task.feature --- a/tests/features/zanshin/features/editing/removing-task.feature +++ b/tests/features/zanshin/features/editing/removing-task.feature @@ -11,7 +11,7 @@ Then the list does not contain "<title>" Examples: - | page | title | - | Inbox | Buy cheese | - | Projects / Read List | "Domain Driven Design" by Eric Evans | + | page | title | + | Inbox | Buy cheese | + | Projects / Calendar1 / Read List | "Domain Driven Design" by Eric Evans | diff --git a/tests/features/zanshin/features/inbox/inbox-drag-and-drop.feature b/tests/features/zanshin/features/inbox/inbox-drag-and-drop.feature --- a/tests/features/zanshin/features/inbox/inbox-drag-and-drop.feature +++ b/tests/features/zanshin/features/inbox/inbox-drag-and-drop.feature @@ -81,7 +81,7 @@ | Buy rutabagas | Scenario: Dropping a task on the inbox removes it from it's associated project - Given I display the "Projects / Prepare talk about TDD" page + Given I display the "Projects / Calendar1 / Prepare talk about TDD" page And there is an item named "Create Sozi SVG" in the central list When I drop the item on "Inbox" in the page list And I display the "Inbox" page diff --git a/tests/features/zanshin/features/pages/pages-display.feature b/tests/features/zanshin/features/pages/pages-display.feature --- a/tests/features/zanshin/features/pages/pages-display.feature +++ b/tests/features/zanshin/features/pages/pages-display.feature @@ -7,14 +7,16 @@ Given I display the available pages When I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Errands | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/features/zanshin/features/projects/project-add.feature b/tests/features/zanshin/features/projects/project-add.feature --- a/tests/features/zanshin/features/projects/project-add.feature +++ b/tests/features/zanshin/features/projects/project-add.feature @@ -8,14 +8,16 @@ When I add a project named "Birthday" in the source named "TestData / Calendar1" And I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Birthday | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Errands | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Birthday | view-pim-tasks | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/features/zanshin/features/projects/project-display.feature b/tests/features/zanshin/features/projects/project-display.feature --- a/tests/features/zanshin/features/projects/project-display.feature +++ b/tests/features/zanshin/features/projects/project-display.feature @@ -4,7 +4,7 @@ In order to see the artifacts associated to it Scenario: Project tasks appear in the corresponding page - Given I display the "Projects / Read List" page + Given I display the "Projects / Calendar1 / Read List" page And I look at the central list When I list the items Then the list is: diff --git a/tests/features/zanshin/features/projects/project-drag-and-drop.feature b/tests/features/zanshin/features/projects/project-drag-and-drop.feature --- a/tests/features/zanshin/features/projects/project-drag-and-drop.feature +++ b/tests/features/zanshin/features/projects/project-drag-and-drop.feature @@ -6,8 +6,8 @@ Scenario: Dropping a task on a project Given I display the "Inbox" page And there is an item named ""The Pragmatic Programmer" by Hunt and Thomas" in the central list - When I drop the item on "Projects / Read List" in the page list - And I display the "Projects / Read List" page + When I drop the item on "Projects / Calendar1 / Read List" in the page list + And I display the "Projects / Calendar1 / Read List" page And I look at the central list And I list the items Then the list is: @@ -19,8 +19,8 @@ Scenario: Dropping a task on a project from context central list Given I display the "Contexts / Errands" page And there is an item named "Buy kiwis" in the central list - When I drop the item on "Projects / Backlog" in the page list - And I display the "Projects / Backlog" page + When I drop the item on "Projects / Calendar2 / Backlog" in the page list + And I display the "Projects / Calendar2 / Backlog" page And I look at the central list And I list the items Then the list is: diff --git a/tests/features/zanshin/features/projects/project-edit.feature b/tests/features/zanshin/features/projects/project-edit.feature --- a/tests/features/zanshin/features/projects/project-edit.feature +++ b/tests/features/zanshin/features/projects/project-edit.feature @@ -5,16 +5,18 @@ Scenario: Renamed projects appear in the list Given I display the available pages - When I rename a "project" named "Backlog" to "Party" + When I rename the page named "Backlog" under "Projects / Calendar2" to "Party" And I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Party | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Errands | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Party | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/features/zanshin/features/projects/project-remove.feature b/tests/features/zanshin/features/projects/project-remove.feature --- a/tests/features/zanshin/features/projects/project-remove.feature +++ b/tests/features/zanshin/features/projects/project-remove.feature @@ -5,15 +5,17 @@ Scenario: Removing a simple project from the list Given I display the available pages - When I remove a "project" named "Prepare talk about TDD" + When I remove the page named "Prepare talk about TDD" under "Projects / Calendar1" And I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Errands | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/features/zanshin/features/projects/project-task-add.feature b/tests/features/zanshin/features/projects/project-task-add.feature --- a/tests/features/zanshin/features/projects/project-task-add.feature +++ b/tests/features/zanshin/features/projects/project-task-add.feature @@ -4,7 +4,7 @@ In order to organize my tasks Scenario: Task added from a project appear in its list - Given I display the "Projects / Backlog" page + Given I display the "Projects / Calendar2 / Backlog" page When I add a "task" named "Buy a cake" And I add a "task" named "Buy a present" And I look at the central list diff --git a/tests/features/zanshin/features/projects/project-task-promote.feature b/tests/features/zanshin/features/projects/project-task-promote.feature --- a/tests/features/zanshin/features/projects/project-task-promote.feature +++ b/tests/features/zanshin/features/projects/project-task-promote.feature @@ -4,23 +4,25 @@ In order to organize my tasks Scenario: Task promoted into a project appears in the list - Given I display the "Projects / Backlog" page + Given I display the "Projects / Calendar2 / Backlog" page And I add a "task" named "Design a present" And I look at the central list And there is an item named "Design a present" in the central list When I promote the item And I display the available pages And I list the items Then the list is: - | display | icon | - | Inbox | mail-folder-inbox | - | Workday | go-jump-today | - | Projects | folder | - | Projects / Backlog | view-pim-tasks | - | Projects / Design a present | view-pim-tasks | - | Projects / Prepare talk about TDD | view-pim-tasks | - | Projects / Read List | view-pim-tasks | - | Contexts | folder | - | Contexts / Errands | view-pim-notes | - | Contexts / Online | view-pim-notes | + | display | icon | + | Inbox | mail-folder-inbox | + | Workday | go-jump-today | + | Projects | folder | + | Projects / Calendar1 | folder | + | Projects / Calendar1 / Prepare talk about TDD | view-pim-tasks | + | Projects / Calendar1 / Read List | view-pim-tasks | + | Projects / Calendar2 | folder | + | Projects / Calendar2 / Backlog | view-pim-tasks | + | Projects / Calendar2 / Design a present | view-pim-tasks | + | Contexts | folder | + | Contexts / Errands | view-pim-notes | + | Contexts / Online | view-pim-notes | diff --git a/tests/units/presentation/availabletaskpagesmodeltest.cpp b/tests/units/presentation/availabletaskpagesmodeltest.cpp --- a/tests/units/presentation/availabletaskpagesmodeltest.cpp +++ b/tests/units/presentation/availabletaskpagesmodeltest.cpp @@ -65,7 +65,7 @@ void shouldDeclareOnlyProjectAndContextPages() { // GIVEN - Presentation::AvailableTaskPagesModel pages({}, {}, {}, {}, {}, {}); + Presentation::AvailableTaskPagesModel pages({}, {}, {}, {}, {}, {}, {}); // THEN QVERIFY(pages.hasProjectPages()); @@ -77,15 +77,35 @@ { // GIVEN - // Two projects - auto project1 = Domain::Project::Ptr::create(); - project1->setName(QStringLiteral("Project 1")); - auto project2 = Domain::Project::Ptr::create(); - project2->setName(QStringLiteral("Project 2")); - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); - projectProvider->append(project2); - projectProvider->append(project1); // note: reversed order, to test sorting + // Two selected data sources + auto source1 = Domain::DataSource::Ptr::create(); + source1->setName("source1"); + auto source2 = Domain::DataSource::Ptr::create(); + source2->setName("source2"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source1); + sourceProvider->append(source2); + + // Two projects under source 1 + auto project11 = Domain::Project::Ptr::create(); + project11->setName(QStringLiteral("Project 11")); + auto project12 = Domain::Project::Ptr::create(); + project12->setName(QStringLiteral("Project 12")); + auto project1Provider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); + auto project1Result = Domain::QueryResult<Domain::Project::Ptr>::create(project1Provider); + project1Provider->append(project12); + project1Provider->append(project11); // note: reversed order, to test sorting + + // Two projects under source 2 + auto project21 = Domain::Project::Ptr::create(); + project21->setName(QStringLiteral("Project 21")); + auto project22 = Domain::Project::Ptr::create(); + project22->setName(QStringLiteral("Project 22")); + auto project2Provider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); + auto project2Result = Domain::QueryResult<Domain::Project::Ptr>::create(project2Provider); + project2Provider->append(project22); + project2Provider->append(project21); // note: reversed order, to test sorting // Two contexts auto context1 = Domain::Context::Ptr::create(); @@ -101,8 +121,10 @@ Domain::Artifact::Ptr taskToDrop(new Domain::Task); Domain::Artifact::Ptr noteToDrop(new Domain::Note); - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source1).thenReturn(project1Result); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source2).thenReturn(project2Result); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; @@ -112,7 +134,8 @@ Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -126,18 +149,26 @@ const QModelIndex inboxIndex = model->index(0, 0); const QModelIndex workdayIndex = model->index(1, 0); const QModelIndex projectsIndex = model->index(2, 0); - const QModelIndex project1Index = model->index(0, 0, projectsIndex); - const QModelIndex project2Index = model->index(1, 0, projectsIndex); + const QModelIndex source1Index = model->index(0, 0, projectsIndex); + const QModelIndex project11Index = model->index(0, 0, source1Index); + const QModelIndex project12Index = model->index(1, 0, source1Index); + const QModelIndex source2Index = model->index(1, 0, projectsIndex); + const QModelIndex project21Index = model->index(0, 0, source2Index); + const QModelIndex project22Index = model->index(1, 0, source2Index); const QModelIndex contextsIndex = model->index(3, 0); const QModelIndex context1Index = model->index(0, 0, contextsIndex); const QModelIndex context2Index = model->index(1, 0, contextsIndex); QCOMPARE(model->rowCount(), 4); QCOMPARE(model->rowCount(inboxIndex), 0); QCOMPARE(model->rowCount(workdayIndex), 0); QCOMPARE(model->rowCount(projectsIndex), 2); - QCOMPARE(model->rowCount(project1Index), 0); - QCOMPARE(model->rowCount(project2Index), 0); + QCOMPARE(model->rowCount(source1Index), 2); + QCOMPARE(model->rowCount(project11Index), 0); + QCOMPARE(model->rowCount(project12Index), 0); + QCOMPARE(model->rowCount(source2Index), 2); + QCOMPARE(model->rowCount(project21Index), 0); + QCOMPARE(model->rowCount(project22Index), 0); QCOMPARE(model->rowCount(contextsIndex), 2); QCOMPARE(model->rowCount(context1Index), 0); QCOMPARE(model->rowCount(context2Index), 0); @@ -148,82 +179,112 @@ QCOMPARE(model->flags(inboxIndex), (defaultFlags & ~(Qt::ItemIsEditable)) | Qt::ItemIsDropEnabled); QCOMPARE(model->flags(workdayIndex), (defaultFlags & ~(Qt::ItemIsEditable)) | Qt::ItemIsDropEnabled); QCOMPARE(model->flags(projectsIndex), Qt::NoItemFlags); - QCOMPARE(model->flags(project1Index), defaultFlags | Qt::ItemIsDropEnabled); - QCOMPARE(model->flags(project2Index), defaultFlags | Qt::ItemIsDropEnabled); + QCOMPARE(model->flags(source1Index), Qt::NoItemFlags); + QCOMPARE(model->flags(project11Index), defaultFlags | Qt::ItemIsDropEnabled); + QCOMPARE(model->flags(project12Index), defaultFlags | Qt::ItemIsDropEnabled); + QCOMPARE(model->flags(source2Index), Qt::NoItemFlags); + QCOMPARE(model->flags(project21Index), defaultFlags | Qt::ItemIsDropEnabled); + QCOMPARE(model->flags(project22Index), defaultFlags | Qt::ItemIsDropEnabled); QCOMPARE(model->flags(contextsIndex), Qt::NoItemFlags); QCOMPARE(model->flags(context1Index), defaultFlags | Qt::ItemIsDropEnabled); QCOMPARE(model->flags(context2Index), defaultFlags | Qt::ItemIsDropEnabled); QCOMPARE(model->data(inboxIndex).toString(), i18n("Inbox")); QCOMPARE(model->data(workdayIndex).toString(), i18n("Workday")); QCOMPARE(model->data(projectsIndex).toString(), i18n("Projects")); - QCOMPARE(model->data(project1Index).toString(), project1->name()); - QCOMPARE(model->data(project2Index).toString(), project2->name()); + QCOMPARE(model->data(source1Index).toString(), source1->name()); + QCOMPARE(model->data(project11Index).toString(), project11->name()); + QCOMPARE(model->data(project12Index).toString(), project12->name()); + QCOMPARE(model->data(source2Index).toString(), source2->name()); + QCOMPARE(model->data(project21Index).toString(), project21->name()); + QCOMPARE(model->data(project22Index).toString(), project22->name()); QCOMPARE(model->data(contextsIndex).toString(), i18n("Contexts")); QCOMPARE(model->data(context1Index).toString(), context1->name()); QCOMPARE(model->data(context2Index).toString(), context2->name()); QVERIFY(!model->data(inboxIndex, Qt::EditRole).isValid()); QVERIFY(!model->data(workdayIndex, Qt::EditRole).isValid()); QVERIFY(!model->data(projectsIndex, Qt::EditRole).isValid()); - QCOMPARE(model->data(project1Index, Qt::EditRole).toString(), project1->name()); - QCOMPARE(model->data(project2Index, Qt::EditRole).toString(), project2->name()); + QVERIFY(!model->data(source1Index, Qt::EditRole).isValid()); + QCOMPARE(model->data(project11Index, Qt::EditRole).toString(), project11->name()); + QCOMPARE(model->data(project12Index, Qt::EditRole).toString(), project12->name()); + QVERIFY(!model->data(source2Index, Qt::EditRole).isValid()); + QCOMPARE(model->data(project21Index, Qt::EditRole).toString(), project21->name()); + QCOMPARE(model->data(project22Index, Qt::EditRole).toString(), project22->name()); QVERIFY(!model->data(contextsIndex, Qt::EditRole).isValid()); QCOMPARE(model->data(context1Index, Qt::EditRole).toString(), context1->name()); QCOMPARE(model->data(context2Index, Qt::EditRole).toString(), context2->name()); QCOMPARE(model->data(inboxIndex, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("mail-folder-inbox")); QCOMPARE(model->data(workdayIndex, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("go-jump-today")); QCOMPARE(model->data(projectsIndex, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("folder")); - QCOMPARE(model->data(project1Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-tasks")); - QCOMPARE(model->data(project2Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-tasks")); + QCOMPARE(model->data(source1Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("folder")); + QCOMPARE(model->data(project11Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-tasks")); + QCOMPARE(model->data(project12Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-tasks")); + QCOMPARE(model->data(source2Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("folder")); + QCOMPARE(model->data(project21Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-tasks")); + QCOMPARE(model->data(project22Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-tasks")); QCOMPARE(model->data(contextsIndex, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("folder")); QCOMPARE(model->data(context1Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-notes")); QCOMPARE(model->data(context2Index, Presentation::QueryTreeModelBase::IconNameRole).toString(), QStringLiteral("view-pim-notes")); QVERIFY(!model->data(inboxIndex, Qt::CheckStateRole).isValid()); QVERIFY(!model->data(workdayIndex, Qt::CheckStateRole).isValid()); QVERIFY(!model->data(projectsIndex, Qt::CheckStateRole).isValid()); - QVERIFY(!model->data(project1Index, Qt::CheckStateRole).isValid()); - QVERIFY(!model->data(project2Index, Qt::CheckStateRole).isValid()); + QVERIFY(!model->data(source1Index, Qt::CheckStateRole).isValid()); + QVERIFY(!model->data(project11Index, Qt::CheckStateRole).isValid()); + QVERIFY(!model->data(project12Index, Qt::CheckStateRole).isValid()); + QVERIFY(!model->data(source2Index, Qt::CheckStateRole).isValid()); + QVERIFY(!model->data(project21Index, Qt::CheckStateRole).isValid()); + QVERIFY(!model->data(project22Index, Qt::CheckStateRole).isValid()); QVERIFY(!model->data(contextsIndex, Qt::CheckStateRole).isValid()); QVERIFY(!model->data(context1Index, Qt::CheckStateRole).isValid()); QVERIFY(!model->data(context2Index, Qt::CheckStateRole).isValid()); // WHEN - projectRepositoryMock(&Domain::ProjectRepository::update).when(project1).thenReturn(new FakeJob(this)); - projectRepositoryMock(&Domain::ProjectRepository::update).when(project2).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::update).when(project11).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::update).when(project12).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::update).when(project21).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::update).when(project22).thenReturn(new FakeJob(this)); contextRepositoryMock(&Domain::ContextRepository::update).when(context1).thenReturn(new FakeJob(this)); contextRepositoryMock(&Domain::ContextRepository::update).when(context2).thenReturn(new FakeJob(this)); QVERIFY(!model->setData(inboxIndex, "Foo")); QVERIFY(!model->setData(projectsIndex, "Foo")); - QVERIFY(model->setData(project1Index, "New Project 1")); - QVERIFY(model->setData(project2Index, "New Project 2")); + QVERIFY(!model->setData(source1Index, "Foo")); + QVERIFY(model->setData(project11Index, "New Project 11")); + QVERIFY(model->setData(project12Index, "New Project 12")); + QVERIFY(!model->setData(source2Index, "Foo")); + QVERIFY(model->setData(project21Index, "New Project 21")); + QVERIFY(model->setData(project22Index, "New Project 22")); QVERIFY(!model->setData(contextsIndex, "Foo")); QVERIFY(model->setData(context1Index, "New Context 1")); QVERIFY(model->setData(context2Index, "New Context 2")); // THEN - QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::update).when(project1).exactly(1)); - QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::update).when(project2).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::update).when(project11).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::update).when(project12).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::update).when(project21).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::update).when(project22).exactly(1)); QVERIFY(contextRepositoryMock(&Domain::ContextRepository::update).when(context1).exactly(1)); QVERIFY(contextRepositoryMock(&Domain::ContextRepository::update).when(context2).exactly(1)); - QCOMPARE(project1->name(), QStringLiteral("New Project 1")); - QCOMPARE(project2->name(), QStringLiteral("New Project 2")); + QCOMPARE(project11->name(), QStringLiteral("New Project 11")); + QCOMPARE(project12->name(), QStringLiteral("New Project 12")); + QCOMPARE(project21->name(), QStringLiteral("New Project 21")); + QCOMPARE(project22->name(), QStringLiteral("New Project 22")); QCOMPARE(context1->name(), QStringLiteral("New Context 1")); QCOMPARE(context2->name(), QStringLiteral("New Context 2")); // WHEN - projectRepositoryMock(&Domain::ProjectRepository::associate).when(project1, taskToDrop).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::associate).when(project11, taskToDrop).thenReturn(new FakeJob(this)); auto data = std::make_unique<QMimeData>(); data->setData(QStringLiteral("application/x-zanshin-object"), "object"); data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << taskToDrop)); - model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, project1Index); + model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, project11Index); // THEN - QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project1, taskToDrop).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project11, taskToDrop).exactly(1)); // WHEN a task is dropped on a context contextRepositoryMock(&Domain::ContextRepository::associate).when(context1, taskToDrop.objectCast<Domain::Task>()).thenReturn(new FakeJob(this)); @@ -249,28 +310,28 @@ QVERIFY(taskRepositoryMock(&Domain::TaskRepository::dissociateAll).when(taskToDrop.objectCast<Domain::Task>()).exactly(1)); // WHEN - projectRepositoryMock(&Domain::ProjectRepository::associate).when(project2, noteToDrop).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::associate).when(project12, noteToDrop).thenReturn(new FakeJob(this)); data.reset(new QMimeData); data->setData(QStringLiteral("application/x-zanshin-object"), "object"); data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << noteToDrop)); - model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, project2Index); + model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, project12Index); // THEN - QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project2, noteToDrop).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project12, noteToDrop).exactly(1)); // WHEN Domain::Artifact::Ptr taskToDrop2(new Domain::Task); Domain::Artifact::Ptr noteToDrop2(new Domain::Note); - projectRepositoryMock(&Domain::ProjectRepository::associate).when(project1, taskToDrop2).thenReturn(new FakeJob(this)); - projectRepositoryMock(&Domain::ProjectRepository::associate).when(project1, noteToDrop2).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::associate).when(project11, taskToDrop2).thenReturn(new FakeJob(this)); + projectRepositoryMock(&Domain::ProjectRepository::associate).when(project11, noteToDrop2).thenReturn(new FakeJob(this)); data.reset(new QMimeData); data->setData(QStringLiteral("application/x-zanshin-object"), "object"); data->setProperty("objects", QVariant::fromValue(Domain::Artifact::List() << taskToDrop2 << noteToDrop2)); - model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, project1Index); + model->dropMimeData(data.get(), Qt::MoveAction, -1, -1, project11Index); // THEN - QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project1, taskToDrop2).exactly(1)); - QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project1, noteToDrop2).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project11, taskToDrop2).exactly(1)); + QVERIFY(projectRepositoryMock(&Domain::ProjectRepository::associate).when(project11, noteToDrop2).exactly(1)); // WHEN a task and a note are dropped on a context data.reset(new QMimeData); @@ -327,9 +388,9 @@ { // GIVEN - // Empty project provider - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); + // Empty sources provider + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); // Empty context provider auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); @@ -340,13 +401,14 @@ Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - // projects mocking - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // sources mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -367,9 +429,9 @@ { // GIVEN - // Empty project provider - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); + // Empty sources provider + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); // Empty context provider auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); @@ -380,13 +442,14 @@ Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - // projects mocking - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // sources mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -407,11 +470,18 @@ { // GIVEN + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + // Two projects auto project1 = Domain::Project::Ptr::create(); - project1->setName(QStringLiteral("Project 1")); + project1->setName(QStringLiteral("Project 11")); auto project2 = Domain::Project::Ptr::create(); - project2->setName(QStringLiteral("Project 2")); + project2->setName(QStringLiteral("Project 12")); auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); projectProvider->append(project1); @@ -421,17 +491,20 @@ auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); - // projects mocking - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // data source mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); + // projects mocking Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; // contexts mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), Domain::ContextRepository::Ptr(), @@ -443,14 +516,17 @@ // THEN const QModelIndex projectsIndex = model->index(2, 0); - const QModelIndex project1Index = model->index(0, 0, projectsIndex); - const QModelIndex project2Index = model->index(1, 0, projectsIndex); + const QModelIndex sourceIndex = model->index(0, 0, projectsIndex); + const QModelIndex project1Index = model->index(0, 0, sourceIndex); + const QModelIndex project2Index = model->index(1, 0, sourceIndex); QObject *projectsPage = pages.createPageForIndex(projectsIndex); + QObject *sourcesPage = pages.createPageForIndex(sourceIndex); QObject *project1Page = pages.createPageForIndex(project1Index); QObject *project2Page = pages.createPageForIndex(project2Index); QVERIFY(!projectsPage); + QVERIFY(!sourcesPage); QVERIFY(qobject_cast<Presentation::ProjectPageModel*>(project1Page)); QCOMPARE(qobject_cast<Presentation::ProjectPageModel*>(project1Page)->project(), project1); QVERIFY(qobject_cast<Presentation::ProjectPageModel*>(project2Page)); @@ -471,24 +547,26 @@ contextProvider->append(context1); contextProvider->append(context2); - // Empty Project provider - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); + // Empty sources provider + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); // contexts mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - // projects mocking - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // sources mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + // projects mocking Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -525,7 +603,8 @@ any<Domain::DataSource::Ptr>()) .thenReturn(new FakeJob(this)); - Presentation::AvailableTaskPagesModel pages(Domain::ProjectQueries::Ptr(), + Presentation::AvailableTaskPagesModel pages(Domain::DataSourceQueries::Ptr(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), Domain::ContextQueries::Ptr(), Domain::ContextRepository::Ptr(), @@ -555,7 +634,8 @@ any<Domain::DataSource::Ptr>()) .thenReturn(job); - Presentation::AvailableTaskPagesModel pages(Domain::ProjectQueries::Ptr(), + Presentation::AvailableTaskPagesModel pages(Domain::DataSourceQueries::Ptr(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), Domain::ContextQueries::Ptr(), Domain::ContextRepository::Ptr(), @@ -580,7 +660,8 @@ contextRepositoryMock(&Domain::ContextRepository::create).when(any<Domain::Context::Ptr>()) .thenReturn(new FakeJob(this)); - Presentation::AvailableTaskPagesModel pages(Domain::ProjectQueries::Ptr(), + Presentation::AvailableTaskPagesModel pages(Domain::DataSourceQueries::Ptr(), + Domain::ProjectQueries::Ptr(), Domain::ProjectRepository::Ptr(), Domain::ContextQueries::Ptr(), contextRepositoryMock.getInstance(), @@ -605,7 +686,8 @@ contextRepositoryMock(&Domain::ContextRepository::create).when(any<Domain::Context::Ptr>()) .thenReturn(job); - Presentation::AvailableTaskPagesModel pages(Domain::ProjectQueries::Ptr(), + Presentation::AvailableTaskPagesModel pages(Domain::DataSourceQueries::Ptr(), + Domain::ProjectQueries::Ptr(), Domain::ProjectRepository::Ptr(), Domain::ContextQueries::Ptr(), contextRepositoryMock.getInstance(), @@ -626,6 +708,13 @@ { // GIVEN + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + // Two projects auto project1 = Domain::Project::Ptr::create(); project1->setName(QStringLiteral("Project 1")); @@ -640,15 +729,20 @@ auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // data source mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); + + // projects mocking + Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; + // contexts mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); - Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), Domain::ContextRepository::Ptr(), @@ -658,7 +752,8 @@ QAbstractItemModel *model = pages.pageListModel(); const QModelIndex projectsIndex = model->index(2, 0); - const QModelIndex project1Index = model->index(0, 0, projectsIndex); + const QModelIndex sourceIndex = model->index(0, 0, projectsIndex); + const QModelIndex project1Index = model->index(0, 0, sourceIndex); projectRepositoryMock(&Domain::ProjectRepository::remove).when(project1).thenReturn(new FakeJob(this)); @@ -673,6 +768,13 @@ { // GIVEN + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + // Two projects auto project1 = Domain::Project::Ptr::create(); project1->setName(QStringLiteral("Project 1")); @@ -687,15 +789,20 @@ auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // data source mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); + // projects mocking + Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; + + // contexts mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); - Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), Domain::ContextRepository::Ptr(), @@ -707,7 +814,8 @@ QAbstractItemModel *model = pages.pageListModel(); const QModelIndex projectsIndex = model->index(2, 0); - const QModelIndex project1Index = model->index(0, 0, projectsIndex); + const QModelIndex sourceIndex = model->index(0, 0, projectsIndex); + const QModelIndex project1Index = model->index(0, 0, sourceIndex); auto job = new FakeJob(this); job->setExpectedError(KJob::KilledJobError, QStringLiteral("Foo")); @@ -731,22 +839,24 @@ auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); contextProvider->append(context1); - // empty projects - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); + + // Empty sources provider + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); // contexts mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - // projects mocking - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // sources mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), Domain::ProjectRepository::Ptr(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -777,22 +887,24 @@ auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); contextProvider->append(context1); - // empty projects - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); + + // Empty sources provider + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); // contexts mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - // projects mocking - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + // sources mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), Domain::ProjectRepository::Ptr(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -822,7 +934,14 @@ { // GIVEN - // Two projects + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source1"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + + // Two projects under the source auto project1 = Domain::Project::Ptr::create(); project1->setName(QStringLiteral("Project 1")); auto project2 = Domain::Project::Ptr::create(); @@ -842,33 +961,31 @@ contextProvider->append(context1); contextProvider->append(context2); - // Two artifacts (used for dropping later on) - Domain::Artifact::Ptr taskToDrop(new Domain::Task); - Domain::Artifact::Ptr noteToDrop(new Domain::Note); - - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), Domain::TaskQueries::Ptr(), - taskRepositoryMock.getInstance()); + Domain::TaskRepository::Ptr()); FakeErrorHandler errorHandler; pages.setErrorHandler(&errorHandler); QAbstractItemModel *model = pages.pageListModel(); const QModelIndex projectsIndex = model->index(2, 0); - const QModelIndex project1Index = model->index(0, 0, projectsIndex); + const QModelIndex sourceIndex = model->index(0, 0, projectsIndex); + const QModelIndex project1Index = model->index(0, 0, sourceIndex); // WHEN auto job = new FakeJob(this); @@ -886,7 +1003,14 @@ { // GIVEN - // Two projects + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source1"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + + // Two projects under the source auto project1 = Domain::Project::Ptr::create(); project1->setName(QStringLiteral("Project 1")); auto project2 = Domain::Project::Ptr::create(); @@ -906,27 +1030,24 @@ contextProvider->append(context1); contextProvider->append(context2); - // Two artifacts (used for dropping later on) - Domain::Artifact::Ptr taskToDrop(new Domain::Task); - Domain::Artifact::Ptr noteToDrop(new Domain::Note); - - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), Domain::TaskQueries::Ptr(), - taskRepositoryMock.getInstance()); + Domain::TaskRepository::Ptr()); FakeErrorHandler errorHandler; pages.setErrorHandler(&errorHandler); @@ -950,7 +1071,14 @@ { // GIVEN - // Two projects + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source1"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + + // Two projects under the source auto project1 = Domain::Project::Ptr::create(); project1->setName(QStringLiteral("Project 1")); auto project2 = Domain::Project::Ptr::create(); @@ -970,23 +1098,25 @@ contextProvider->append(context1); contextProvider->append(context2); - // Two artifacts (used for dropping later on) + // One task (used for dropping later on) Domain::Artifact::Ptr taskToDrop(new Domain::Task); taskToDrop->setTitle(QStringLiteral("taskDropped")); - Domain::Artifact::Ptr noteToDrop(new Domain::Note); - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; + + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -997,7 +1127,8 @@ pages.setErrorHandler(&errorHandler); QAbstractItemModel *model = pages.pageListModel(); const QModelIndex projectsIndex = model->index(2, 0); - const QModelIndex project1Index = model->index(0, 0, projectsIndex); + const QModelIndex sourceIndex = model->index(0, 0, projectsIndex); + const QModelIndex project1Index = model->index(0, 0, sourceIndex); // WHEN auto job = new FakeJob(this); @@ -1017,7 +1148,14 @@ { // GIVEN - // Two projects + // One selected data source + auto source = Domain::DataSource::Ptr::create(); + source->setName("source1"); + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); + sourceProvider->append(source); + + // Two projects under the source auto project1 = Domain::Project::Ptr::create(); project1->setName(QStringLiteral("Project 1")); auto project2 = Domain::Project::Ptr::create(); @@ -1037,22 +1175,25 @@ contextProvider->append(context1); contextProvider->append(context2); - // Two artifacts (used for dropping later on) + // One task (used for dropping later on) Domain::Artifact::Ptr taskToDrop(new Domain::Task); taskToDrop->setTitle(QStringLiteral("taskDropped")); - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + dataSourceQueriesMock(&Domain::DataSourceQueries::findProjects).when(source).thenReturn(projectResult); Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; + + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(), @@ -1083,30 +1224,33 @@ { // GIVEN - // No project - auto projectProvider = Domain::QueryResultProvider<Domain::Project::Ptr>::Ptr::create(); - auto projectResult = Domain::QueryResult<Domain::Project::Ptr>::create(projectProvider); + // Empty source provider + auto sourceProvider = Domain::QueryResultProvider<Domain::DataSource::Ptr>::Ptr::create(); + auto sourceResult = Domain::QueryResult<Domain::DataSource::Ptr>::create(sourceProvider); - // No context + // Empty context provider auto contextProvider = Domain::QueryResultProvider<Domain::Context::Ptr>::Ptr::create(); auto contextResult = Domain::QueryResult<Domain::Context::Ptr>::create(contextProvider); - // Two artifacts (used for dropping later on) + // One task (used for dropping later on) Domain::Artifact::Ptr taskToDrop(new Domain::Task); taskToDrop->setTitle(QStringLiteral("taskDropped")); - Utils::MockObject<Domain::ProjectQueries> projectQueriesMock; - projectQueriesMock(&Domain::ProjectQueries::findAll).when().thenReturn(projectResult); - - Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; - Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; - + // context mocking Utils::MockObject<Domain::ContextQueries> contextQueriesMock; contextQueriesMock(&Domain::ContextQueries::findAll).when().thenReturn(contextResult); Utils::MockObject<Domain::ContextRepository> contextRepositoryMock; - Presentation::AvailableTaskPagesModel pages(projectQueriesMock.getInstance(), + // sources mocking + Utils::MockObject<Domain::DataSourceQueries> dataSourceQueriesMock; + dataSourceQueriesMock(&Domain::DataSourceQueries::findAllSelected).when().thenReturn(sourceResult); + + Utils::MockObject<Domain::ProjectRepository> projectRepositoryMock; + Utils::MockObject<Domain::TaskRepository> taskRepositoryMock; + + Presentation::AvailableTaskPagesModel pages(dataSourceQueriesMock.getInstance(), + Domain::ProjectQueries::Ptr(), projectRepositoryMock.getInstance(), contextQueriesMock.getInstance(), contextRepositoryMock.getInstance(),