utOpenApiReader.pp 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  1. unit utOpenApiReader;
  2. {$mode ObjFPC}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, fpjson, testregistry, fpopenapi.objects, fpopenapi.reader;
  6. Type
  7. { TTestOpenApiReader }
  8. TTestOpenApiReader = class(TTestCase)
  9. private
  10. FOpenAPI: TOpenAPi;
  11. FReader: TOpenAPIReader;
  12. Public
  13. Procedure Setup; override;
  14. Procedure TearDown; override;
  15. procedure LoadJSON(aJSON: TJSONStringType);
  16. procedure LoadJSONFile(aJSONFileName: TJSONStringType);
  17. Procedure TestRead(const aJSON : String);
  18. Property Reader : TOpenAPIReader Read FReader;
  19. Property OpenAPI : TOpenAPi Read FOpenAPI;
  20. Published
  21. Procedure TestHookup;
  22. end;
  23. TTestOpenApiReaderLarge = class (TTestOpenApiReader)
  24. Published
  25. procedure TestTitle;
  26. Procedure TestLarge;
  27. end;
  28. // TTestOpenAPIReader =
  29. TTestOpenApiReaderOpenAPI = Class(TTestOpenAPIReader)
  30. Procedure TestOpenAPI;
  31. Procedure TestJSONSchemaDialect;
  32. end;
  33. TTestOpenApiReaderInfo = Class(TTestOpenAPIReader)
  34. Procedure TestVersion;
  35. Procedure TestTitle;
  36. Procedure TestSummary;
  37. Procedure TestDescription;
  38. Procedure TestTermsOfService;
  39. Procedure TestContactEmail;
  40. Procedure TestContactName;
  41. Procedure TestContactURL;
  42. Procedure TestLicenseUrl;
  43. Procedure TestLicenseIdentifier;
  44. Procedure TestLicenseName;
  45. end;
  46. TTestOpenApiReaderTags = Class(TTestOpenAPIReader)
  47. Procedure TestName;
  48. Procedure TestDescription;
  49. Procedure TestExternalDocs;
  50. Procedure Test2Tags;
  51. end;
  52. TTestOpenApiReaderExternalDocs = Class(TTestOpenAPIReader)
  53. Procedure TestUrl;
  54. Procedure TestDescription;
  55. end;
  56. TTestOpenApiReaderServers = Class(TTestOpenAPIReader)
  57. Procedure TestUrl;
  58. Procedure TestDescription;
  59. Procedure TestVariablesDefault;
  60. Procedure TestVariablesDescription;
  61. Procedure TestVariablesEnum;
  62. Procedure Test2Url;
  63. end;
  64. TTestOpenApiReaderPaths = Class(TTestOpenAPIReader)
  65. Procedure TestEmpty;
  66. Procedure TestRef;
  67. Procedure TestSummary;
  68. Procedure TestDescription;
  69. Procedure TestGetEmpty;
  70. Procedure TestGetSummary;
  71. Procedure TestGetDescription;
  72. Procedure TestGetOperationId;
  73. Procedure TestGetDeprecated;
  74. Procedure TestGetExternalDocsEmpty;
  75. Procedure TestGetExternalDocsURL;
  76. Procedure TestGetServers;
  77. end;
  78. TTestOpenApiReaderPathRequestBody = Class(TTestOpenAPIReader)
  79. Procedure TestEmpty;
  80. Procedure TestDescription;
  81. Procedure TestRequired;
  82. Procedure TestContent;
  83. Procedure TestContentSchema;
  84. Procedure TestContentExample;
  85. Procedure TestContentExamples;
  86. Procedure TestContentEncodingContentType;
  87. Procedure TestContentEncodingExplode;
  88. Procedure TestContentEncodingStyle;
  89. Procedure TestContentEncodingAllowReserved;
  90. Procedure TestContentEncodingHeaders;
  91. end;
  92. TTestOpenApiReaderPathParameters = Class(TTestOpenAPIReader)
  93. Procedure TestGetParametersEmpty;
  94. end;
  95. TTestOpenApiReaderPathResponses = Class(TTestOpenAPIReader)
  96. Procedure TestEmpty;
  97. Procedure TestHeaders;
  98. Procedure TestDescription;
  99. Procedure TestContentEmpty;
  100. Procedure TestContentSchema;
  101. Procedure TestContentExample;
  102. Procedure TestContentExamples;
  103. Procedure TestContentEncodingEmpty;
  104. Procedure TestContentEncodingContentType;
  105. end;
  106. TTestOpenApiReaderPathSecurity = Class(TTestOpenAPIReader)
  107. Procedure TestEmpty;
  108. Procedure TestAPIKey;
  109. end;
  110. TTestOpenApiReaderPathResponsesLinks = Class(TTestOpenAPIReader)
  111. Procedure TestEmpty;
  112. Procedure TestOperatonRef;
  113. Procedure TestOperatonId;
  114. Procedure TestParameters;
  115. Procedure TestRequestBody;
  116. Procedure TestDescription;
  117. Procedure TestServer;
  118. end;
  119. TTestOpenApiReaderWebHooks = Class(TTestOpenAPIReader)
  120. Procedure TestEmpty;
  121. Procedure TestSummary;
  122. end;
  123. TTestOpenApiReaderComponents = Class(TTestOpenAPIReader)
  124. Procedure TestSchemaEmpty;
  125. Procedure TestSchemaContentEncoding;
  126. end;
  127. TTestOpenApiReaderOAuth2Scopes = Class(TTestOpenAPIReader)
  128. Procedure TestOAuth2ScopesAsObject;
  129. Procedure TestOAuth2ScopesEmpty;
  130. end;
  131. TTestOpenApiReaderSecurity = Class(TTestOpenAPIReader)
  132. Procedure TestOne;
  133. end;
  134. implementation
  135. { TTestOpenApiReader }
  136. procedure TTestOpenApiReader.Setup;
  137. begin
  138. Inherited;
  139. FReader:=TOpenAPIReader.Create(Nil);
  140. end;
  141. procedure TTestOpenApiReader.TearDown;
  142. begin
  143. FreeAndNil(FOpenAPI);
  144. FreeAndNil(FReader);
  145. Inherited;
  146. end;
  147. procedure TTestOpenApiReader.LoadJSON(aJSON: TJSONStringType);
  148. begin
  149. FreeAndNil(FOpenAPI);
  150. FOpenAPI:=TOpenAPI.Create;
  151. Reader.ReadFromString(OpenAPI,aJSON);
  152. end;
  153. procedure TTestOpenApiReader.LoadJSONFile(aJSONFileName: TJSONStringType);
  154. var
  155. F : TFileStream;
  156. aJSON : TJSONStringType;
  157. begin
  158. aJSON:='';
  159. F:=TFileStream.Create(aJSONFileName,fmOpenRead or fmShareDenyWrite);
  160. try
  161. SetLength(aJSON,F.Size);
  162. F.ReadBuffer(aJSON[1],Length(aJSON));
  163. LoadJSON(aJSON);
  164. finally
  165. F.Free;
  166. end;
  167. end;
  168. procedure TTestOpenApiReader.TestRead(const aJSON: String);
  169. begin
  170. LoadJSON(aJSON);
  171. end;
  172. procedure TTestOpenApiReader.TestHookup;
  173. begin
  174. AssertNotNull('Have reader',FReader);
  175. end;
  176. procedure TTestOpenApiReaderLarge.TestTitle;
  177. const
  178. JSON =
  179. ' {' + sLineBreak+
  180. ' "openapi": "3.0.0",' + sLineBreak+
  181. ' "info": {' + sLineBreak+
  182. ' "version": "1.0.0",' + sLineBreak+
  183. ' "title": "Sample API",' + sLineBreak+
  184. ' "description": "A sample API to illustrate OpenAPI concepts"' + sLineBreak+
  185. ' }' + sLineBreak+
  186. ' }';
  187. begin
  188. LoadJSON(JSON);
  189. AssertEquals('OpenApi','3.0.0',OpenAPI.OpenApi);
  190. AssertEquals('OpenAPI.Info.Version','1.0.0',OpenAPI.Info.Version);
  191. AssertEquals('OpenAPI.Info.title','Sample API',OpenAPI.Info.Title);
  192. AssertEquals('OpenAPI.Info.description','A sample API to illustrate OpenAPI concepts',OpenAPI.Info.Description);
  193. end;
  194. procedure TTestOpenApiReaderLarge.TestLarge;
  195. begin
  196. LoadJSONFile('openapi-all.json');
  197. end;
  198. procedure TTestOpenApiReaderOpenAPI.TestOpenAPI;
  199. begin
  200. TestRead('{ "openapi" : "123" }');
  201. AssertEquals('OpenAPI.openapi','123',OpenAPI.openapi);
  202. end;
  203. procedure TTestOpenApiReaderOpenAPI.TestJSONSchemaDialect;
  204. begin
  205. TestRead('{ "jsonSchemaDialect" : "123" }');
  206. AssertEquals('OpenAPI.jsonSchemaDialect','123',OpenAPI.jsonSchemaDialect);
  207. end;
  208. procedure TTestOpenApiReaderInfo.TestVersion;
  209. begin
  210. TestRead('{ "info" : { "version" : "123" } }');
  211. AssertNotNull('OpenAPI.info',OpenAPI.info);
  212. AssertEquals('OpenAPI.info.version','123',OpenAPI.info.version);
  213. end;
  214. procedure TTestOpenApiReaderInfo.TestTitle;
  215. begin
  216. TestRead('{ "info" : { "title" : "123" } }');
  217. AssertNotNull('OpenAPI.info',OpenAPI.info);
  218. AssertEquals('OpenAPI.info.title','123',OpenAPI.info.title);
  219. end;
  220. procedure TTestOpenApiReaderInfo.TestSummary;
  221. begin
  222. TestRead('{ "info" : { "summary" : "123" } }');
  223. AssertNotNull('OpenAPI.info',OpenAPI.info);
  224. AssertEquals('OpenAPI.info.summary','123',OpenAPI.info.summary);
  225. end;
  226. procedure TTestOpenApiReaderInfo.TestDescription;
  227. begin
  228. TestRead('{ "info" : { "description" : "123" } }');
  229. AssertNotNull('OpenAPI.info',OpenAPI.info);
  230. AssertEquals('OpenAPI.info.description','123',OpenAPI.info.description);
  231. end;
  232. procedure TTestOpenApiReaderInfo.TestTermsOfService;
  233. begin
  234. TestRead('{ "info" : { "termsOfService" : "123" } }');
  235. AssertNotNull('OpenAPI.info',OpenAPI.info);
  236. AssertEquals('OpenAPI.info.termsOfService','123',OpenAPI.info.termsOfService);
  237. end;
  238. procedure TTestOpenApiReaderInfo.TestContactEmail;
  239. begin
  240. TestRead('{ "info" : { "contact" : { "email" : "123" } } }');
  241. AssertNotNull('OpenAPI.info',OpenAPI.info);
  242. AssertNotNull('OpenAPI.info.contact',OpenAPI.info.contact);
  243. AssertEquals('OpenAPI.info.contact.email','123',OpenAPI.info.contact.email);
  244. end;
  245. procedure TTestOpenApiReaderInfo.TestContactName;
  246. begin
  247. TestRead('{ "info" : { "contact" : { "name" : "123" } } }');
  248. AssertNotNull('OpenAPI.info',OpenAPI.info);
  249. AssertNotNull('OpenAPI.info.contact',OpenAPI.info.contact);
  250. AssertEquals('OpenAPI.info.contact.name','123',OpenAPI.info.contact.name);
  251. end;
  252. procedure TTestOpenApiReaderInfo.TestContactURL;
  253. begin
  254. TestRead('{ "info" : { "contact" : { "url" : "123" } } }');
  255. AssertNotNull('OpenAPI.info',OpenAPI.info);
  256. AssertNotNull('OpenAPI.info.contact',OpenAPI.info.contact);
  257. AssertEquals('OpenAPI.info.contact.url','123',OpenAPI.info.contact.url);
  258. end;
  259. procedure TTestOpenApiReaderInfo.TestLicenseUrl;
  260. begin
  261. TestRead('{ "info" : { "license" : { "url" : "123" } } }');
  262. AssertNotNull('OpenAPI.info',OpenAPI.info);
  263. AssertNotNull('OpenAPI.info.license',OpenAPI.info.license);
  264. AssertEquals('OpenAPI.info.license.url','123',OpenAPI.info.license.url);
  265. end;
  266. procedure TTestOpenApiReaderInfo.TestLicenseIdentifier;
  267. begin
  268. TestRead('{ "info" : { "license" : { "identifier" : "123" } } }');
  269. AssertNotNull('OpenAPI.info',OpenAPI.info);
  270. AssertNotNull('OpenAPI.info.license',OpenAPI.info.license);
  271. AssertEquals('OpenAPI.info.license.identifier','123',OpenAPI.info.license.identifier);
  272. end;
  273. procedure TTestOpenApiReaderInfo.TestLicenseName;
  274. begin
  275. TestRead('{ "info" : { "license" : { "name" : "123" } } }');
  276. AssertNotNull('OpenAPI.info',OpenAPI.info);
  277. AssertNotNull('OpenAPI.info.license',OpenAPI.info.license);
  278. AssertEquals('OpenAPI.info.license.name','123',OpenAPI.info.license.name);
  279. end;
  280. procedure TTestOpenApiReaderTags.TestName;
  281. begin
  282. TestRead('{ "tags" : [ { "name" : "123" } ] }');
  283. end;
  284. procedure TTestOpenApiReaderTags.TestDescription;
  285. begin
  286. TestRead('{ "tags" : [ { "description" : "123" } ] }');
  287. end;
  288. procedure TTestOpenApiReaderTags.TestExternalDocs;
  289. begin
  290. TestRead('{ "tags" : [ { "externalDocs" : { "url" :"123" } } ] }');
  291. end;
  292. procedure TTestOpenApiReaderTags.Test2Tags;
  293. begin
  294. TestRead('{ "tags" : [ { "name" : "123" }, { "name" : "456" } ] }');
  295. end;
  296. procedure TTestOpenApiReaderExternalDocs.TestUrl;
  297. begin
  298. TestRead('{ "externalDocs" : { "url" :"123" } }');
  299. AssertNotNull('OpenAPI.externalDocs',OpenAPI.externalDocs);
  300. AssertEquals('OpenAPI.externalDocs.url','123',OpenAPI.externalDocs.url);
  301. end;
  302. procedure TTestOpenApiReaderExternalDocs.TestDescription;
  303. begin
  304. TestRead('{ "externalDocs" : { "description" :"123" } }');
  305. AssertNotNull('OpenAPI.externalDocs',OpenAPI.externalDocs);
  306. AssertEquals('OpenAPI.externalDocs.description','123',OpenAPI.externalDocs.description);
  307. end;
  308. procedure TTestOpenApiReaderServers.TestUrl;
  309. begin
  310. TestRead('{ "servers" : [ { "url" :"123" } ] }');
  311. end;
  312. procedure TTestOpenApiReaderServers.TestDescription;
  313. begin
  314. TestRead('{ "servers" : [ { "description" :"123" } ] }');
  315. end;
  316. procedure TTestOpenApiReaderServers.TestVariablesDefault;
  317. begin
  318. TestRead('{ "servers" : [ { "variables" : { "user": { "default": "123" } } } ] }');
  319. end;
  320. procedure TTestOpenApiReaderServers.TestVariablesDescription;
  321. begin
  322. TestRead('{ "servers" : [ { "variables" : { "user": { "description": "123" } } } ] }');
  323. end;
  324. procedure TTestOpenApiReaderServers.TestVariablesEnum;
  325. begin
  326. TestRead('{ "servers" : [ { "variables" : { "user": { "enum": [ "123", "456" ] } } } ] }');
  327. end;
  328. procedure TTestOpenApiReaderServers.Test2Url;
  329. begin
  330. TestRead('{ "servers" : [ { "url" :"123" }, { "url" :"456" } ] }');
  331. end;
  332. procedure TTestOpenApiReaderPaths.TestEmpty;
  333. begin
  334. TestRead('{ "paths" : { "api" : {} } }');
  335. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  336. AssertNotNull('OpenAPI.paths.api',OpenAPI.paths['api']);
  337. end;
  338. procedure TTestOpenApiReaderPaths.TestRef;
  339. begin
  340. TestRead('{ "paths" : { "api" : { "$ref": "abc"} } }');
  341. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  342. AssertNotNull('OpenAPI.paths.api',OpenAPI.paths['api']);
  343. AssertEquals('OpenAPI.paths.api.$ref','abc',OpenAPI.Paths['api'].ref);
  344. end;
  345. procedure TTestOpenApiReaderPaths.TestSummary;
  346. begin
  347. TestRead('{ "paths" : { "api" : { "summary": "abc"} } }');
  348. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  349. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  350. AssertEquals('OpenAPI.paths.api.summary','abc',OpenAPI.Paths['api'].summary);
  351. end;
  352. procedure TTestOpenApiReaderPaths.TestDescription;
  353. begin
  354. TestRead('{ "paths" : { "api" : { "description": "abc"} } }');
  355. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  356. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  357. AssertEquals('OpenAPI.paths.api.description','abc',OpenAPI.Paths['api'].description);
  358. end;
  359. procedure TTestOpenApiReaderPaths.TestGetEmpty;
  360. begin
  361. TestRead('{ "paths" : { "api" : { "get": { } } } }');
  362. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  363. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  364. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  365. end;
  366. procedure TTestOpenApiReaderPaths.TestGetSummary;
  367. begin
  368. TestRead('{ "paths" : { "api" : { "get": { "summary" : "123" } } } }');
  369. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  370. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  371. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  372. AssertEquals('OpenAPI.paths.api.get.summary','123',OpenAPI.Paths['api'].get.summary);
  373. end;
  374. procedure TTestOpenApiReaderPaths.TestGetDescription;
  375. begin
  376. TestRead('{ "paths" : { "api" : { "get": { "description" : "123" } } } }');
  377. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  378. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  379. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  380. AssertEquals('OpenAPI.paths.api.get.description','123',OpenAPI.Paths['api'].get.description);
  381. end;
  382. procedure TTestOpenApiReaderPaths.TestGetOperationId;
  383. begin
  384. TestRead('{ "paths" : { "api" : { "get": { "operationId" : "123" } } } }');
  385. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  386. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  387. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  388. AssertEquals('OpenAPI.paths.api.get.operationId','123',OpenAPI.Paths['api'].get.operationId);
  389. end;
  390. procedure TTestOpenApiReaderPaths.TestGetDeprecated;
  391. begin
  392. TestRead('{ "paths" : { "api" : { "get": { "deprecated" : true } } } }');
  393. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  394. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  395. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  396. AssertEquals('OpenAPI.paths.api.get.deprecated',True,OpenAPI.Paths['api'].get.deprecated);
  397. end;
  398. procedure TTestOpenApiReaderPaths.TestGetExternalDocsEmpty;
  399. begin
  400. TestRead('{ "paths" : { "api" : { "get": { "externalDocs" : { } } } } }');
  401. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  402. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  403. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  404. AssertNotNull('OpenAPI.paths.api.get.externalDocs',OpenAPI.Paths['api'].get.externalDocs);
  405. end;
  406. procedure TTestOpenApiReaderPaths.TestGetExternalDocsURL;
  407. begin
  408. TestRead('{ "paths" : { "api" : { "get": { "externalDocs" : { "url" : "123" } } } } }');
  409. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  410. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  411. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  412. AssertNotNull('OpenAPI.paths.api.get.externalDocs',OpenAPI.Paths['api'].get.externalDocs);
  413. AssertEquals('OpenAPI.paths.api.get.externalDocs.url','123',OpenAPI.Paths['api'].get.externalDocs.url);
  414. end;
  415. procedure TTestOpenApiReaderPaths.TestGetServers;
  416. begin
  417. TestRead('{ "paths" : { "api" : { "servers": [ {} ] } } }');
  418. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  419. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  420. AssertNotNull('OpenAPI.paths.api.servers[0]',OpenAPI.Paths['api'].servers[0]);
  421. end;
  422. procedure TTestOpenApiReaderPathRequestBody.TestEmpty;
  423. begin
  424. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { } } } } }');
  425. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  426. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  427. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  428. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  429. end;
  430. procedure TTestOpenApiReaderPathRequestBody.TestDescription;
  431. begin
  432. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "description" : "123" } } } } }');
  433. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  434. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  435. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  436. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  437. AssertEquals('OpenAPI.paths.api.get.requestBody.description','123',OpenAPI.Paths['api'].get.requestBody.description);
  438. end;
  439. procedure TTestOpenApiReaderPathRequestBody.TestRequired;
  440. begin
  441. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "required" : true} } } } }');
  442. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  443. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  444. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  445. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  446. AssertEquals('OpenAPI.paths.api.get.requestBody.required',True,OpenAPI.Paths['api'].get.requestBody.required);
  447. end;
  448. procedure TTestOpenApiReaderPathRequestBody.TestContent;
  449. begin
  450. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { } } } } } } }');
  451. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  452. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  453. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  454. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  455. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  456. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  457. end;
  458. procedure TTestOpenApiReaderPathRequestBody.TestContentSchema;
  459. begin
  460. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "schema" : true } } } } } } }');
  461. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  462. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  463. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  464. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  465. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  466. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  467. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.schema',OpenAPI.Paths['api'].get.requestBody.content['123'].schema);
  468. end;
  469. procedure TTestOpenApiReaderPathRequestBody.TestContentExample;
  470. begin
  471. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "example" : { } } } } } } } }');
  472. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  473. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  474. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  475. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  476. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  477. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  478. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.example',OpenAPI.Paths['api'].get.requestBody.content['123'].example);
  479. end;
  480. procedure TTestOpenApiReaderPathRequestBody.TestContentExamples;
  481. begin
  482. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "examples" : { "abc" : { "summary": "x"} } } } } } } } }');
  483. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  484. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  485. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  486. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  487. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  488. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  489. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.examples',OpenAPI.Paths['api'].get.requestBody.content['123'].examples);
  490. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.examples.abc',OpenAPI.Paths['api'].get.requestBody.content['123'].examples['abc']);
  491. AssertEquals('OpenAPI.paths.api.get.requestBody.content.123.examples.abc.summary','x',OpenAPI.Paths['api'].get.requestBody.content['123'].examples['abc'].summary);
  492. end;
  493. procedure TTestOpenApiReaderPathRequestBody.TestContentEncodingContentType;
  494. begin
  495. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "encoding" : { "abc" : { "contentType": "def"} } } } } } } } }');
  496. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  497. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  498. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  499. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  500. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  501. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.[123]',OpenAPI.Paths['api'].get.requestBody.content['123']);
  502. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding);
  503. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc']);
  504. AssertEquals('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.contentType','def',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].contentType);
  505. end;
  506. procedure TTestOpenApiReaderPathRequestBody.TestContentEncodingExplode;
  507. begin
  508. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "encoding" : { "abc" : { "explode": true} } } } } } } } }');
  509. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  510. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  511. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  512. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  513. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  514. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  515. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding);
  516. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc']);
  517. AssertEquals('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.explode',True,OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].explode);
  518. end;
  519. procedure TTestOpenApiReaderPathRequestBody.TestContentEncodingStyle;
  520. begin
  521. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "encoding" : { "abc" : { "style": "def"} } } } } } } } }');
  522. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  523. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  524. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  525. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  526. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  527. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  528. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding);
  529. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc']);
  530. AssertEquals('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.style','def',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].style);
  531. end;
  532. procedure TTestOpenApiReaderPathRequestBody.TestContentEncodingAllowReserved;
  533. begin
  534. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "encoding" : { "abc" : { "allowReserved": true} } } } } } } } }');
  535. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  536. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  537. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  538. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  539. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  540. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  541. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding);
  542. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc']);
  543. AssertEquals('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.allowReserved',True,OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].allowReserved);
  544. end;
  545. procedure TTestOpenApiReaderPathRequestBody.TestContentEncodingHeaders;
  546. begin
  547. TestRead('{ "paths" : { "api" : { "get": { "requestBody" : { "content" : { "123" : { "encoding" : { "abc" : { "headers": { "def" : { "explode" : true } } } } } } } } } } }');
  548. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  549. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  550. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  551. AssertNotNull('OpenAPI.paths.api.get.requestBody',OpenAPI.Paths['api'].get.requestBody);
  552. AssertNotNull('OpenAPI.paths.api.get.requestBody.content',OpenAPI.Paths['api'].get.requestBody.content);
  553. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123',OpenAPI.Paths['api'].get.requestBody.content['123']);
  554. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding);
  555. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc']);
  556. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.headers',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].headers);
  557. AssertNotNull('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.headers.def',OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].headers['def']);
  558. AssertEquals('OpenAPI.paths.api.get.requestBody.content.123.encoding.abc.headers.def.explode',True,OpenAPI.Paths['api'].get.requestBody.content['123'].encoding['abc'].headers['def'].explode);
  559. end;
  560. procedure TTestOpenApiReaderPathParameters.TestGetParametersEmpty;
  561. begin
  562. TestRead('{ "paths" : { "api" : { "parameters": [ {} ] } } }');
  563. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  564. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  565. AssertNotNull('OpenAPI.paths.api.parameters[0]',OpenAPI.Paths['api'].parameters[0]);
  566. end;
  567. procedure TTestOpenApiReaderPathResponses.TestEmpty;
  568. begin
  569. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : {} } } } } }');
  570. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  571. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  572. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  573. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  574. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  575. end;
  576. procedure TTestOpenApiReaderPathResponses.TestHeaders;
  577. begin
  578. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "headers" : { "x-content" : { } } } } } } } }');
  579. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  580. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  581. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  582. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  583. AssertNotNull('OpenAPI.paths.api.get.responses[default]',OpenAPI.Paths['api'].get.responses['default']);
  584. AssertNotNull('OpenAPI.paths.api.get.responses.default.headers',OpenAPI.Paths['api'].get.responses['default'].headers);
  585. AssertNotNull('OpenAPI.paths.api.get.responses.default.headers.x-content',OpenAPI.Paths['api'].get.responses['default'].headers['x-content']);
  586. end;
  587. procedure TTestOpenApiReaderPathResponses.TestDescription;
  588. begin
  589. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "description" : "abc" } } } } } }');
  590. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  591. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  592. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  593. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  594. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  595. AssertEquals('OpenAPI.paths.api.get.responses.default.description','abc',OpenAPI.Paths['api'].get.responses['default'].description);
  596. end;
  597. procedure TTestOpenApiReaderPathResponses.TestContentEmpty;
  598. begin
  599. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "content" : { "application/json" : { } } } } } } } }');
  600. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  601. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  602. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  603. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  604. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  605. AssertNotNull('OpenAPI.paths.api.get.responses.default.content',OpenAPI.Paths['api'].get.responses['default'].content);
  606. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json']);
  607. end;
  608. procedure TTestOpenApiReaderPathResponses.TestContentSchema;
  609. begin
  610. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "content" : { "application/json" : { "schema" : true } } } } } } } }');
  611. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  612. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  613. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  614. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  615. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  616. AssertNotNull('OpenAPI.paths.api.get.responses.default.content',OpenAPI.Paths['api'].get.responses['default'].content);
  617. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json']);
  618. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.schema',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].schema);
  619. end;
  620. procedure TTestOpenApiReaderPathResponses.TestContentExample;
  621. begin
  622. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "content" : { "application/json" : { "example" : {} } } } } } } } }');
  623. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  624. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  625. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  626. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  627. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  628. AssertNotNull('OpenAPI.paths.api.get.responses.default.content',OpenAPI.Paths['api'].get.responses['default'].content);
  629. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json']);
  630. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.example',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].example);
  631. end;
  632. procedure TTestOpenApiReaderPathResponses.TestContentExamples;
  633. begin
  634. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "content" : { "application/json" : { "examples" : { "abc" : { "summary": "x"} } } } } } } } } }');
  635. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  636. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  637. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  638. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  639. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  640. AssertNotNull('OpenAPI.paths.api.get.responses.default.content',OpenAPI.Paths['api'].get.responses['default'].content);
  641. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json']);
  642. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.examples',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].examples);
  643. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.examples.abc',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].examples['abc']);
  644. AssertEquals('OpenAPI.paths.api.get.responses.default.content.application/json.examples.abc.summary','x',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].examples['abc'].summary);
  645. end;
  646. procedure TTestOpenApiReaderPathResponses.TestContentEncodingEmpty;
  647. begin
  648. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "content" : { "application/json" : { "encoding" : { "abc" : { } } } } } } } } } }');
  649. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  650. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  651. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  652. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  653. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  654. AssertNotNull('OpenAPI.paths.api.get.responses.default.content',OpenAPI.Paths['api'].get.responses['default'].content);
  655. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json']);
  656. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.encoding',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].encoding);
  657. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.encoding.abc',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].encoding['abc']);
  658. end;
  659. procedure TTestOpenApiReaderPathResponses.TestContentEncodingContentType;
  660. begin
  661. TestRead('{ "paths" : { "api" : { "get" : { "responses": { "default" : { "content" : { "application/json" : { "encoding" : { "abc" : { "contentType" : "application/json" } } } } } } } } } }');
  662. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  663. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  664. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  665. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  666. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  667. AssertNotNull('OpenAPI.paths.api.get.responses.default.content',OpenAPI.Paths['api'].get.responses['default'].content);
  668. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json']);
  669. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.encoding',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].encoding);
  670. AssertNotNull('OpenAPI.paths.api.get.responses.default.content.application/json.encoding.abc',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].encoding['abc']);
  671. AssertEquals('OpenAPI.paths.api.get.responses.default.content.application/json.encoding.abc.contentType','application/json',OpenAPI.Paths['api'].get.responses['default'].content['application/json'].encoding['abc'].contentType);
  672. end;
  673. procedure TTestOpenApiReaderPathSecurity.TestEmpty;
  674. begin
  675. TestRead('{ "paths" : { "api" : { "get" : { "security" : [ {} ] } } } }');
  676. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  677. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  678. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  679. AssertNotNull('OpenAPI.paths.api.get.security[0]',OpenAPI.Paths['api'].get.security[0]);
  680. end;
  681. procedure TTestOpenApiReaderPathSecurity.TestAPIKey;
  682. begin
  683. TestRead('{ "paths" : { "api" : { "get" : { "security" : [ { "api_key" : ["akey"] } ] } } } }');
  684. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  685. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  686. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  687. AssertNotNull('OpenAPI.paths.api.get.security[0]',OpenAPI.Paths['api'].get.security[0]);
  688. AssertEquals('OpenAPI.paths.api.get.security[0].api_key[0]','akey',OpenAPI.Paths['api'].get.security[0].Requirements['api_key'].Strings[0]);
  689. end;
  690. procedure TTestOpenApiReaderPathResponsesLinks.TestEmpty;
  691. begin
  692. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { } } } } } } } }');
  693. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  694. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  695. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  696. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  697. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  698. AssertNotNull('OpenAPI.paths.api.get.responses.default.links',OpenAPI.Paths['api'].get.responses['default'].links);
  699. AssertNotNull('OpenAPI.paths.api.get.responses.default.links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  700. end;
  701. procedure TTestOpenApiReaderPathResponsesLinks.TestOperatonRef;
  702. begin
  703. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { "operationRef" : "123" } } } } } } } }');
  704. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  705. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  706. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  707. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  708. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  709. AssertNotNull('OpenAPI.paths.api.get.responses.default.links',OpenAPI.Paths['api'].get.responses['default'].links);
  710. AssertNotNull('OpenAPI.paths.api.get.responses.default.links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  711. AssertEquals('OpenAPI.paths.api.get.responses.default.links.abc.operationRef','123',OpenAPI.Paths['api'].get.responses['default'].links['abc'].operationRef);
  712. end;
  713. procedure TTestOpenApiReaderPathResponsesLinks.TestOperatonId;
  714. begin
  715. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { "operationId" : "123" } } } } } } } }');
  716. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  717. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  718. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  719. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  720. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  721. AssertNotNull('OpenAPI.paths.api.get.responses.default.links',OpenAPI.Paths['api'].get.responses['default'].links);
  722. AssertNotNull('OpenAPI.paths.api.get.responses.default.links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  723. AssertEquals('OpenAPI.paths.api.get.responses.default.links.abc.operationId','123',OpenAPI.Paths['api'].get.responses['default'].links['abc'].operationId);
  724. end;
  725. procedure TTestOpenApiReaderPathResponsesLinks.TestParameters;
  726. begin
  727. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { "parameters" : { "x" : "y" } } } } } } } } }');
  728. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  729. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  730. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  731. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  732. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  733. AssertNotNull('OpenAPI.paths.api.get.responses.default.links',OpenAPI.Paths['api'].get.responses['default'].links);
  734. AssertNotNull('OpenAPI.paths.api.get.responses.default.links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  735. AssertNotNull('OpenAPI.paths.api.get.responses.default.links.abc.parameters',OpenAPI.Paths['api'].get.responses['default'].links['abc'].parameters);
  736. AssertEquals('OpenAPI.paths.api.get.responses.default.links.abc.parameters.x','y',OpenAPI.Paths['api'].get.responses['default'].links['abc'].parameters['x'].AsString);
  737. end;
  738. procedure TTestOpenApiReaderPathResponsesLinks.TestRequestBody;
  739. begin
  740. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { "requestBody" : {} } } } } } } } }');
  741. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  742. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  743. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  744. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  745. AssertNotNull('OpenAPI.paths.api.get.responses.default',OpenAPI.Paths['api'].get.responses['default']);
  746. AssertNotNull('OpenAPI.paths.api.get.responses[default].links',OpenAPI.Paths['api'].get.responses['default'].links);
  747. AssertNotNull('OpenAPI.paths.api.get.responses[default].links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  748. AssertNotNull('OpenAPI.paths.api.get.responses[default].links.abc.requestBody',OpenAPI.Paths['api'].get.responses['default'].links['abc'].requestBody);
  749. end;
  750. procedure TTestOpenApiReaderPathResponsesLinks.TestDescription;
  751. begin
  752. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { "description" : "123" } } } } } } } }');
  753. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  754. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  755. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  756. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  757. AssertNotNull('OpenAPI.paths.api.get.responses[default]',OpenAPI.Paths['api'].get.responses['default']);
  758. AssertNotNull('OpenAPI.paths.api.get.responses[default].links',OpenAPI.Paths['api'].get.responses['default'].links);
  759. AssertNotNull('OpenAPI.paths.api.get.responses[default].links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  760. AssertEquals('OpenAPI.paths.api.get.responses[default].links.abc.description','123',OpenAPI.Paths['api'].get.responses['default'].links['abc'].description);
  761. end;
  762. procedure TTestOpenApiReaderPathResponsesLinks.TestServer;
  763. begin
  764. TestRead('{ "paths" : { "api" : { "get" : { "responses" : { "default" : { "links": { "abc" : { "server" : { "url" : "123" } } } } } } } } }');
  765. AssertNotNull('OpenAPI.paths',OpenAPI.paths);
  766. AssertNotNull('OpenAPI.paths.api',OpenAPI.Paths['api']);
  767. AssertNotNull('OpenAPI.paths.api.get',OpenAPI.Paths['api'].get);
  768. AssertNotNull('OpenAPI.paths.api.get.responses',OpenAPI.Paths['api'].get.responses);
  769. AssertNotNull('OpenAPI.paths.api.get.responses[default]',OpenAPI.Paths['api'].get.responses['default']);
  770. AssertNotNull('OpenAPI.paths.api.get.responses[default].links',OpenAPI.Paths['api'].get.responses['default'].links);
  771. AssertNotNull('OpenAPI.paths.api.get.responses[default].links.abc',OpenAPI.Paths['api'].get.responses['default'].links['abc']);
  772. AssertNotNull('OpenAPI.paths.api.get.responses[default].links.abc.server',OpenAPI.Paths['api'].get.responses['default'].links['abc'].server);
  773. AssertEquals('OpenAPI.paths.api.get.responses[default].links.abc.server.url','123',OpenAPI.Paths['api'].get.responses['default'].links['abc'].server.url);
  774. end;
  775. procedure TTestOpenApiReaderWebHooks.TestEmpty;
  776. begin
  777. TestRead('{ "webhooks" : { "newitem" : { } } }');
  778. AssertNotNull('OpenAPI.webhooks',OpenAPI.webhooks);
  779. AssertNotNull('OpenAPI.webhooks.newitem',OpenAPI.webhooks['newitem']);
  780. end;
  781. procedure TTestOpenApiReaderWebHooks.TestSummary;
  782. begin
  783. TestRead('{ "webhooks" : { "newitem" : { "summary" : "abc" } } }');
  784. AssertNotNull('OpenAPI.webhooks',OpenAPI.webhooks);
  785. AssertNotNull('OpenAPI.webhooks.newitem',OpenAPI.webhooks['newitem']);
  786. AssertEquals('OpenAPI.webhooks.newitem.summary','abc',OpenAPI.webhooks['newitem'].summary);
  787. end;
  788. procedure TTestOpenApiReaderComponents.TestSchemaEmpty;
  789. begin
  790. TestRead('{ "components" : { "schemas" : { "abc" : true } } }');
  791. AssertNotNull('OpenAPI.components',OpenAPI.components);
  792. AssertNotNull('OpenAPI.components.schemas',OpenAPI.components.schemas);
  793. AssertNotNUll('OpenAPI.components.schemas.abc',OpenAPI.components.schemas['abc']);
  794. end;
  795. procedure TTestOpenApiReaderComponents.TestSchemaContentEncoding;
  796. begin
  797. TestRead('{ "components" : { "schemas" : { "abc" : { "contentEncoding" : "utf8" } } } }');
  798. AssertNotNull('OpenAPI.components',OpenAPI.components);
  799. AssertNotNull('OpenAPI.components.schemas',OpenAPI.components.schemas);
  800. AssertNotNull('OpenAPI.components.schemas.abc',OpenAPI.components.schemas['abc']);
  801. AssertEquals('OpenAPI.components.schemas.abc.contentEncoding','utf8',OpenAPI.components.schemas['abc'].Validations.contentEncoding);
  802. end;
  803. { TTestOpenApiReaderOAuth2Scopes }
  804. procedure TTestOpenApiReaderOAuth2Scopes.TestOAuth2ScopesAsObject;
  805. begin
  806. TestRead('{ "components" : { "securitySchemes" : { "oauth2" : { "type" : "oauth2", "flows" : { "authorizationCode" : { "authorizationUrl" : "https://example.com/auth", "tokenUrl" : "https://example.com/token", "scopes" : { "read:user" : "Read user data", "write:user" : "Write user data" } } } } } } }');
  807. AssertNotNull('OpenAPI.components',OpenAPI.components);
  808. AssertNotNull('OpenAPI.components.securitySchemes',OpenAPI.components.securitySchemes);
  809. AssertNotNull('OpenAPI.components.securitySchemes.oauth2',OpenAPI.components.securitySchemes['oauth2']);
  810. AssertNotNull('OpenAPI.components.securitySchemes.oauth2.flows',OpenAPI.components.securitySchemes['oauth2'].flows);
  811. AssertNotNull('OpenAPI.components.securitySchemes.oauth2.flows.authorizationCode',OpenAPI.components.securitySchemes['oauth2'].flows.ClientAuthorizationCode);
  812. AssertEquals('scopes count', 2, OpenAPI.components.securitySchemes['oauth2'].flows.ClientAuthorizationCode.Scopes.Count);
  813. AssertEquals('scope read:user value', 'Read user data', OpenAPI.components.securitySchemes['oauth2'].flows.ClientAuthorizationCode.Scopes.Values['read:user']);
  814. AssertEquals('scope write:user value', 'Write user data', OpenAPI.components.securitySchemes['oauth2'].flows.ClientAuthorizationCode.Scopes.Values['write:user']);
  815. end;
  816. procedure TTestOpenApiReaderOAuth2Scopes.TestOAuth2ScopesEmpty;
  817. begin
  818. TestRead('{ "components" : { "securitySchemes" : { "oauth2" : { "type" : "oauth2", "flows" : { "authorizationCode" : { "authorizationUrl" : "https://example.com/auth", "tokenUrl" : "https://example.com/token", "scopes" : { } } } } } } }');
  819. AssertNotNull('OpenAPI.components',OpenAPI.components);
  820. AssertNotNull('OpenAPI.components.securitySchemes',OpenAPI.components.securitySchemes);
  821. AssertNotNull('OpenAPI.components.securitySchemes.oauth2',OpenAPI.components.securitySchemes['oauth2']);
  822. AssertEquals('scopes count', 0, OpenAPI.components.securitySchemes['oauth2'].flows.ClientAuthorizationCode.Scopes.Count);
  823. end;
  824. procedure TTestOpenApiReaderSecurity.TestOne;
  825. begin
  826. TestRead('{ "security" : [ { "abc" : [] } ] }');
  827. end;
  828. initialization
  829. registertests('Reader',[
  830. TTestOpenApiReaderLarge,
  831. TTestopenApiReaderOpenAPI,
  832. TTestopenApiReaderInfo,
  833. TTestopenApiReaderTags,
  834. TTestOpenApiReaderExternalDocs,
  835. TTestOpenApiReaderServers,
  836. TTestOpenApiReaderPaths,
  837. TTestOpenApiReaderPathRequestBody,
  838. TTestOpenApiReaderPathParameters,
  839. TTestOpenApiReaderPathResponses,
  840. TTestOpenApiReaderPathSecurity,
  841. TTestOpenApiReaderPathResponsesLinks,
  842. TTestOpenApiReaderWebHooks,
  843. TTestOpenApiReaderComponents,
  844. TTestOpenApiReaderOAuth2Scopes,
  845. TTestOpenApiReaderSecurity
  846. ]);
  847. end.