20#include <boost/test/unit_test.hpp>
27wxFileName schemaPath()
29 wxFileName schemaFile( wxString::FromUTF8( __FILE__ ) );
30 schemaFile.Normalize( wxPATH_NORM_DOTS | wxPATH_NORM_TILDE | wxPATH_NORM_ABSOLUTE );
31 schemaFile.RemoveLastDir();
32 schemaFile.RemoveLastDir();
33 schemaFile.RemoveLastDir();
34 schemaFile.AppendDir( wxS(
"resources" ) );
35 schemaFile.AppendDir( wxS(
"schemas" ) );
36 schemaFile.SetFullName( wxS(
"kicad-remote-provider-metadata-v1.schema.json" ) );
41nlohmann::json validMetadata()
43 return nlohmann::json{
44 {
"provider_name",
"Acme Parts" },
45 {
"provider_version",
"1.0.0" },
46 {
"api_base_url",
"https://provider.example.test/api" },
47 {
"panel_url",
"https://provider.example.test/app" },
48 {
"session_bootstrap_url",
"https://provider.example.test/session/bootstrap" },
51 {
"metadata_url",
"https://provider.example.test/.well-known/oauth-authorization-server" },
52 {
"client_id",
"kicad-desktop" },
53 {
"scopes", nlohmann::json::array( {
"openid",
"profile",
"parts.read" } ) }
56 {
"web_ui_v1",
true },
57 {
"direct_downloads_v1",
true },
58 {
"inline_payloads_v1",
true }
60 {
"max_download_bytes", 10485760 },
61 {
"supported_asset_types", nlohmann::json::array( {
"symbol",
"footprint",
"3dmodel" } ) },
62 {
"parts", { {
"endpoint_template",
"/v1/parts/{part_id}" } } },
63 {
"documentation_url",
"https://provider.example.test/docs" },
64 {
"terms_url",
"https://provider.example.test/terms" },
65 {
"privacy_url",
"https://provider.example.test/privacy" }
76 std::optional<REMOTE_PROVIDER_METADATA> metadata =
79 BOOST_REQUIRE_MESSAGE( metadata.has_value(), error );
81 BOOST_CHECK_EQUAL( metadata->panel_url, wxString(
"https://provider.example.test/app" ) );
83 wxString(
"https://provider.example.test/session/bootstrap" ) );
84 BOOST_CHECK( metadata->web_ui_v1 );
85 BOOST_CHECK( metadata->direct_downloads_v1 );
86 BOOST_CHECK( metadata->inline_payloads_v1 );
88 wxString(
"https://provider.example.test/.well-known/oauth-authorization-server" ) );
94 std::optional<REMOTE_PROVIDER_METADATA> metadata =
97 BOOST_REQUIRE_MESSAGE( metadata.has_value(), error );
102 nlohmann::json metadata = validMetadata();
103 metadata[
"auth"].erase(
"metadata_url" );
106 std::optional<REMOTE_PROVIDER_METADATA> parsed =
109 BOOST_CHECK( !parsed.has_value() );
110 BOOST_CHECK( error.Contains( wxString(
"schema validation" ) ) );
111 BOOST_CHECK( error.Contains( wxString(
"metadata_url" ) ) );
116 nlohmann::json metadata = validMetadata();
117 metadata[
"api_base_url"] =
"http://provider.example.test/api";
120 std::optional<REMOTE_PROVIDER_METADATA> parsed =
123 BOOST_CHECK( !parsed.has_value() );
124 BOOST_CHECK( error.Contains( wxString(
"api_base_url" ) ) );
126 metadata[
"allow_insecure_localhost"] =
true;
127 metadata[
"api_base_url"] =
"http://127.0.0.1:8080/api";
128 metadata[
"auth"][
"metadata_url"] =
"http://127.0.0.1:8080/.well-known/oauth-authorization-server";
131 BOOST_REQUIRE_MESSAGE( parsed.has_value(), error );
136 nlohmann::json metadata = validMetadata();
137 metadata[
"capabilities"][
"future_magic_v9"] =
true;
140 std::optional<REMOTE_PROVIDER_METADATA> parsed =
143 BOOST_CHECK( !parsed.has_value() );
144 BOOST_CHECK( error.Contains( wxString(
"Unsupported provider capability" ) )
145 || error.Contains( wxString(
"schema validation" ) ) );
150 nlohmann::json metadata = validMetadata();
151 metadata.erase(
"panel_url" );
154 std::optional<REMOTE_PROVIDER_METADATA> parsed =
157 BOOST_CHECK( !parsed.has_value() );
158 BOOST_CHECK( error.Contains( wxString(
"panel_url" ) ) );
163 nlohmann::json metadata = validMetadata();
164 metadata.erase(
"session_bootstrap_url" );
167 std::optional<REMOTE_PROVIDER_METADATA> parsed =
170 BOOST_CHECK( !parsed.has_value() );
171 BOOST_CHECK( error.Contains( wxString(
"session_bootstrap_url" ) ) );
176 nlohmann::json metadata = validMetadata();
177 metadata[
"session_bootstrap_url"] =
"https://tokens.example.test/session/bootstrap";
180 std::optional<REMOTE_PROVIDER_METADATA> parsed =
183 BOOST_CHECK( !parsed.has_value() );
184 BOOST_CHECK( error.Contains( wxString(
"session_bootstrap_url" ) ) );
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL(result, "25.4")