20#include <boost/test/unit_test.hpp>
27wxFileName schemaPath()
29 wxFileName schemaFile = wxFileName::DirName( wxString::FromUTF8( QA_SRC_ROOT ) );
30 schemaFile.AppendDir( wxS(
"resources" ) );
31 schemaFile.AppendDir( wxS(
"schemas" ) );
32 schemaFile.SetFullName( wxS(
"kicad-remote-provider-metadata-v1.schema.json" ) );
37nlohmann::json validMetadata()
39 return nlohmann::json{
40 {
"provider_name",
"Acme Parts" },
41 {
"provider_version",
"1.0.0" },
42 {
"api_base_url",
"https://provider.example.test/api" },
43 {
"panel_url",
"https://provider.example.test/app" },
44 {
"session_bootstrap_url",
"https://provider.example.test/session/bootstrap" },
47 {
"metadata_url",
"https://provider.example.test/.well-known/oauth-authorization-server" },
48 {
"client_id",
"kicad-desktop" },
49 {
"scopes", nlohmann::json::array( {
"openid",
"profile",
"parts.read" } ) }
52 {
"web_ui_v1",
true },
53 {
"direct_downloads_v1",
true },
54 {
"inline_payloads_v1",
true }
56 {
"max_download_bytes", 10485760 },
57 {
"supported_asset_types", nlohmann::json::array( {
"symbol",
"footprint",
"3dmodel" } ) },
58 {
"parts", { {
"endpoint_template",
"/v1/parts/{part_id}" } } },
59 {
"documentation_url",
"https://provider.example.test/docs" },
60 {
"terms_url",
"https://provider.example.test/terms" },
61 {
"privacy_url",
"https://provider.example.test/privacy" }
72 std::optional<REMOTE_PROVIDER_METADATA> metadata =
75 BOOST_REQUIRE_MESSAGE( metadata.has_value(), error );
77 BOOST_CHECK_EQUAL( metadata->panel_url, wxString(
"https://provider.example.test/app" ) );
79 wxString(
"https://provider.example.test/session/bootstrap" ) );
80 BOOST_CHECK( metadata->web_ui_v1 );
81 BOOST_CHECK( metadata->direct_downloads_v1 );
82 BOOST_CHECK( metadata->inline_payloads_v1 );
84 wxString(
"https://provider.example.test/.well-known/oauth-authorization-server" ) );
91 if( !defaultPath.IsFileReadable() )
93 BOOST_TEST_MESSAGE(
"Skipping: default schema path not readable (" + defaultPath.GetFullPath() +
")" );
98 std::optional<REMOTE_PROVIDER_METADATA> metadata =
101 BOOST_REQUIRE_MESSAGE( metadata.has_value(), error );
106 nlohmann::json metadata = validMetadata();
107 metadata[
"auth"].erase(
"metadata_url" );
110 std::optional<REMOTE_PROVIDER_METADATA> parsed =
113 BOOST_CHECK( !parsed.has_value() );
114 BOOST_CHECK( error.Contains( wxString(
"schema validation" ) ) );
115 BOOST_CHECK( error.Contains( wxString(
"metadata_url" ) ) );
120 nlohmann::json metadata = validMetadata();
121 metadata[
"api_base_url"] =
"http://provider.example.test/api";
124 std::optional<REMOTE_PROVIDER_METADATA> parsed =
127 BOOST_CHECK( !parsed.has_value() );
128 BOOST_CHECK( error.Contains( wxString(
"api_base_url" ) ) );
130 metadata[
"allow_insecure_localhost"] =
true;
131 metadata[
"api_base_url"] =
"http://127.0.0.1:8080/api";
132 metadata[
"auth"][
"metadata_url"] =
"http://127.0.0.1:8080/.well-known/oauth-authorization-server";
135 BOOST_REQUIRE_MESSAGE( parsed.has_value(), error );
140 nlohmann::json metadata = validMetadata();
141 metadata[
"capabilities"][
"future_magic_v9"] =
true;
144 std::optional<REMOTE_PROVIDER_METADATA> parsed =
147 BOOST_CHECK( !parsed.has_value() );
148 BOOST_CHECK( error.Contains( wxString(
"Unsupported provider capability" ) )
149 || error.Contains( wxString(
"schema validation" ) ) );
154 nlohmann::json metadata = validMetadata();
155 metadata.erase(
"panel_url" );
158 std::optional<REMOTE_PROVIDER_METADATA> parsed =
161 BOOST_CHECK( !parsed.has_value() );
162 BOOST_CHECK( error.Contains( wxString(
"panel_url" ) ) );
167 nlohmann::json metadata = validMetadata();
168 metadata.erase(
"session_bootstrap_url" );
171 std::optional<REMOTE_PROVIDER_METADATA> parsed =
174 BOOST_CHECK( !parsed.has_value() );
175 BOOST_CHECK( error.Contains( wxString(
"session_bootstrap_url" ) ) );
180 nlohmann::json metadata = validMetadata();
181 metadata[
"session_bootstrap_url"] =
"https://tokens.example.test/session/bootstrap";
184 std::optional<REMOTE_PROVIDER_METADATA> parsed =
187 BOOST_CHECK( !parsed.has_value() );
188 BOOST_CHECK( error.Contains( wxString(
"session_bootstrap_url" ) ) );
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_SUITE_END()
BOOST_TEST_MESSAGE("\n=== Real-World Polygon PIP Benchmark ===\n"<< formatTable(table))
BOOST_CHECK_EQUAL(result, "25.4")