blob: deed82d09b36a67a91f3a8001231a5cb96499513 [file] [log] [blame]
Wludzik, Jozef2f9f9b82020-10-13 09:07:45 +02001#pragma once
2
3#include "interfaces/report_factory.hpp"
4#include "mocks/report_mock.hpp"
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +00005#include "params/report_params.hpp"
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +00006#include "utils/transform.hpp"
Wludzik, Jozef2f9f9b82020-10-13 09:07:45 +02007
8#include <gmock/gmock.h>
9
10class ReportFactoryMock : public interfaces::ReportFactory
11{
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000012 static std::vector<LabeledMetricParameters>
13 convertToLabeled(const ReadingParameters& readingParams)
14 {
15 return utils::transform(readingParams, [](const auto& params) {
16 return LabeledMetricParameters(
Patrick Williams3a1c2972023-05-10 07:51:04 -050017 utils::transform(
18 std::get<0>(params),
19 [](const auto& sensorData) {
20 return LabeledSensorInfo("Service", std::get<0>(sensorData),
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +010021 std::get<1>(sensorData));
Patrick Williams3a1c2972023-05-10 07:51:04 -050022 }),
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010023 utils::toOperationType(std::get<1>(params)),
Krzysztof Grobelnycff70c12022-10-27 07:16:08 +000024 utils::toCollectionTimeScope(std::get<2>(params)),
25 CollectionDuration(Milliseconds(std::get<3>(params))));
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000026 });
27 }
28
Wludzik, Jozef2f9f9b82020-10-13 09:07:45 +020029 public:
30 ReportFactoryMock()
31 {
32 using namespace testing;
33
Szymon Dompkefdb06a12022-02-11 11:04:44 +010034 ON_CALL(*this, convertMetricParams(_))
35 .WillByDefault(
36 WithArgs<0>(Invoke(&ReportFactoryMock::convertToLabeled)));
37
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000038 ON_CALL(*this, convertMetricParams(_, _))
39 .WillByDefault(
40 WithArgs<1>(Invoke(&ReportFactoryMock::convertToLabeled)));
41
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +010042 ON_CALL(*this,
Krzysztof Grobelny493e62e2022-02-14 10:55:50 +010043 make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _, _))
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +010044 .WillByDefault(WithArgs<0>(Invoke([](const std::string& id) {
45 return std::make_unique<NiceMock<ReportMock>>(id);
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000046 })));
Wludzik, Jozef2f9f9b82020-10-13 09:07:45 +020047 }
48
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000049 MOCK_METHOD(std::vector<LabeledMetricParameters>, convertMetricParams,
50 (boost::asio::yield_context&, const ReadingParameters&),
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000051 (const, override));
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000052
Szymon Dompkefdb06a12022-02-11 11:04:44 +010053 MOCK_METHOD(std::vector<LabeledMetricParameters>, convertMetricParams,
54 (const ReadingParameters&), (const, override));
55
56 MOCK_METHOD(void, updateMetrics,
57 (std::vector<std::shared_ptr<interfaces::Metric>> & metrics,
Szymon Dompke32305f12022-07-05 15:37:21 +020058 bool enabled, const std::vector<LabeledMetricParameters>&),
Szymon Dompkefdb06a12022-02-11 11:04:44 +010059 (const, override));
60
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000061 MOCK_METHOD(std::unique_ptr<interfaces::Report>, make,
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +010062 (const std::string&, const std::string&, const ReportingType,
Krzysztof Grobelny51497a02021-11-09 14:56:22 +010063 const std::vector<ReportAction>&, Milliseconds, uint64_t,
64 const ReportUpdates, interfaces::ReportManager&,
65 interfaces::JsonStorage&, std::vector<LabeledMetricParameters>,
Krzysztof Grobelny493e62e2022-02-14 10:55:50 +010066 bool, Readings),
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000067 (const, override));
68
69 auto& expectMake(
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000070 std::optional<std::reference_wrapper<const ReportParams>> paramsRef,
71 const testing::Matcher<interfaces::ReportManager&>& rm,
72 const testing::Matcher<interfaces::JsonStorage&>& js)
73 {
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +010074 using testing::_;
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000075 if (paramsRef)
76 {
77 const ReportParams& params = *paramsRef;
Lukasz Kazmierczak7e098e92021-09-16 15:59:56 +020078 return EXPECT_CALL(
Krzysztof Grobelny493e62e2022-02-14 10:55:50 +010079 *this,
80 make(params.reportId(), params.reportName(),
81 params.reportingType(), params.reportActions(),
82 params.interval(), params.appendLimit(),
83 params.reportUpdates(), rm, js, params.metricParameters(),
84 params.enabled(), params.readings()));
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000085 }
86 else
87 {
Krzysztof Grobelny493e62e2022-02-14 10:55:50 +010088 return EXPECT_CALL(*this,
89 make(_, _, _, _, _, _, _, rm, js, _, _, _));
Krzysztof Grobelnyd2238192020-12-02 09:27:28 +000090 }
91 }
Wludzik, Jozef2f9f9b82020-10-13 09:07:45 +020092};