Removed dependency to TriggerManager

introduces Messanger class which allows to send messages directly to
subscribed targets, which allows to break dependencies between classes.

Testes:
- All unit tests are passing
- Links are correctly updated
- Report is correctly updated by Trigger Action

Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
Change-Id: I32d3aaba22f9ec07e611f53fe553bd27e1c04c6d
diff --git a/tests/meson.build b/tests/meson.build
index 27cdb42..89c6a00 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -1,5 +1,5 @@
-gtest_dep = dependency('gtest', main: false, required: false, version: '>=1.10.0')
-gmock_dep = dependency('gmock', required: false, version: '>=1.10.0')
+gtest_dep = dependency('gtest', main: false, required: false, version: '>=1.11.0')
+gmock_dep = dependency('gmock', required: false, version: '>=1.11.0')
 if not gtest_dep.found() or not gmock_dep.found()
     gtest_proj = import('cmake').subproject('googletest')
     gtest_dep = gtest_proj.dependency('gtest')
@@ -29,6 +29,7 @@
             '../src/types/report_types.cpp',
             '../src/utils/conversion_trigger.cpp',
             '../src/utils/generate_id.cpp',
+            '../src/utils/messanger_service.cpp',
             'src/dbus_environment.cpp',
             'src/main.cpp',
             'src/stubs/dbus_sensor_object.cpp',
diff --git a/tests/src/mocks/report_factory_mock.hpp b/tests/src/mocks/report_factory_mock.hpp
index cf9047f..6a7d8bd 100644
--- a/tests/src/mocks/report_factory_mock.hpp
+++ b/tests/src/mocks/report_factory_mock.hpp
@@ -37,7 +37,7 @@
                 WithArgs<1>(Invoke(&ReportFactoryMock::convertToLabeled)));
 
         ON_CALL(*this,
-                make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _, _))
+                make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _))
             .WillByDefault(WithArgs<0>(Invoke([](const std::string& id) {
                 return std::make_unique<NiceMock<ReportMock>>(id);
             })));
@@ -52,7 +52,7 @@
                  const std::vector<ReportAction>&, Milliseconds, uint64_t,
                  const ReportUpdates, interfaces::ReportManager&,
                  interfaces::JsonStorage&, std::vector<LabeledMetricParameters>,
-                 bool, const std::vector<std::string>&),
+                 bool),
                 (const, override));
 
     auto& expectMake(
@@ -69,12 +69,11 @@
                             params.reportingType(), params.reportActions(),
                             params.interval(), params.appendLimit(),
                             params.reportUpdates(), rm, js,
-                            params.metricParameters(), params.enabled(), _));
+                            params.metricParameters(), params.enabled()));
         }
         else
         {
-            return EXPECT_CALL(*this,
-                               make(_, _, _, _, _, _, _, rm, js, _, _, _));
+            return EXPECT_CALL(*this, make(_, _, _, _, _, _, _, rm, js, _, _));
         }
     }
 };
diff --git a/tests/src/mocks/report_manager_mock.hpp b/tests/src/mocks/report_manager_mock.hpp
index 25f40a0..872a6e6 100644
--- a/tests/src/mocks/report_manager_mock.hpp
+++ b/tests/src/mocks/report_manager_mock.hpp
@@ -8,9 +8,4 @@
 {
   public:
     MOCK_METHOD(void, removeReport, (const interfaces::Report*), (override));
-    MOCK_METHOD(void, updateReport, (const std::string& name), (override));
-    MOCK_METHOD(void, updateTriggerIds,
-                (const std::string& reportId, const std::string& triggerId,
-                 TriggerIdUpdate updateType),
-                (override));
 };
diff --git a/tests/src/mocks/report_mock.hpp b/tests/src/mocks/report_mock.hpp
index 6ececfc..c7c900f 100644
--- a/tests/src/mocks/report_mock.hpp
+++ b/tests/src/mocks/report_mock.hpp
@@ -23,10 +23,6 @@
 
     MOCK_METHOD(std::string, getId, (), (override, const));
     MOCK_METHOD(std::string, getPath, (), (override, const));
-    MOCK_METHOD(void, updateReadings, (), (override));
-    MOCK_METHOD(void, updateTriggerIds,
-                (const std::string& triggerId, TriggerIdUpdate updateType),
-                (override));
 
     MOCK_METHOD(void, Die, ());
 };
diff --git a/tests/src/mocks/trigger_manager_mock.hpp b/tests/src/mocks/trigger_manager_mock.hpp
index f9f898d..9377d2a 100644
--- a/tests/src/mocks/trigger_manager_mock.hpp
+++ b/tests/src/mocks/trigger_manager_mock.hpp
@@ -9,6 +9,4 @@
   public:
     MOCK_METHOD(void, removeTrigger, (const interfaces::Trigger* trigger),
                 (override));
-    MOCK_METHOD(std::vector<std::string>, getTriggerIdsForReport,
-                (const std::string& reportId), (const, override));
 };
diff --git a/tests/src/mocks/trigger_mock.hpp b/tests/src/mocks/trigger_mock.hpp
index bb38257..cd0e5f4 100644
--- a/tests/src/mocks/trigger_mock.hpp
+++ b/tests/src/mocks/trigger_mock.hpp
@@ -23,7 +23,5 @@
 
     MOCK_METHOD(std::string, getId, (), (const, override));
     MOCK_METHOD(std::string, getPath, (), (const, override));
-    MOCK_METHOD(const std::vector<std::string>&, getReportIds, (),
-                (const, override));
     MOCK_METHOD(void, Die, ());
 };
diff --git a/tests/src/params/report_params.hpp b/tests/src/params/report_params.hpp
index f6e547e..19ea519 100644
--- a/tests/src/params/report_params.hpp
+++ b/tests/src/params/report_params.hpp
@@ -108,17 +108,6 @@
         return metricParametersProperty;
     }
 
-    ReportParams& triggerIds(std::vector<std::string> val)
-    {
-        triggerIdsProperty = std::move(val);
-        return *this;
-    }
-
-    std::vector<std::string> triggerIds() const
-    {
-        return triggerIdsProperty;
-    }
-
   private:
     std::string reportIdProperty = "TestId";
     std::string reportNameProperty = "TestReport";
@@ -144,6 +133,5 @@
              "MetricId2",
              CollectionTimeScope::point,
              CollectionDuration(Milliseconds(0u))}}};
-    std::vector<std::string> triggerIdsProperty{};
     bool enabledProperty = true;
 };
diff --git a/tests/src/test_report.cpp b/tests/src/test_report.cpp
index 3e6b049..4e3ce8d 100644
--- a/tests/src/test_report.cpp
+++ b/tests/src/test_report.cpp
@@ -1,6 +1,9 @@
 #include "dbus_environment.hpp"
 #include "fakes/clock_fake.hpp"
 #include "helpers.hpp"
+#include "messages/collect_trigger_id.hpp"
+#include "messages/trigger_presence_changed_ind.hpp"
+#include "messages/update_report_ind.hpp"
 #include "mocks/json_storage_mock.hpp"
 #include "mocks/metric_mock.hpp"
 #include "mocks/report_manager_mock.hpp"
@@ -10,6 +13,7 @@
 #include "utils/clock.hpp"
 #include "utils/contains.hpp"
 #include "utils/conv_container.hpp"
+#include "utils/messanger.hpp"
 #include "utils/transform.hpp"
 #include "utils/tstring.hpp"
 
@@ -34,10 +38,11 @@
     std::unique_ptr<ClockFake> clockFakePtr = std::make_unique<ClockFake>();
     ClockFake& clockFake = *clockFakePtr;
     std::unique_ptr<Report> sut;
+    utils::Messanger messanger;
 
     MockFunction<void()> checkPoint;
 
-    TestReport()
+    TestReport() : messanger(DbusEnvironment::getIoc())
     {
         clockFake.system.set(systemTimestamp);
     }
@@ -86,7 +91,7 @@
             params.reportUpdates(), *reportManagerMock, storageMock,
             utils::convContainer<std::shared_ptr<interfaces::Metric>>(
                 metricMocks),
-            params.enabled(), std::move(clockFakePtr), params.triggerIds());
+            params.enabled(), std::move(clockFakePtr));
     }
 
     template <class T>
@@ -256,57 +261,70 @@
     EXPECT_THAT(ec, Eq(boost::system::errc::success));
 }
 
-TEST_F(TestReport, triggerIdsAreUpdatedProperly)
+TEST_F(TestReport, updatesTriggerIdWhenTriggerIsAdded)
 {
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Add);
-    EXPECT_THAT(
-        getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger1"));
+    utils::Messanger messanger(DbusEnvironment::getIoc());
 
-    sut->updateTriggerIds("trigger2", TriggerIdUpdate::Add);
-    EXPECT_THAT(
-        getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger1", "trigger2"));
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger1", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger1", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger2", {"someOtherReport"}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist,
+        "trigger3",
+        {"someOtherReport", defaultParams.reportId()}});
 
-    sut->updateTriggerIds("trigger3", TriggerIdUpdate::Add);
     EXPECT_THAT(
         getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger1", "trigger2", "trigger3"));
-
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Remove);
-    EXPECT_THAT(
-        getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger2", "trigger3"));
+        UnorderedElementsAre("trigger1", "trigger3"));
 }
 
-TEST_F(TestReport, successWhenRemovingSameTriggerIdMultipleTimes)
+TEST_F(TestReport, updatesTriggerIdWhenTriggerIsRemoved)
 {
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Add);
-    sut->updateTriggerIds("trigger2", TriggerIdUpdate::Add);
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Remove);
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Remove);
+    utils::Messanger messanger(DbusEnvironment::getIoc());
+
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger1", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger2", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger3", {defaultParams.reportId()}});
+
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Removed, "trigger1", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Removed, "trigger2", {}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Removed, "trigger1", {defaultParams.reportId()}});
+
     EXPECT_THAT(
         getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger2"));
+        UnorderedElementsAre("trigger3"));
 }
 
-TEST_F(TestReport, successWhenRemovingNonExistingTriggerId)
+TEST_F(TestReport, updatesTriggerIdWhenTriggerIsModified)
 {
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Add);
-    sut->updateTriggerIds("notTrigger", TriggerIdUpdate::Remove);
-    EXPECT_THAT(
-        getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger1"));
-}
+    utils::Messanger messanger(DbusEnvironment::getIoc());
 
-TEST_F(TestReport, noDuplicatesWhenSameTriggerIdIsAdded)
-{
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Add);
-    sut->updateTriggerIds("trigger2", TriggerIdUpdate::Add);
-    sut->updateTriggerIds("trigger1", TriggerIdUpdate::Add);
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger1", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger2", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger3", {defaultParams.reportId()}});
+
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger1", {defaultParams.reportId()}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger2", {}});
+    messanger.send(messages::TriggerPresenceChangedInd{
+        messages::Presence::Exist, "trigger3", {defaultParams.reportId()}});
+
     EXPECT_THAT(
         getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
-        UnorderedElementsAre("trigger1", "trigger2"));
+        UnorderedElementsAre("trigger1", "trigger3"));
 }
 
 class TestReportStore :
@@ -462,29 +480,38 @@
                 Eq(GetParam().reportingType()));
 }
 
-TEST_P(TestReportAllReportTypes, updateReadingsCallEnabledPropertyOff)
+TEST_P(TestReportAllReportTypes, readingsAreUpdated)
+{
+    clockFake.system.advance(10ms);
+
+    messanger.send(messages::UpdateReportInd{{sut->getId()}});
+    const auto [timestamp, readings] =
+        getProperty<Readings>(sut->getPath(), "Readings");
+
+    EXPECT_THAT(Milliseconds{timestamp}, Eq(systemTimestamp + 10ms));
+}
+
+TEST_P(TestReportAllReportTypes, readingsAreNotUpdatedWhenReportIsDisabled)
 {
     clockFake.system.advance(10ms);
 
     setProperty(sut->getPath(), "Enabled", false);
-    sut->updateReadings();
+    messanger.send(messages::UpdateReportInd{{sut->getId()}});
     const auto [timestamp, readings] =
         getProperty<Readings>(sut->getPath(), "Readings");
 
-    EXPECT_THAT(getProperty<bool>(sut->getPath(), "Enabled"), Eq(false));
     EXPECT_THAT(Milliseconds{timestamp}, Eq(0ms));
 }
 
-TEST_P(TestReportAllReportTypes, updateReadingsCallEnabledPropertyOn)
+TEST_P(TestReportAllReportTypes, readingsAreNotUpdatedWhenReportIdDiffers)
 {
     clockFake.system.advance(10ms);
 
-    sut->updateReadings();
+    messanger.send(messages::UpdateReportInd{{sut->getId() + "x"s}});
     const auto [timestamp, readings] =
         getProperty<Readings>(sut->getPath(), "Readings");
 
-    EXPECT_THAT(getProperty<bool>(sut->getPath(), "Enabled"), Eq(true));
-    EXPECT_THAT(Milliseconds{timestamp}, Eq(systemTimestamp + 10ms));
+    EXPECT_THAT(Milliseconds{timestamp}, Eq(0ms));
 }
 
 class TestReportOnRequestType : public TestReport
@@ -714,7 +741,7 @@
 {
     for (int i = 0; i < 4; i++)
     {
-        sut->updateReadings();
+        messanger.send(messages::UpdateReportInd{{sut->getId()}});
     }
 
     const auto [timestamp, readings] =
@@ -841,7 +868,15 @@
 
 TEST_F(TestReportInitialization, triggerIdsPropertyIsInitialzed)
 {
-    sut = makeReport(ReportParams().triggerIds({"trigger1", "trigger2"}));
+    for (const auto& triggerId : {"trigger1", "trigger2"})
+    {
+        messanger.on_receive<messages::CollectTriggerIdReq>(
+            [&](const auto& msg) {
+                messanger.send(messages::CollectTriggerIdResp{triggerId});
+            });
+    }
+
+    sut = makeReport(ReportParams());
 
     EXPECT_THAT(
         getProperty<std::vector<std::string>>(sut->getPath(), "TriggerIds"),
diff --git a/tests/src/test_report_manager.cpp b/tests/src/test_report_manager.cpp
index bf76efc..fca6451 100644
--- a/tests/src/test_report_manager.cpp
+++ b/tests/src/test_report_manager.cpp
@@ -31,9 +31,6 @@
         std::make_unique<NiceMock<ReportMock>>(reportParams.reportId());
     ReportMock& reportMock = *reportMockPtr;
 
-    std::unique_ptr<interfaces::TriggerManager> triggerManagerMockPtr =
-        std::make_unique<NiceMock<TriggerManagerMock>>();
-
     std::unique_ptr<ReportManager> sut;
 
     MockFunction<void(std::string)> checkPoint;
@@ -43,9 +40,9 @@
         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _))
             .Times(AnyNumber());
 
-        sut = std::make_unique<ReportManager>(
-            std::move(reportFactoryMockPtr), std::move(storageMockPtr),
-            DbusEnvironment::getObjServer(), triggerManagerMockPtr);
+        sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
+                                              std::move(storageMockPtr),
+                                              DbusEnvironment::getObjServer());
     }
 
     void TearDown() override
@@ -363,52 +360,6 @@
     checkPoint.Call("end");
 }
 
-TEST_F(TestReportManager, updateReportCallsUpdateReadingsForExistReport)
-{
-    reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
-        .WillOnce(Return(ByMove(std::move(reportMockPtr))));
-    EXPECT_CALL(reportMock, updateReadings());
-
-    addReport(reportParams);
-    sut->updateReport(reportParams.reportId());
-}
-
-TEST_F(TestReportManager, updateReportDoNothingIfReportDoesNotExist)
-{
-    reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
-        .WillOnce(Return(ByMove(std::move(reportMockPtr))));
-    EXPECT_CALL(reportMock, updateReadings()).Times(0);
-
-    addReport(reportParams);
-    sut->updateReport("NotAReport");
-}
-
-TEST_F(TestReportManager, updateTriggerIdsUpdatesThemForExistReport)
-{
-    reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
-        .WillOnce(Return(ByMove(std::move(reportMockPtr))));
-    EXPECT_CALL(reportMock, updateTriggerIds("Trigger1", TriggerIdUpdate::Add));
-    EXPECT_CALL(reportMock,
-                updateTriggerIds("Trigger2", TriggerIdUpdate::Remove));
-
-    addReport(reportParams);
-    sut->updateTriggerIds(reportParams.reportId(), "Trigger1",
-                          TriggerIdUpdate::Add);
-
-    sut->updateTriggerIds(reportParams.reportId(), "Trigger2",
-                          TriggerIdUpdate::Remove);
-}
-
-TEST_F(TestReportManager, updateTriggerIdsDoNothingIfReportDoesNotExist)
-{
-    reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
-        .WillOnce(Return(ByMove(std::move(reportMockPtr))));
-    EXPECT_CALL(reportMock, updateTriggerIds(_, _)).Times(0);
-
-    addReport(reportParams);
-    sut->updateTriggerIds("NotAReport", "Trigger1", TriggerIdUpdate::Add);
-}
-
 class TestReportManagerWithAggregationOperationType :
     public TestReportManager,
     public WithParamInterface<OperationType>
@@ -462,9 +413,9 @@
 
     void makeReportManager()
     {
-        sut = std::make_unique<ReportManager>(
-            std::move(reportFactoryMockPtr), std::move(storageMockPtr),
-            DbusEnvironment::getObjServer(), triggerManagerMockPtr);
+        sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
+                                              std::move(storageMockPtr),
+                                              DbusEnvironment::getObjServer());
     }
 
     nlohmann::json data = nlohmann::json{
diff --git a/tests/src/test_trigger.cpp b/tests/src/test_trigger.cpp
index 5ad2a81..cfb08e9 100644
--- a/tests/src/test_trigger.cpp
+++ b/tests/src/test_trigger.cpp
@@ -1,5 +1,7 @@
 #include "dbus_environment.hpp"
 #include "helpers.hpp"
+#include "messages/collect_trigger_id.hpp"
+#include "messages/trigger_presence_changed_ind.hpp"
 #include "mocks/json_storage_mock.hpp"
 #include "mocks/report_manager_mock.hpp"
 #include "mocks/sensor_mock.hpp"
@@ -10,6 +12,7 @@
 #include "trigger.hpp"
 #include "trigger_manager.hpp"
 #include "utils/conversion_trigger.hpp"
+#include "utils/messanger.hpp"
 #include "utils/transform.hpp"
 #include "utils/tstring.hpp"
 
@@ -44,9 +47,18 @@
     std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr =
         std::make_unique<NiceMock<TriggerFactoryMock>>();
     testing::NiceMock<StorageMock> storageMock;
+    NiceMock<MockFunction<void(const messages::TriggerPresenceChangedInd)>>
+        triggerPresenceChanged;
     std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks;
+    utils::Messanger messanger;
     std::unique_ptr<Trigger> sut;
 
+    TestTrigger() : messanger(DbusEnvironment::getIoc())
+    {
+        messanger.on_receive<messages::TriggerPresenceChangedInd>(
+            [this](const auto& msg) { triggerPresenceChanged.Call(msg); });
+    }
+
     void SetUp() override
     {
         sut = makeTrigger(triggerParams);
@@ -73,8 +85,7 @@
                 params.reportIds().begin(), params.reportIds().end()),
             std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks),
             *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr,
-            SensorMock::makeSensorMocks(params.sensors()),
-            *reportManagerMockPtr);
+            SensorMock::makeSensorMocks(params.sensors()));
     }
 
     static interfaces::JsonStorage::FilePath to_file_path(std::string name)
@@ -140,7 +151,6 @@
 {
     EXPECT_THAT(sut->getId(), Eq(triggerParams.id()));
     EXPECT_THAT(sut->getPath(), Eq(Trigger::triggerDir + triggerParams.id()));
-    EXPECT_THAT(sut->getReportIds(), Eq(triggerParams.reportIds()));
 }
 
 TEST_F(TestTrigger, setPropertyNameToCorrectValue)
@@ -159,56 +169,28 @@
     EXPECT_THAT(
         getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
         Eq(newNames));
-    EXPECT_THAT(
-        getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
-        Eq(sut->getReportIds()));
 }
 
-TEST_F(TestTrigger, settingPropertyReportNamesUptadesTriggerIdsInReports)
+TEST_F(TestTrigger, sendsUpdateWhenReportNamesChanges)
 {
-    std::vector<std::string> newPropertyVal = {"abc", "one", "two"};
+    const std::vector<std::string> newPropertyVal = {"abc", "one", "two"};
 
-    for (const auto& reportId : newPropertyVal)
-    {
-        EXPECT_CALL(
-            *reportManagerMockPtr,
-            updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Add));
-    }
-    for (const auto& reportId : triggerParams.reportIds())
-    {
-        EXPECT_CALL(
-            *reportManagerMockPtr,
-            updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove));
-    }
+    EXPECT_CALL(triggerPresenceChanged,
+                Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
+                               UnorderedElementsAreArray(newPropertyVal))));
 
     EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
                 Eq(boost::system::errc::success));
 }
 
-TEST_F(TestTrigger, settingPropertyReportNamesWillNotRemoveTriggerIdsInReports)
+TEST_F(TestTrigger, sendsUpdateWhenReportNamesChangesToSameValue)
 {
-    std::vector<std::string> newPropertyVal = triggerParams.reportIds();
-    std::vector<std::string> newNames{"abc", "one", "two"};
-    newPropertyVal.insert(newPropertyVal.end(), newNames.begin(),
-                          newNames.end());
+    const std::vector<std::string> newPropertyVal = triggerParams.reportIds();
 
-    for (const auto& reportId : newNames)
-    {
-        EXPECT_CALL(
-            *reportManagerMockPtr,
-            updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Add));
-    }
-
-    EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
-                Eq(boost::system::errc::success));
-}
-
-TEST_F(TestTrigger,
-       settingPropertyReportNamesToSameValueWillNotUpdateTriggerIdsInReports)
-{
-    std::vector<std::string> newPropertyVal = triggerParams.reportIds();
-
-    EXPECT_CALL(*reportManagerMockPtr, updateTriggerIds(_, _, _)).Times(0);
+    EXPECT_CALL(
+        triggerPresenceChanged,
+        Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
+                       UnorderedElementsAreArray(triggerParams.reportIds()))));
 
     EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
                 Eq(boost::system::errc::success));
@@ -217,9 +199,9 @@
 TEST_F(TestTrigger,
        DISABLED_settingPropertyReportNamesThrowsExceptionWhenDuplicateReportIds)
 {
-    std::vector<std::string> newPropertyVal{"trigger1", "trigger2", "trigger1"};
+    std::vector<std::string> newPropertyVal{"report1", "report2", "report1"};
 
-    EXPECT_CALL(*reportManagerMockPtr, updateTriggerIds(_, _, _)).Times(0);
+    EXPECT_CALL(triggerPresenceChanged, Call(_)).Times(0);
 
     EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
                 Eq(boost::system::errc::invalid_argument));
@@ -306,12 +288,17 @@
 {
     EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
     EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
-    for (const auto& reportId : triggerParams.reportIds())
-    {
-        EXPECT_CALL(
-            *reportManagerMockPtr,
-            updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove));
-    }
+
+    auto ec = deleteTrigger(sut->getPath());
+    EXPECT_THAT(ec, Eq(boost::system::errc::success));
+}
+
+TEST_F(TestTrigger, sendUpdateWhenTriggerIsDeleted)
+{
+    EXPECT_CALL(triggerPresenceChanged,
+                Call(FieldsAre(messages::Presence::Removed, triggerParams.id(),
+                               UnorderedElementsAre())));
+
     auto ec = deleteTrigger(sut->getPath());
     EXPECT_THAT(ec, Eq(boost::system::errc::success));
 }
@@ -363,12 +350,10 @@
 
 TEST_F(TestTriggerInitialization, creatingTriggerUpdatesTriggersIdsInReports)
 {
-    for (const auto& reportId : triggerParams.reportIds())
-    {
-        EXPECT_CALL(*reportManagerMockPtr,
-                    updateTriggerIds(reportId, triggerParams.id(),
-                                     TriggerIdUpdate::Add));
-    }
+    EXPECT_CALL(
+        triggerPresenceChanged,
+        Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
+                       UnorderedElementsAreArray(triggerParams.reportIds()))));
 
     sut = makeTrigger(triggerParams);
 }
diff --git a/tests/src/test_trigger_actions.cpp b/tests/src/test_trigger_actions.cpp
index b902e5a..d3e36b8 100644
--- a/tests/src/test_trigger_actions.cpp
+++ b/tests/src/test_trigger_actions.cpp
@@ -1,8 +1,12 @@
-#include "mocks/report_manager_mock.hpp"
+#include "dbus_environment.hpp"
+#include "messages/update_report_ind.hpp"
 #include "trigger_actions.hpp"
+#include "utils/messanger.hpp"
 
 #include <stdexcept>
 
+#include <gmock/gmock.h>
+
 using namespace testing;
 
 namespace action
@@ -218,20 +222,27 @@
 class TestUpdateReport : public Test
 {
   public:
+    TestUpdateReport() : messanger(DbusEnvironment::getIoc())
+    {}
+
     void make(std::vector<std::string> names)
     {
+        messanger.on_receive<messages::UpdateReportInd>(
+            [this](const auto& msg) { updateReport.Call(msg); });
+
         sut = std::make_unique<UpdateReport>(
-            reportManager,
+            DbusEnvironment::getIoc(),
             std::make_shared<std::vector<std::string>>(std::move(names)));
     }
 
-    NiceMock<ReportManagerMock> reportManager;
+    utils::Messanger messanger;
+    NiceMock<MockFunction<void(const messages::UpdateReportInd&)>> updateReport;
     std::unique_ptr<UpdateReport> sut;
 };
 
 TEST_F(TestUpdateReport, commitWhenReportNameIsEmptyExpectNoReportUpdate)
 {
-    EXPECT_CALL(reportManager, updateReport(_)).Times(0);
+    EXPECT_CALL(updateReport, Call(_)).Times(0);
 
     make({});
     sut->commit("Test", Milliseconds{100'000}, 90.0);
@@ -240,10 +251,8 @@
 TEST_F(TestUpdateReport, commitExpectReportUpdate)
 {
     std::vector<std::string> names = {"Report1", "Report2", "Report3"};
-    for (const auto& name : names)
-    {
-        EXPECT_CALL(reportManager, updateReport(name));
-    }
+    EXPECT_CALL(updateReport,
+                Call(FieldsAre(UnorderedElementsAreArray(names))));
 
     make(names);
     sut->commit("Test", Milliseconds{100'000}, 90.0);