#pragma once #include "util/AsioContextTestFixture.hpp" #include "util/MockAmendmentCenter.hpp" #include "util/MockBackendTestFixture.hpp" #include "util/MockPrometheus.hpp" #include "util/MockWsBase.hpp" #include "util/SyncExecutionCtxFixture.hpp" #include "web/SubscriptionContextInterface.hpp" #include #include #include #include #include #include #include // Base class for feed tests, providing easy way to access the received feed // The interface for matchers is from gtest so we don't want to change the casing // NOLINTBEGIN(readability-identifier-naming) template struct FeedBaseTest : util::prometheus::WithPrometheus, MockBackendTest, SyncExecutionCtxFixture { protected: web::SubscriptionContextPtr sessionPtr = std::make_shared(); std::shared_ptr testFeedPtr = std::make_shared(ctx_); MockSession* mockSessionPtr = dynamic_cast(sessionPtr.get()); StrictMockAmendmentCenterSharedPtr mockAmendmentCenterPtr_; uint32_t const networkID{123}; }; namespace feed::impl { class SharedStringJsonEqMatcher { std::string expected_; public: using is_gtest_matcher = void; explicit SharedStringJsonEqMatcher(std::string expected) : expected_(std::move(expected)) { } bool MatchAndExplain(std::shared_ptr const& arg, std::ostream* /* listener */) const { return boost::json::parse(*arg) == boost::json::parse(expected_); } void DescribeTo(std::ostream* os) const { *os << "Contains json " << expected_; } void DescribeNegationTo(std::ostream* os) const { *os << "Expecting json " << expected_; } }; } // namespace feed::impl // NOLINTEND(readability-identifier-naming) inline ::testing::Matcher> sharedStringJsonEq(std::string const& expected) { return feed::impl::SharedStringJsonEqMatcher(expected); }