176833cb5SWludzik, Jozef #pragma once
276833cb5SWludzik, Jozef 
376833cb5SWludzik, Jozef #include "interfaces/trigger_factory.hpp"
476833cb5SWludzik, Jozef #include "mocks/trigger_mock.hpp"
576833cb5SWludzik, Jozef #include "params/trigger_params.hpp"
676833cb5SWludzik, Jozef 
776833cb5SWludzik, Jozef #include <gmock/gmock.h>
876833cb5SWludzik, Jozef 
976833cb5SWludzik, Jozef class TriggerFactoryMock : public interfaces::TriggerFactory
1076833cb5SWludzik, Jozef {
1176833cb5SWludzik, Jozef   public:
1276833cb5SWludzik, Jozef     TriggerFactoryMock()
1376833cb5SWludzik, Jozef     {
1476833cb5SWludzik, Jozef         using namespace testing;
1576833cb5SWludzik, Jozef 
16*1477fe6aSWludzik, Jozef         ON_CALL(*this, make(_, _, _, _, _, _, _, _, _, _))
17*1477fe6aSWludzik, Jozef             .WillByDefault(WithArgs<1>(Invoke([](const std::string& name) {
1876833cb5SWludzik, Jozef                 return std::make_unique<NiceMock<TriggerMock>>(name);
1976833cb5SWludzik, Jozef             })));
2076833cb5SWludzik, Jozef     }
2176833cb5SWludzik, Jozef 
22*1477fe6aSWludzik, Jozef     MOCK_METHOD(
23*1477fe6aSWludzik, Jozef         std::unique_ptr<interfaces::Trigger>, make,
24*1477fe6aSWludzik, Jozef         (boost::asio::yield_context&, const std::string& name, bool isDiscrete,
25*1477fe6aSWludzik, Jozef          bool logToJournal, bool logToRedfish, bool updateReport,
26*1477fe6aSWludzik, Jozef          (const std::vector<
27*1477fe6aSWludzik, Jozef              std::pair<sdbusplus::message::object_path, std::string>>& sensors),
2876833cb5SWludzik, Jozef          const std::vector<std::string>& reportNames,
29*1477fe6aSWludzik, Jozef          const TriggerThresholdParams& thresholdParams,
3076833cb5SWludzik, Jozef          interfaces::TriggerManager& triggerManager),
3176833cb5SWludzik, Jozef         (const, override));
3276833cb5SWludzik, Jozef 
3376833cb5SWludzik, Jozef     auto& expectMake(
3476833cb5SWludzik, Jozef         std::optional<std::reference_wrapper<const TriggerParams>> paramsOpt,
3576833cb5SWludzik, Jozef         const testing::Matcher<interfaces::TriggerManager&>& tm)
3676833cb5SWludzik, Jozef     {
37*1477fe6aSWludzik, Jozef         using namespace testing;
38*1477fe6aSWludzik, Jozef 
3976833cb5SWludzik, Jozef         if (paramsOpt)
4076833cb5SWludzik, Jozef         {
4176833cb5SWludzik, Jozef             const TriggerParams& params = *paramsOpt;
4276833cb5SWludzik, Jozef             return EXPECT_CALL(
43*1477fe6aSWludzik, Jozef                 *this,
44*1477fe6aSWludzik, Jozef                 make(_, params.name(), params.isDiscrete(),
4576833cb5SWludzik, Jozef                      params.logToJournal(), params.logToRedfish(),
4676833cb5SWludzik, Jozef                      params.updateReport(), params.sensors(),
47*1477fe6aSWludzik, Jozef                      params.reportNames(), params.thresholdParams(), tm));
4876833cb5SWludzik, Jozef         }
4976833cb5SWludzik, Jozef         else
5076833cb5SWludzik, Jozef         {
51*1477fe6aSWludzik, Jozef             return EXPECT_CALL(*this, make(_, _, _, _, _, _, _, _, _, tm));
5276833cb5SWludzik, Jozef         }
5376833cb5SWludzik, Jozef     }
5476833cb5SWludzik, Jozef };
55