12f9f9b87SWludzik, Jozef #pragma once
22f9f9b87SWludzik, Jozef 
32f9f9b87SWludzik, Jozef #include "interfaces/report_factory.hpp"
42f9f9b87SWludzik, Jozef #include "mocks/report_mock.hpp"
5d2238194SKrzysztof Grobelny #include "params/report_params.hpp"
6dcc4e193SKrzysztof Grobelny #include "utils/transform.hpp"
72f9f9b87SWludzik, Jozef 
82f9f9b87SWludzik, Jozef #include <gmock/gmock.h>
92f9f9b87SWludzik, Jozef 
102f9f9b87SWludzik, Jozef class ReportFactoryMock : public interfaces::ReportFactory
112f9f9b87SWludzik, Jozef {
12dcc4e193SKrzysztof Grobelny     static std::vector<LabeledMetricParameters>
convertToLabeled(const ReadingParameters & readingParams)13dcc4e193SKrzysztof Grobelny         convertToLabeled(const ReadingParameters& readingParams)
14dcc4e193SKrzysztof Grobelny     {
15dcc4e193SKrzysztof Grobelny         return utils::transform(readingParams, [](const auto& params) {
16dcc4e193SKrzysztof Grobelny             return LabeledMetricParameters(
17*c7935fa1SPatrick Williams                 utils::transform(std::get<0>(params),
18b8cc78ddSKrzysztof Grobelny                                  [](const auto& sensorData) {
193a1c297aSPatrick Williams                 return LabeledSensorInfo("Service", std::get<0>(sensorData),
20b8cc78ddSKrzysztof Grobelny                                          std::get<1>(sensorData));
21dcc4e193SKrzysztof Grobelny             }),
2251497a0cSKrzysztof Grobelny                 utils::toOperationType(std::get<1>(params)),
23cff70c14SKrzysztof Grobelny                 utils::toCollectionTimeScope(std::get<2>(params)),
24cff70c14SKrzysztof Grobelny                 CollectionDuration(Milliseconds(std::get<3>(params))));
25dcc4e193SKrzysztof Grobelny         });
26dcc4e193SKrzysztof Grobelny     }
27dcc4e193SKrzysztof Grobelny 
282f9f9b87SWludzik, Jozef   public:
ReportFactoryMock()292f9f9b87SWludzik, Jozef     ReportFactoryMock()
302f9f9b87SWludzik, Jozef     {
312f9f9b87SWludzik, Jozef         using namespace testing;
322f9f9b87SWludzik, Jozef 
33fdb06a14SSzymon Dompke         ON_CALL(*this, convertMetricParams(_))
34fdb06a14SSzymon Dompke             .WillByDefault(
35fdb06a14SSzymon Dompke                 WithArgs<0>(Invoke(&ReportFactoryMock::convertToLabeled)));
36fdb06a14SSzymon Dompke 
37dcc4e193SKrzysztof Grobelny         ON_CALL(*this, convertMetricParams(_, _))
38dcc4e193SKrzysztof Grobelny             .WillByDefault(
39dcc4e193SKrzysztof Grobelny                 WithArgs<1>(Invoke(&ReportFactoryMock::convertToLabeled)));
40dcc4e193SKrzysztof Grobelny 
41b8cc78ddSKrzysztof Grobelny         ON_CALL(*this,
42493e62ebSKrzysztof Grobelny                 make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _, _))
43b8cc78ddSKrzysztof Grobelny             .WillByDefault(WithArgs<0>(Invoke([](const std::string& id) {
44b8cc78ddSKrzysztof Grobelny             return std::make_unique<NiceMock<ReportMock>>(id);
45d2238194SKrzysztof Grobelny         })));
462f9f9b87SWludzik, Jozef     }
472f9f9b87SWludzik, Jozef 
48dcc4e193SKrzysztof Grobelny     MOCK_METHOD(std::vector<LabeledMetricParameters>, convertMetricParams,
49dcc4e193SKrzysztof Grobelny                 (boost::asio::yield_context&, const ReadingParameters&),
502f9f9b87SWludzik, Jozef                 (const, override));
51dcc4e193SKrzysztof Grobelny 
52fdb06a14SSzymon Dompke     MOCK_METHOD(std::vector<LabeledMetricParameters>, convertMetricParams,
53fdb06a14SSzymon Dompke                 (const ReadingParameters&), (const, override));
54fdb06a14SSzymon Dompke 
55fdb06a14SSzymon Dompke     MOCK_METHOD(void, updateMetrics,
56fdb06a14SSzymon Dompke                 (std::vector<std::shared_ptr<interfaces::Metric>> & metrics,
5732305f14SSzymon Dompke                  bool enabled, const std::vector<LabeledMetricParameters>&),
58fdb06a14SSzymon Dompke                 (const, override));
59fdb06a14SSzymon Dompke 
60d2238194SKrzysztof Grobelny     MOCK_METHOD(std::unique_ptr<interfaces::Report>, make,
61b8cc78ddSKrzysztof Grobelny                 (const std::string&, const std::string&, const ReportingType,
6251497a0cSKrzysztof Grobelny                  const std::vector<ReportAction>&, Milliseconds, uint64_t,
6351497a0cSKrzysztof Grobelny                  const ReportUpdates, interfaces::ReportManager&,
6451497a0cSKrzysztof Grobelny                  interfaces::JsonStorage&, std::vector<LabeledMetricParameters>,
65493e62ebSKrzysztof Grobelny                  bool, Readings),
66d2238194SKrzysztof Grobelny                 (const, override));
67d2238194SKrzysztof Grobelny 
expectMake(std::optional<std::reference_wrapper<const ReportParams>> paramsRef,const testing::Matcher<interfaces::ReportManager &> & rm,const testing::Matcher<interfaces::JsonStorage &> & js)68d2238194SKrzysztof Grobelny     auto& expectMake(
69d2238194SKrzysztof Grobelny         std::optional<std::reference_wrapper<const ReportParams>> paramsRef,
70d2238194SKrzysztof Grobelny         const testing::Matcher<interfaces::ReportManager&>& rm,
71d2238194SKrzysztof Grobelny         const testing::Matcher<interfaces::JsonStorage&>& js)
72d2238194SKrzysztof Grobelny     {
73b4ef22e4SSzymon Dompke         using testing::_;
74d2238194SKrzysztof Grobelny         if (paramsRef)
75d2238194SKrzysztof Grobelny         {
76d2238194SKrzysztof Grobelny             const ReportParams& params = *paramsRef;
777e098e93SLukasz Kazmierczak             return EXPECT_CALL(
78493e62ebSKrzysztof Grobelny                 *this,
79493e62ebSKrzysztof Grobelny                 make(params.reportId(), params.reportName(),
80b8cc78ddSKrzysztof Grobelny                      params.reportingType(), params.reportActions(),
81b8cc78ddSKrzysztof Grobelny                      params.interval(), params.appendLimit(),
82493e62ebSKrzysztof Grobelny                      params.reportUpdates(), rm, js, params.metricParameters(),
83493e62ebSKrzysztof Grobelny                      params.enabled(), params.readings()));
84d2238194SKrzysztof Grobelny         }
85d2238194SKrzysztof Grobelny         else
86d2238194SKrzysztof Grobelny         {
87493e62ebSKrzysztof Grobelny             return EXPECT_CALL(*this,
88493e62ebSKrzysztof Grobelny                                make(_, _, _, _, _, _, _, rm, js, _, _, _));
89d2238194SKrzysztof Grobelny         }
90d2238194SKrzysztof Grobelny     }
912f9f9b87SWludzik, Jozef };
92