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*a4e67616SCezary Zwolak         ON_CALL(*this, make(_, _, _, _, _, _, _, _, _, _, _))
171477fe6aSWludzik, Jozef             .WillByDefault(WithArgs<1>(Invoke([](const std::string& name) {
1876833cb5SWludzik, Jozef                 return std::make_unique<NiceMock<TriggerMock>>(name);
1976833cb5SWludzik, Jozef             })));
2076833cb5SWludzik, Jozef     }
2176833cb5SWludzik, Jozef 
221477fe6aSWludzik, Jozef     MOCK_METHOD(
231477fe6aSWludzik, Jozef         std::unique_ptr<interfaces::Trigger>, make,
241477fe6aSWludzik, Jozef         (boost::asio::yield_context&, const std::string& name, bool isDiscrete,
251477fe6aSWludzik, Jozef          bool logToJournal, bool logToRedfish, bool updateReport,
261477fe6aSWludzik, Jozef          (const std::vector<
271477fe6aSWludzik, Jozef              std::pair<sdbusplus::message::object_path, std::string>>& sensors),
2876833cb5SWludzik, Jozef          const std::vector<std::string>& reportNames,
291477fe6aSWludzik, Jozef          const TriggerThresholdParams& thresholdParams,
30*a4e67616SCezary Zwolak          interfaces::TriggerManager& triggerManager,
31*a4e67616SCezary Zwolak          interfaces::JsonStorage& triggerStorage),
3276833cb5SWludzik, Jozef         (const, override));
3376833cb5SWludzik, Jozef 
3476833cb5SWludzik, Jozef     auto& expectMake(
3576833cb5SWludzik, Jozef         std::optional<std::reference_wrapper<const TriggerParams>> paramsOpt,
36*a4e67616SCezary Zwolak         const testing::Matcher<interfaces::TriggerManager&>& tm,
37*a4e67616SCezary Zwolak         const testing::Matcher<interfaces::JsonStorage&>& triggerStorage)
3876833cb5SWludzik, Jozef     {
391477fe6aSWludzik, Jozef         using namespace testing;
401477fe6aSWludzik, Jozef 
4176833cb5SWludzik, Jozef         if (paramsOpt)
4276833cb5SWludzik, Jozef         {
4376833cb5SWludzik, Jozef             const TriggerParams& params = *paramsOpt;
4476833cb5SWludzik, Jozef             return EXPECT_CALL(
45*a4e67616SCezary Zwolak                 *this, make(_, params.name(), params.isDiscrete(),
4676833cb5SWludzik, Jozef                             params.logToJournal(), params.logToRedfish(),
4776833cb5SWludzik, Jozef                             params.updateReport(), params.sensors(),
48*a4e67616SCezary Zwolak                             params.reportNames(), params.thresholdParams(), tm,
49*a4e67616SCezary Zwolak                             triggerStorage));
5076833cb5SWludzik, Jozef         }
5176833cb5SWludzik, Jozef         else
5276833cb5SWludzik, Jozef         {
53*a4e67616SCezary Zwolak             return EXPECT_CALL(
54*a4e67616SCezary Zwolak                 *this, make(_, _, _, _, _, _, _, _, _, tm, triggerStorage));
5576833cb5SWludzik, Jozef         }
5676833cb5SWludzik, Jozef     }
5776833cb5SWludzik, Jozef };
58