added Enabled to AddReportFutureVersion API

- New parameter added to API
- Changed API to be more flexible in the future

Tested:
- Unit tests are passing
- Tested together with:
  https://gerrit.openbmc.org/c/openbmc/bmcweb/+/49796/23
  POST, PATCH, PUT for MetricReportDefinitions are working correctly

Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
Change-Id: Ic988446d283a581dc6866418b1b27a989c3bc9a0
diff --git a/tests/src/test_report.cpp b/tests/src/test_report.cpp
index 8be6397..579c714 100644
--- a/tests/src/test_report.cpp
+++ b/tests/src/test_report.cpp
@@ -22,6 +22,8 @@
 
 #include <sdbusplus/exception.hpp>
 
+#include <ranges>
+
 using namespace testing;
 using namespace std::literals::string_literals;
 using namespace std::chrono_literals;
@@ -969,11 +971,30 @@
     public TestReport,
     public WithParamInterface<ReportUpdatesReportParams>
 {
+  public:
     void SetUp() override
+    {}
+
+    void changeReport(ReportingType rt, Milliseconds interval)
     {
-        sut = makeReport(ReportParams(GetParam().reportParams)
-                             .reportingType(ReportingType::periodic)
-                             .interval(std::chrono::hours(1000)));
+        setProperty<std::string>(sut->getPath(), "ReportingType",
+                                 utils::enumToString(rt));
+        setProperty<uint64_t>(sut->getPath(), "Interval", interval.count());
+    }
+
+    auto readings()
+    {
+        auto [timestamp, readings] =
+            getProperty<Readings>(sut->getPath(), "Readings");
+        return readings;
+    }
+
+    void updateReportFourTimes()
+    {
+        for (int i = 0; i < 4; i++)
+        {
+            messanger.send(messages::UpdateReportInd{{sut->getId()}});
+        }
     }
 };
 
@@ -1067,22 +1088,57 @@
             std::vector<ReadingData>{
                 {std::make_tuple("a"s, "b"s, 17.1, 114u),
                  std::make_tuple("aa"s, "bb"s, 42.0, 74u)}},
-            true}));
+            true},
+        ReportUpdatesReportParams{
+            defaultParams()
+                .reportUpdates(ReportUpdates::appendStopsWhenFull)
+                .appendLimit(std::numeric_limits<uint64_t>::max()),
+            std::vector<ReadingData>{
+                {std::make_tuple("a"s, "b"s, 17.1, 114u),
+                 std::make_tuple("aa"s, "bb"s, 42.0, 74u)}},
+            false}));
 
 TEST_P(TestReportWithReportUpdatesAndLimit,
        readingsAreUpdatedAfterIntervalExpires)
 {
-    for (int i = 0; i < 4; i++)
-    {
-        messanger.send(messages::UpdateReportInd{{sut->getId()}});
-    }
+    sut = makeReport(ReportParams(GetParam().reportParams)
+                         .reportingType(ReportingType::periodic)
+                         .interval(std::chrono::hours(1000)));
 
-    const auto [timestamp, readings] =
-        getProperty<Readings>(sut->getPath(), "Readings");
-    const auto enabled = getProperty<bool>(sut->getPath(), "Enabled");
+    updateReportFourTimes();
 
-    EXPECT_THAT(readings, ElementsAreArray(GetParam().expectedReadings));
-    EXPECT_EQ(enabled, GetParam().expectedEnabled);
+    EXPECT_THAT(readings(), ElementsAreArray(GetParam().expectedReadings));
+    EXPECT_THAT(getProperty<bool>(sut->getPath(), "Enabled"),
+                Eq(GetParam().expectedEnabled));
+}
+
+TEST_P(TestReportWithReportUpdatesAndLimit,
+       appendLimitIsRespectedAfterChangingToPeriodic)
+{
+    sut = makeReport(ReportParams(GetParam().reportParams)
+                         .reportingType(ReportingType::onRequest)
+                         .interval(std::chrono::hours(0)));
+
+    changeReport(ReportingType::periodic, std::chrono::hours(1000));
+    updateReportFourTimes();
+
+    EXPECT_THAT(readings(), ElementsAreArray(GetParam().expectedReadings));
+    EXPECT_THAT(getProperty<bool>(sut->getPath(), "Enabled"),
+                Eq(GetParam().expectedEnabled));
+}
+
+TEST_P(TestReportWithReportUpdatesAndLimit,
+       appendLimitIsIgnoredAfterChangingToOnRequest)
+{
+    sut = makeReport(ReportParams(GetParam().reportParams)
+                         .reportingType(ReportingType::periodic)
+                         .interval(std::chrono::hours(1000)));
+
+    changeReport(ReportingType::onRequest, Milliseconds{0});
+    updateReportFourTimes();
+
+    EXPECT_THAT(readings(), SizeIs(2u));
+    EXPECT_THAT(getProperty<bool>(sut->getPath(), "Enabled"), Eq(true));
 }
 
 class TestReportInitialization : public TestReport