|
3 | 3 | #include <gtest/gtest.h>
|
4 | 4 |
|
5 | 5 | #include "cct_exception.hpp"
|
| 6 | +#include "cct_json-serialization.hpp" |
6 | 7 | #include "currencycode.hpp"
|
7 | 8 |
|
8 | 9 | namespace cct {
|
@@ -65,4 +66,46 @@ TEST(MarketTest, StrLen) {
|
65 | 66 | market = Market("1INCH", "EUR", Market::Type::kFiatConversionMarket);
|
66 | 67 | EXPECT_EQ(market.strLen(), 10);
|
67 | 68 | }
|
| 69 | + |
| 70 | +struct Foo { |
| 71 | + bool operator==(const Foo &) const noexcept = default; |
| 72 | + |
| 73 | + Market market; |
| 74 | +}; |
| 75 | + |
| 76 | +TEST(MarketTest, JsonSerializationValue) { |
| 77 | + Foo foo{Market{"DOGE", "BTC"}}; |
| 78 | + |
| 79 | + string buffer; |
| 80 | + auto res = json::write<json::opts{.raw_string = true}>(foo, buffer); // NOLINT(readability-implicit-bool-conversion) |
| 81 | + |
| 82 | + EXPECT_FALSE(res); |
| 83 | + |
| 84 | + EXPECT_EQ(buffer, R"({"market":"DOGE-BTC"})"); |
| 85 | +} |
| 86 | + |
| 87 | +using MarketMap = std::map<Market, bool>; |
| 88 | + |
| 89 | +TEST(MarketTest, JsonSerializationKey) { |
| 90 | + MarketMap map{{Market{"DOGE", "BTC"}, true}, {Market{"BTC", "ETH"}, false}}; |
| 91 | + |
| 92 | + string buffer; |
| 93 | + auto res = json::write<json::opts{.raw_string = true}>(map, buffer); // NOLINT(readability-implicit-bool-conversion) |
| 94 | + |
| 95 | + EXPECT_FALSE(res); |
| 96 | + |
| 97 | + EXPECT_EQ(buffer, R"({"BTC-ETH":false,"DOGE-BTC":true})"); |
| 98 | +} |
| 99 | + |
| 100 | +TEST(MarketTest, JsonDeserialization) { |
| 101 | + Foo foo; |
| 102 | + |
| 103 | + // NOLINTNEXTLINE(readability-implicit-bool-conversion) |
| 104 | + auto ec = json::read<json::opts{.raw_string = true}>(foo, R"({"market":"DOGE-ETH"})"); |
| 105 | + |
| 106 | + ASSERT_FALSE(ec); |
| 107 | + |
| 108 | + EXPECT_EQ(foo, Foo{Market("DOGE", "ETH")}); |
| 109 | +} |
| 110 | + |
68 | 111 | } // namespace cct
|
0 commit comments