diff --git a/src/presentation/runningtaskmodel.h b/src/presentation/runningtaskmodel.h --- a/src/presentation/runningtaskmodel.h +++ b/src/presentation/runningtaskmodel.h @@ -52,6 +52,8 @@ void doneTask() Q_DECL_OVERRIDE; private: + void taskTitleChanged(const QString &title); + Domain::Task::Ptr m_runningTask; Domain::QueryResult::Ptr m_taskList; diff --git a/src/presentation/runningtaskmodel.cpp b/src/presentation/runningtaskmodel.cpp --- a/src/presentation/runningtaskmodel.cpp +++ b/src/presentation/runningtaskmodel.cpp @@ -62,12 +62,16 @@ m_runningTask->setRunning(false); KJob *job = m_taskRepository->update(m_runningTask); installHandler(job, i18n("Cannot update task %1 to 'not running'", m_runningTask->title())); + disconnect(runningTask.data(), &Domain::Task::titleChanged, + this, &RunningTaskModel::taskTitleChanged); } m_runningTask = runningTask; if (m_runningTask) { m_runningTask->setRunning(true); KJob *job = m_taskRepository->update(m_runningTask); installHandler(job, i18n("Cannot update task %1 to 'running'", m_runningTask->title())); + connect(runningTask.data(), &Domain::Task::titleChanged, + this, &RunningTaskModel::taskTitleChanged); } emit runningTaskChanged(m_runningTask); } @@ -78,6 +82,12 @@ setRunningTask({}); } +void RunningTaskModel::taskTitleChanged(const QString &title) +{ + Q_UNUSED(title) + emit runningTaskChanged(m_runningTask); +} + void RunningTaskModel::stopTask() { setRunningTask(Domain::Task::Ptr()); diff --git a/tests/units/presentation/runningtaskmodeltest.cpp b/tests/units/presentation/runningtaskmodeltest.cpp --- a/tests/units/presentation/runningtaskmodeltest.cpp +++ b/tests/units/presentation/runningtaskmodeltest.cpp @@ -201,6 +201,51 @@ QCOMPARE(spy.count(), 0); } + void shouldUpdateOnTaskRenaming() + { + // GIVEN + TestDependencies deps; + Presentation::RunningTaskModel model(deps.m_taskQueriesMockInstance, deps.m_taskRepositoryMockInstance); + Domain::Task::Ptr task = Domain::Task::Ptr::create(); + task->setTitle(QStringLiteral("Old title")); + model.setRunningTask(task); + //Domain::Task::Ptr task2 = Domain::Task::Ptr::create(); + //model.setRunningTask(task2); + QSignalSpy spy(&model, &Presentation::RunningTaskModel::runningTaskChanged); + + // WHEN + task->setTitle(QStringLiteral("New title")); + + // THEN + QCOMPARE(model.runningTask(), task); + QVERIFY(task->isRunning()); + QCOMPARE(spy.count(), 1); + QCOMPARE(spy.at(0).at(0).value(), task); + } + + void shouldIgnoreRenamingAnotherTask() + { + // GIVEN + TestDependencies deps; + Presentation::RunningTaskModel model(deps.m_taskQueriesMockInstance, deps.m_taskRepositoryMockInstance); + Domain::Task::Ptr task = Domain::Task::Ptr::create(); + task->setTitle(QStringLiteral("Task 1 title")); + model.setRunningTask(task); + Domain::Task::Ptr task2 = Domain::Task::Ptr::create(); + task2->setTitle(QStringLiteral("Task 2 title")); + QSignalSpy spy(&model, &Presentation::RunningTaskModel::runningTaskChanged); + + // WHEN + task2->setTitle(QStringLiteral("New task 2 title")); + + // THEN + QCOMPARE(model.runningTask(), task); + QVERIFY(task->isRunning()); + QCOMPARE(spy.count(), 0); + } + + + private: }; diff --git a/tests/units/widgets/runningtaskwidgettest.cpp b/tests/units/widgets/runningtaskwidgettest.cpp --- a/tests/units/widgets/runningtaskwidgettest.cpp +++ b/tests/units/widgets/runningtaskwidgettest.cpp @@ -58,6 +58,11 @@ setRunningTask(Domain::Task::Ptr()); } + void currentTaskRenamed() + { + emit runningTaskChanged(m_runningTask); + } + private: Domain::Task::Ptr m_runningTask; }; @@ -110,6 +115,26 @@ QVERIFY(!widget.isHidden()); } + void shouldUpdateWhenRenamingATask() + { + // GIVEN + Widgets::RunningTaskWidget widget; + auto task = Domain::Task::Ptr::create(); + task->setTitle(QStringLiteral("task1")); + RunningTaskModelStub model; + widget.setModel(&model); + model.setRunningTask(task); + QCOMPARE(widget.currentText(), QStringLiteral("task1")); + + // WHEN + task->setTitle(QStringLiteral("renamed task1")); + model.currentTaskRenamed(); + + // THEN + QCOMPARE(widget.currentText(), QStringLiteral("renamed task1")); + QVERIFY(!widget.isHidden()); + } + void shouldStopAndHideOnClickingStop() { // GIVEN