mirror of
https://github.com/latentPrion/cppbessot.git
synced 2026-04-17 18:44:23 +00:00
Add tests for generated-cpp-source & json serdes
This commit is contained in:
7
tests/CMakeLists.txt
Normal file
7
tests/CMakeLists.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/googletest/CMakeLists.txt")
|
||||
message(FATAL_ERROR
|
||||
"GoogleTest submodule is missing. Run `git submodule update --init --recursive tests/googletest` from the cppbessot repo root.")
|
||||
endif()
|
||||
|
||||
add_subdirectory(googletest EXCLUDE_FROM_ALL)
|
||||
add_subdirectory(cpp-serdes EXCLUDE_FROM_ALL)
|
||||
26
tests/cpp-serdes/CMakeLists.txt
Normal file
26
tests/cpp-serdes/CMakeLists.txt
Normal file
@@ -0,0 +1,26 @@
|
||||
include(GoogleTest)
|
||||
|
||||
set(CPP_SERDES_TEST_NAME "cpp_serdes_${DB_SCHEMA_DIR_TO_GENERATE}")
|
||||
string(REPLACE "." "_" CPP_SERDES_TEST_NAME "${CPP_SERDES_TEST_NAME}")
|
||||
string(REPLACE "-" "_" CPP_SERDES_TEST_NAME "${CPP_SERDES_TEST_NAME}")
|
||||
|
||||
set(CPP_SERDES_TEST_SOURCES
|
||||
main.cpp
|
||||
government_address_roundtrip_test.cpp
|
||||
trip_attempt_result_roundtrip_test.cpp
|
||||
)
|
||||
|
||||
add_executable(${CPP_SERDES_TEST_NAME} ${CPP_SERDES_TEST_SOURCES})
|
||||
target_compile_features(${CPP_SERDES_TEST_NAME} PRIVATE cxx_std_20)
|
||||
target_include_directories(${CPP_SERDES_TEST_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
target_link_libraries(${CPP_SERDES_TEST_NAME}
|
||||
PRIVATE
|
||||
cppbessot::openai_model_gen
|
||||
GTest::gtest_main
|
||||
)
|
||||
target_compile_definitions(${CPP_SERDES_TEST_NAME}
|
||||
PRIVATE
|
||||
CPP_SERDES_SCHEMA_DIR="${DB_SCHEMA_DIR_TO_GENERATE}"
|
||||
)
|
||||
|
||||
gtest_discover_tests(${CPP_SERDES_TEST_NAME})
|
||||
27
tests/cpp-serdes/government_address_roundtrip_test.cpp
Normal file
27
tests/cpp-serdes/government_address_roundtrip_test.cpp
Normal file
@@ -0,0 +1,27 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <cppbessot/model/GovernmentAddress.h>
|
||||
|
||||
#include "test_helpers.h"
|
||||
|
||||
TEST(GovernmentAddressJsonSerdes, RoundTripsViaJson)
|
||||
{
|
||||
models::GovernmentAddress original{};
|
||||
original.id = "gov-addr-42";
|
||||
original.addressLabel = "District Office";
|
||||
original.regionLookupKey = "region-west";
|
||||
|
||||
const nlohmann::json expected = {
|
||||
{"id", "gov-addr-42"},
|
||||
{"addressLabel", "District Office"},
|
||||
{"regionLookupKey", "region-west"},
|
||||
};
|
||||
|
||||
const nlohmann::json serialized = original.toJson();
|
||||
expect_json_roundtrip_equal(serialized, expected);
|
||||
|
||||
const models::GovernmentAddress reparsed = models::GovernmentAddress::fromJson(serialized);
|
||||
EXPECT_EQ(reparsed.id, original.id);
|
||||
EXPECT_EQ(reparsed.addressLabel, original.addressLabel);
|
||||
EXPECT_EQ(reparsed.regionLookupKey, original.regionLookupKey);
|
||||
}
|
||||
7
tests/cpp-serdes/main.cpp
Normal file
7
tests/cpp-serdes/main.cpp
Normal file
@@ -0,0 +1,7 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
9
tests/cpp-serdes/test_helpers.h
Normal file
9
tests/cpp-serdes/test_helpers.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include <nlohmann/json.hpp>
|
||||
|
||||
inline void expect_json_roundtrip_equal(const nlohmann::json& actual, const nlohmann::json& expected)
|
||||
{
|
||||
EXPECT_EQ(actual, expected) << "expected: " << expected.dump() << "\nactual: " << actual.dump();
|
||||
}
|
||||
54
tests/cpp-serdes/trip_attempt_result_roundtrip_test.cpp
Normal file
54
tests/cpp-serdes/trip_attempt_result_roundtrip_test.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <cppbessot/model/TripAttemptResult.h>
|
||||
|
||||
#include "test_helpers.h"
|
||||
|
||||
TEST(TripAttemptResultJsonSerdes, RoundTripsViaJson)
|
||||
{
|
||||
models::TripAttemptResult original{};
|
||||
original.id = "attempt-result-7";
|
||||
original.result = "failed";
|
||||
original.retryReason = "weather";
|
||||
original.governmentSuspensionReason = "";
|
||||
original.governmentTerminationReason = "";
|
||||
original.complianceSuspensionReason = "";
|
||||
original.complianceTerminationReason = "";
|
||||
original.policySuspensionReason = "";
|
||||
original.policyTerminationReason = "";
|
||||
original.cancelationReason = "";
|
||||
original.failureReason = "blocked-route";
|
||||
original.details = "bridge closure";
|
||||
|
||||
const nlohmann::json expected = {
|
||||
{"id", "attempt-result-7"},
|
||||
{"result", "failed"},
|
||||
{"retryReason", "weather"},
|
||||
{"governmentSuspensionReason", ""},
|
||||
{"governmentTerminationReason", ""},
|
||||
{"complianceSuspensionReason", ""},
|
||||
{"complianceTerminationReason", ""},
|
||||
{"policySuspensionReason", ""},
|
||||
{"policyTerminationReason", ""},
|
||||
{"cancelationReason", ""},
|
||||
{"failureReason", "blocked-route"},
|
||||
{"details", "bridge closure"},
|
||||
};
|
||||
|
||||
const nlohmann::json serialized = original.toJson();
|
||||
expect_json_roundtrip_equal(serialized, expected);
|
||||
|
||||
const models::TripAttemptResult reparsed = models::TripAttemptResult::fromJson(serialized);
|
||||
EXPECT_EQ(reparsed.id, original.id);
|
||||
EXPECT_EQ(reparsed.result, original.result);
|
||||
EXPECT_EQ(reparsed.retryReason, original.retryReason);
|
||||
EXPECT_EQ(reparsed.governmentSuspensionReason, original.governmentSuspensionReason);
|
||||
EXPECT_EQ(reparsed.governmentTerminationReason, original.governmentTerminationReason);
|
||||
EXPECT_EQ(reparsed.complianceSuspensionReason, original.complianceSuspensionReason);
|
||||
EXPECT_EQ(reparsed.complianceTerminationReason, original.complianceTerminationReason);
|
||||
EXPECT_EQ(reparsed.policySuspensionReason, original.policySuspensionReason);
|
||||
EXPECT_EQ(reparsed.policyTerminationReason, original.policyTerminationReason);
|
||||
EXPECT_EQ(reparsed.cancelationReason, original.cancelationReason);
|
||||
EXPECT_EQ(reparsed.failureReason, original.failureReason);
|
||||
EXPECT_EQ(reparsed.details, original.details);
|
||||
}
|
||||
Reference in New Issue
Block a user