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{
