#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(stdplus::PinnedRef<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