utOpenApiReader.pp 45 KB

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