#pragma once
#include "network_manager.hpp"

#include <gmock/gmock.h>

namespace phosphor
{
namespace network
{

struct MockExecutor : DelayedExecutor
{
    MOCK_METHOD((void), schedule, (), (override));
    MOCK_METHOD((void), setCallback, (fu2::unique_function<void()> &&),
                (override));
};

struct TestManagerData
{
    MockExecutor mockReload;
    fu2::unique_function<void()> reloadCb;

    inline MockExecutor& reloadForManager()
    {
        EXPECT_CALL(mockReload, setCallback(testing::_))
            .WillOnce([&](fu2::unique_function<void()>&& cb) {
                reloadCb = std::move(cb);
            });
        return mockReload;
    }
};

struct TestManager : TestManagerData, Manager
{
    inline TestManager(sdbusplus::bus_t& bus, stdplus::zstring_view path,
                       const std::filesystem::path& dir) :
        Manager(bus, reloadForManager(), path, dir)
    {
    }

    using Manager::handleAdminState;
};

} // namespace network
} // namespace phosphor
