@voxgig/sdkgen 0.35.2 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (498) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/cmp/Main.js +0 -12
  3. package/dist/cmp/Main.js.map +1 -1
  4. package/dist/cmp/Readme.js +5 -5
  5. package/dist/cmp/Readme.js.map +1 -1
  6. package/dist/cmp/ReadmeEntity.js +74 -24
  7. package/dist/cmp/ReadmeEntity.js.map +1 -1
  8. package/dist/cmp/ReadmeExplanation.d.ts +2 -0
  9. package/dist/cmp/ReadmeExplanation.js +308 -0
  10. package/dist/cmp/ReadmeExplanation.js.map +1 -0
  11. package/dist/cmp/ReadmeHowto.d.ts +2 -0
  12. package/dist/cmp/ReadmeHowto.js +18 -0
  13. package/dist/cmp/ReadmeHowto.js.map +1 -0
  14. package/dist/cmp/ReadmeIntro.js +8 -23
  15. package/dist/cmp/ReadmeIntro.js.map +1 -1
  16. package/dist/cmp/ReadmeModel.js +55 -91
  17. package/dist/cmp/ReadmeModel.js.map +1 -1
  18. package/dist/cmp/ReadmeOptions.js +35 -11
  19. package/dist/cmp/ReadmeOptions.js.map +1 -1
  20. package/dist/cmp/ReadmeQuick.js +4 -1
  21. package/dist/cmp/ReadmeQuick.js.map +1 -1
  22. package/dist/cmp/ReadmeRef.js +1042 -40
  23. package/dist/cmp/ReadmeRef.js.map +1 -1
  24. package/dist/cmp/ReadmeTop.d.ts +2 -0
  25. package/dist/cmp/ReadmeTop.js +171 -0
  26. package/dist/cmp/ReadmeTop.js.map +1 -0
  27. package/dist/sdkgen.d.ts +7 -1
  28. package/dist/sdkgen.js +13 -1
  29. package/dist/sdkgen.js.map +1 -1
  30. package/dist/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +2 -2
  32. package/project/.sdk/model/feature/feature-index.jsonic +5 -0
  33. package/project/.sdk/model/feature/log.jsonic +5 -1
  34. package/project/.sdk/model/feature/test.jsonic +1 -1
  35. package/project/.sdk/model/target/lua.jsonic +23 -0
  36. package/project/.sdk/model/target/php.jsonic +22 -0
  37. package/project/.sdk/model/target/py.jsonic +23 -0
  38. package/project/.sdk/model/target/rb.jsonic +23 -0
  39. package/project/.sdk/src/cmp/go/Config_go.ts +6 -2
  40. package/project/.sdk/src/cmp/go/Main_go.ts +2 -6
  41. package/project/.sdk/src/cmp/go/ReadmeExplanation_go.ts +42 -0
  42. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +112 -0
  43. package/project/.sdk/src/cmp/go/ReadmeInstall_go.ts +29 -0
  44. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +129 -0
  45. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +163 -0
  46. package/project/.sdk/src/cmp/go/ReadmeTopHowto_go.ts +24 -0
  47. package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +67 -0
  48. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +40 -0
  49. package/project/.sdk/src/cmp/go/TestDirect_go.ts +46 -2
  50. package/project/.sdk/src/cmp/go/TestEntity_go.ts +360 -160
  51. package/project/.sdk/src/cmp/go/Test_go.ts +24 -1
  52. package/project/.sdk/src/cmp/js/EntityBase_js.ts +34 -0
  53. package/project/.sdk/src/cmp/js/Main_js.ts +10 -0
  54. package/project/.sdk/src/cmp/js/ReadmeExplanation_js.ts +33 -0
  55. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +123 -0
  56. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +152 -0
  57. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +1 -1
  58. package/project/.sdk/src/cmp/js/ReadmeTopHowto_js.ts +25 -0
  59. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +65 -0
  60. package/project/.sdk/src/cmp/js/ReadmeTopTest_js.ts +36 -0
  61. package/project/.sdk/src/cmp/js/TestDirect_js.ts +53 -5
  62. package/project/.sdk/src/cmp/js/TestEntity_js.ts +114 -20
  63. package/project/.sdk/src/cmp/js/fragment/Entity.fragment.js +7 -139
  64. package/project/.sdk/src/cmp/js/fragment/EntityBase.fragment.js +149 -0
  65. package/project/.sdk/src/cmp/js/fragment/EntityCreateOp.fragment.js +6 -10
  66. package/project/.sdk/src/cmp/js/fragment/EntityListOp.fragment.js +6 -10
  67. package/project/.sdk/src/cmp/js/fragment/EntityLoadOp.fragment.js +7 -11
  68. package/project/.sdk/src/cmp/js/fragment/EntityRemoveOp.fragment.js +7 -11
  69. package/project/.sdk/src/cmp/js/fragment/EntityUpdateOp.fragment.js +7 -11
  70. package/project/.sdk/src/cmp/js/fragment/Main.fragment.js +2 -0
  71. package/project/.sdk/src/cmp/js/fragment/SdkError.fragment.js +0 -2
  72. package/project/.sdk/src/cmp/lua/Config_lua.ts +116 -0
  73. package/project/.sdk/src/cmp/lua/EntityOperation_lua.ts +44 -0
  74. package/project/.sdk/src/cmp/lua/Entity_lua.ts +62 -0
  75. package/project/.sdk/src/cmp/lua/MainEntity_lua.ts +23 -0
  76. package/project/.sdk/src/cmp/lua/Main_lua.ts +133 -0
  77. package/project/.sdk/src/cmp/lua/Package_lua.ts +80 -0
  78. package/project/.sdk/src/cmp/lua/ReadmeExplanation_lua.ts +42 -0
  79. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +100 -0
  80. package/project/.sdk/src/cmp/lua/ReadmeInstall_lua.ts +26 -0
  81. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +129 -0
  82. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +99 -0
  83. package/project/.sdk/src/cmp/lua/ReadmeTopHowto_lua.ts +24 -0
  84. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +55 -0
  85. package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +38 -0
  86. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +261 -0
  87. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +485 -0
  88. package/project/.sdk/src/cmp/lua/Test_lua.ts +49 -0
  89. package/project/.sdk/src/cmp/lua/fragment/Entity.fragment.lua +147 -0
  90. package/project/.sdk/src/cmp/lua/fragment/EntityCreateOp.fragment.lua +27 -0
  91. package/project/.sdk/src/cmp/lua/fragment/EntityListOp.fragment.lua +24 -0
  92. package/project/.sdk/src/cmp/lua/fragment/EntityLoadOp.fragment.lua +30 -0
  93. package/project/.sdk/src/cmp/lua/fragment/EntityRemoveOp.fragment.lua +30 -0
  94. package/project/.sdk/src/cmp/lua/fragment/EntityUpdateOp.fragment.lua +30 -0
  95. package/project/.sdk/src/cmp/lua/fragment/Main.fragment.lua +256 -0
  96. package/project/.sdk/src/cmp/lua/fragment/SdkError.fragment.lua +26 -0
  97. package/project/.sdk/src/cmp/lua/tsconfig.json +15 -0
  98. package/project/.sdk/src/cmp/lua/utility_lua.ts +84 -0
  99. package/project/.sdk/src/cmp/php/Config_php.ts +111 -0
  100. package/project/.sdk/src/cmp/php/EntityOperation_php.ts +44 -0
  101. package/project/.sdk/src/cmp/php/Entity_php.ts +62 -0
  102. package/project/.sdk/src/cmp/php/MainEntity_php.ts +24 -0
  103. package/project/.sdk/src/cmp/php/Main_php.ts +135 -0
  104. package/project/.sdk/src/cmp/php/Package_php.ts +87 -0
  105. package/project/.sdk/src/cmp/php/ReadmeExplanation_php.ts +42 -0
  106. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +101 -0
  107. package/project/.sdk/src/cmp/php/ReadmeInstall_php.ts +19 -0
  108. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +129 -0
  109. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +100 -0
  110. package/project/.sdk/src/cmp/php/ReadmeTopHowto_php.ts +24 -0
  111. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +56 -0
  112. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +38 -0
  113. package/project/.sdk/src/cmp/php/TestDirect_php.ts +270 -0
  114. package/project/.sdk/src/cmp/php/TestEntity_php.ts +479 -0
  115. package/project/.sdk/src/cmp/php/Test_php.ts +56 -0
  116. package/project/.sdk/src/cmp/php/fragment/Entity.fragment.php +146 -0
  117. package/project/.sdk/src/cmp/php/fragment/EntityCreateOp.fragment.php +26 -0
  118. package/project/.sdk/src/cmp/php/fragment/EntityListOp.fragment.php +23 -0
  119. package/project/.sdk/src/cmp/php/fragment/EntityLoadOp.fragment.php +29 -0
  120. package/project/.sdk/src/cmp/php/fragment/EntityRemoveOp.fragment.php +29 -0
  121. package/project/.sdk/src/cmp/php/fragment/EntityUpdateOp.fragment.php +29 -0
  122. package/project/.sdk/src/cmp/php/fragment/Main.fragment.php +233 -0
  123. package/project/.sdk/src/cmp/php/fragment/SdkError.fragment.php +24 -0
  124. package/project/.sdk/src/cmp/php/tsconfig.json +15 -0
  125. package/project/.sdk/src/cmp/php/utility_php.ts +85 -0
  126. package/project/.sdk/src/cmp/py/Config_py.ts +97 -0
  127. package/project/.sdk/src/cmp/py/EntityOperation_py.ts +44 -0
  128. package/project/.sdk/src/cmp/py/Entity_py.ts +62 -0
  129. package/project/.sdk/src/cmp/py/MainEntity_py.ts +22 -0
  130. package/project/.sdk/src/cmp/py/Main_py.ts +156 -0
  131. package/project/.sdk/src/cmp/py/Package_py.ts +75 -0
  132. package/project/.sdk/src/cmp/py/ReadmeExplanation_py.ts +41 -0
  133. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +98 -0
  134. package/project/.sdk/src/cmp/py/ReadmeInstall_py.ts +25 -0
  135. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +130 -0
  136. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +100 -0
  137. package/project/.sdk/src/cmp/py/ReadmeTopHowto_py.ts +24 -0
  138. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +56 -0
  139. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +38 -0
  140. package/project/.sdk/src/cmp/py/TestDirect_py.ts +248 -0
  141. package/project/.sdk/src/cmp/py/TestEntity_py.ts +477 -0
  142. package/project/.sdk/src/cmp/py/Test_py.ts +55 -0
  143. package/project/.sdk/src/cmp/py/fragment/Entity.fragment.py +112 -0
  144. package/project/.sdk/src/cmp/py/fragment/EntityCreateOp.fragment.py +25 -0
  145. package/project/.sdk/src/cmp/py/fragment/EntityListOp.fragment.py +22 -0
  146. package/project/.sdk/src/cmp/py/fragment/EntityLoadOp.fragment.py +27 -0
  147. package/project/.sdk/src/cmp/py/fragment/EntityRemoveOp.fragment.py +27 -0
  148. package/project/.sdk/src/cmp/py/fragment/EntityUpdateOp.fragment.py +27 -0
  149. package/project/.sdk/src/cmp/py/fragment/Main.fragment.py +222 -0
  150. package/project/.sdk/src/cmp/py/fragment/SdkError.fragment.py +16 -0
  151. package/project/.sdk/src/cmp/py/tsconfig.json +15 -0
  152. package/project/.sdk/src/cmp/py/utility_py.ts +84 -0
  153. package/project/.sdk/src/cmp/rb/Config_rb.ts +105 -0
  154. package/project/.sdk/src/cmp/rb/EntityOperation_rb.ts +44 -0
  155. package/project/.sdk/src/cmp/rb/Entity_rb.ts +62 -0
  156. package/project/.sdk/src/cmp/rb/MainEntity_rb.ts +23 -0
  157. package/project/.sdk/src/cmp/rb/Main_rb.ts +130 -0
  158. package/project/.sdk/src/cmp/rb/Package_rb.ts +111 -0
  159. package/project/.sdk/src/cmp/rb/ReadmeExplanation_rb.ts +42 -0
  160. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +98 -0
  161. package/project/.sdk/src/cmp/rb/ReadmeInstall_rb.ts +31 -0
  162. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +129 -0
  163. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +99 -0
  164. package/project/.sdk/src/cmp/rb/ReadmeTopHowto_rb.ts +24 -0
  165. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +55 -0
  166. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +38 -0
  167. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +260 -0
  168. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +476 -0
  169. package/project/.sdk/src/cmp/rb/Test_rb.ts +50 -0
  170. package/project/.sdk/src/cmp/rb/fragment/Entity.fragment.rb +116 -0
  171. package/project/.sdk/src/cmp/rb/fragment/EntityCreateOp.fragment.rb +25 -0
  172. package/project/.sdk/src/cmp/rb/fragment/EntityListOp.fragment.rb +20 -0
  173. package/project/.sdk/src/cmp/rb/fragment/EntityLoadOp.fragment.rb +26 -0
  174. package/project/.sdk/src/cmp/rb/fragment/EntityRemoveOp.fragment.rb +26 -0
  175. package/project/.sdk/src/cmp/rb/fragment/EntityUpdateOp.fragment.rb +26 -0
  176. package/project/.sdk/src/cmp/rb/fragment/Main.fragment.rb +203 -0
  177. package/project/.sdk/src/cmp/rb/fragment/SdkError.fragment.rb +16 -0
  178. package/project/.sdk/src/cmp/rb/tsconfig.json +15 -0
  179. package/project/.sdk/src/cmp/rb/utility_rb.ts +84 -0
  180. package/project/.sdk/src/cmp/ts/Main_ts.ts +7 -0
  181. package/project/.sdk/src/cmp/ts/ReadmeExplanation_ts.ts +34 -0
  182. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +123 -0
  183. package/project/.sdk/src/cmp/ts/ReadmeInstall_ts.ts +1 -1
  184. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +159 -0
  185. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +69 -54
  186. package/project/.sdk/src/cmp/ts/ReadmeTopHowto_ts.ts +25 -0
  187. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +65 -0
  188. package/project/.sdk/src/cmp/ts/ReadmeTopTest_ts.ts +36 -0
  189. package/project/.sdk/tm/go/feature/log_feature.go +133 -0
  190. package/project/.sdk/tm/go/src/feature/log/.gitkeep +0 -0
  191. package/project/.sdk/tm/go/test/runner_test.go +16 -2
  192. package/project/.sdk/tm/js/src/Context.js +142 -0
  193. package/project/.sdk/tm/js/src/Control.js +16 -0
  194. package/project/.sdk/tm/js/src/Operation.js +19 -0
  195. package/project/.sdk/tm/js/src/Point.js +24 -0
  196. package/project/.sdk/tm/js/src/README.md +1 -0
  197. package/project/.sdk/tm/js/src/Response.js +19 -0
  198. package/project/.sdk/tm/js/src/Result.js +21 -0
  199. package/project/.sdk/tm/js/src/Spec.js +26 -0
  200. package/project/.sdk/tm/js/src/feature/README.md +1 -0
  201. package/project/.sdk/tm/js/src/feature/base/BaseFeature.js +45 -0
  202. package/project/.sdk/tm/js/src/feature/log/LogFeature.js +46 -47
  203. package/project/.sdk/tm/js/src/feature/test/TestFeature.js +207 -0
  204. package/project/.sdk/tm/js/src/types.js +22 -0
  205. package/project/.sdk/tm/js/src/utility/CleanUtility.js +31 -0
  206. package/project/.sdk/tm/js/src/utility/DoneUtility.js +11 -4
  207. package/project/.sdk/tm/js/src/utility/FeatureAddUtility.js +42 -0
  208. package/project/.sdk/tm/js/src/utility/FeatureHookUtility.js +25 -0
  209. package/project/.sdk/tm/js/src/utility/FeatureInitUtility.js +11 -0
  210. package/project/.sdk/tm/js/src/utility/FetcherUtility.js +28 -0
  211. package/project/.sdk/tm/js/src/utility/MakeContextUtility.js +11 -0
  212. package/project/.sdk/tm/js/src/utility/MakeErrorUtility.js +55 -0
  213. package/project/.sdk/tm/js/src/utility/MakeFetchDefUtility.js +44 -0
  214. package/project/.sdk/tm/js/src/utility/MakeOptionsUtility.js +93 -0
  215. package/project/.sdk/tm/js/src/utility/MakePointUtility.js +77 -0
  216. package/project/.sdk/tm/js/src/utility/MakeRequestUtility.js +63 -0
  217. package/project/.sdk/tm/js/src/utility/MakeResponseUtility.js +55 -0
  218. package/project/.sdk/tm/js/src/utility/MakeResultUtility.js +54 -0
  219. package/project/.sdk/tm/js/src/utility/MakeSpecUtility.js +58 -0
  220. package/project/.sdk/tm/js/src/utility/MakeUrlUtility.js +40 -0
  221. package/project/.sdk/tm/js/src/utility/ParamUtility.js +61 -0
  222. package/project/.sdk/tm/js/src/utility/PrepareAuthUtility.js +41 -0
  223. package/project/.sdk/tm/js/src/utility/PrepareBodyUtility.js +25 -0
  224. package/project/.sdk/tm/js/src/utility/PrepareHeadersUtility.js +18 -0
  225. package/project/.sdk/tm/js/src/utility/{MethodUtility.js → PrepareMethodUtility.js} +7 -7
  226. package/project/.sdk/tm/js/src/utility/PrepareParamsUtility.js +25 -0
  227. package/project/.sdk/tm/js/src/utility/PreparePathUtility.js +13 -0
  228. package/project/.sdk/tm/js/src/utility/PrepareQueryUtility.js +26 -0
  229. package/project/.sdk/tm/js/src/utility/README.md +1 -0
  230. package/project/.sdk/tm/js/src/utility/ResultBasicUtility.js +34 -0
  231. package/project/.sdk/tm/js/src/utility/ResultBodyUtility.js +18 -0
  232. package/project/.sdk/tm/js/src/utility/ResultHeadersUtility.js +22 -0
  233. package/project/.sdk/tm/js/src/utility/StructUtility.js +2219 -1078
  234. package/project/.sdk/tm/js/src/utility/TransformRequestUtility.js +28 -0
  235. package/project/.sdk/tm/js/src/utility/TransformResponseUtility.js +31 -0
  236. package/project/.sdk/tm/js/src/utility/Utility.js +61 -61
  237. package/project/.sdk/tm/js/test/README.md +1 -0
  238. package/project/.sdk/tm/js/test/exists.test.js +16 -0
  239. package/project/.sdk/tm/js/test/runner.js +323 -107
  240. package/project/.sdk/tm/js/test/utility/Custom.test.js +41 -63
  241. package/project/.sdk/tm/js/test/utility/PrimaryUtility.test.js +390 -116
  242. package/project/.sdk/tm/js/test/utility/StructUtility.test.js +728 -175
  243. package/project/.sdk/tm/js/test/utility/index.js +9 -0
  244. package/project/.sdk/tm/js/test/utility.js +72 -0
  245. package/project/.sdk/tm/lua/LICENSE +22 -0
  246. package/project/.sdk/tm/lua/Makefile +10 -0
  247. package/project/.sdk/tm/lua/core/context.lua +208 -0
  248. package/project/.sdk/tm/lua/core/control.lua +17 -0
  249. package/project/.sdk/tm/lua/core/error.lua +30 -0
  250. package/project/.sdk/tm/lua/core/helpers.lua +30 -0
  251. package/project/.sdk/tm/lua/core/operation.lua +51 -0
  252. package/project/.sdk/tm/lua/core/response.lua +45 -0
  253. package/project/.sdk/tm/lua/core/result.lua +58 -0
  254. package/project/.sdk/tm/lua/core/spec.lua +29 -0
  255. package/project/.sdk/tm/lua/core/utility_type.lua +90 -0
  256. package/project/.sdk/tm/lua/feature/base_feature.lua +35 -0
  257. package/project/.sdk/tm/lua/feature/log_feature.lua +80 -0
  258. package/project/.sdk/tm/lua/feature/test_feature.lua +202 -0
  259. package/project/.sdk/tm/lua/src/feature/README.md +3 -0
  260. package/project/.sdk/tm/lua/src/feature/base/.gitkeep +0 -0
  261. package/project/.sdk/tm/lua/src/feature/log/.gitkeep +0 -0
  262. package/project/.sdk/tm/lua/src/feature/test/.gitkeep +0 -0
  263. package/project/.sdk/tm/lua/test/primary_utility_test.lua +1213 -0
  264. package/project/.sdk/tm/lua/test/runner.lua +86 -0
  265. package/project/.sdk/tm/lua/test/struct_runner.lua +602 -0
  266. package/project/.sdk/tm/lua/test/struct_utility_test.lua +959 -0
  267. package/project/.sdk/tm/lua/utility/clean.lua +7 -0
  268. package/project/.sdk/tm/lua/utility/done.lua +19 -0
  269. package/project/.sdk/tm/lua/utility/feature_add.lua +8 -0
  270. package/project/.sdk/tm/lua/utility/feature_hook.lua +21 -0
  271. package/project/.sdk/tm/lua/utility/feature_init.lua +24 -0
  272. package/project/.sdk/tm/lua/utility/fetcher.lua +96 -0
  273. package/project/.sdk/tm/lua/utility/make_context.lua +9 -0
  274. package/project/.sdk/tm/lua/utility/make_error.lua +73 -0
  275. package/project/.sdk/tm/lua/utility/make_fetch_def.lua +43 -0
  276. package/project/.sdk/tm/lua/utility/make_options.lua +116 -0
  277. package/project/.sdk/tm/lua/utility/make_point.lua +92 -0
  278. package/project/.sdk/tm/lua/utility/make_request.lua +58 -0
  279. package/project/.sdk/tm/lua/utility/make_response.lua +44 -0
  280. package/project/.sdk/tm/lua/utility/make_result.lua +51 -0
  281. package/project/.sdk/tm/lua/utility/make_spec.lua +72 -0
  282. package/project/.sdk/tm/lua/utility/make_url.lua +46 -0
  283. package/project/.sdk/tm/lua/utility/param.lua +68 -0
  284. package/project/.sdk/tm/lua/utility/prepare_auth.lua +39 -0
  285. package/project/.sdk/tm/lua/utility/prepare_body.lua +14 -0
  286. package/project/.sdk/tm/lua/utility/prepare_headers.lua +20 -0
  287. package/project/.sdk/tm/lua/utility/prepare_method.lua +17 -0
  288. package/project/.sdk/tm/lua/utility/prepare_params.lua +36 -0
  289. package/project/.sdk/tm/lua/utility/prepare_path.lua +19 -0
  290. package/project/.sdk/tm/lua/utility/prepare_query.lua +41 -0
  291. package/project/.sdk/tm/lua/utility/register.lua +71 -0
  292. package/project/.sdk/tm/lua/utility/result_basic.lua +32 -0
  293. package/project/.sdk/tm/lua/utility/result_body.lua +17 -0
  294. package/project/.sdk/tm/lua/utility/result_headers.lua +22 -0
  295. package/project/.sdk/tm/lua/utility/struct/struct.lua +3427 -0
  296. package/project/.sdk/tm/lua/utility/transform_request.lua +31 -0
  297. package/project/.sdk/tm/lua/utility/transform_response.lua +44 -0
  298. package/project/.sdk/tm/php/LICENSE +22 -0
  299. package/project/.sdk/tm/php/Makefile +10 -0
  300. package/project/.sdk/tm/php/core/Context.php +139 -0
  301. package/project/.sdk/tm/php/core/Control.php +18 -0
  302. package/project/.sdk/tm/php/core/Error.php +37 -0
  303. package/project/.sdk/tm/php/core/Helpers.php +25 -0
  304. package/project/.sdk/tm/php/core/Operation.php +36 -0
  305. package/project/.sdk/tm/php/core/Response.php +30 -0
  306. package/project/.sdk/tm/php/core/Result.php +35 -0
  307. package/project/.sdk/tm/php/core/Spec.php +38 -0
  308. package/project/.sdk/tm/php/core/UtilityType.php +89 -0
  309. package/project/.sdk/tm/php/feature/BaseFeature.php +37 -0
  310. package/project/.sdk/tm/php/feature/LogFeature.php +65 -0
  311. package/project/.sdk/tm/php/feature/TestFeature.php +156 -0
  312. package/project/.sdk/tm/php/src/feature/README.md +3 -0
  313. package/project/.sdk/tm/php/src/feature/base/.gitkeep +0 -0
  314. package/project/.sdk/tm/php/src/feature/log/.gitkeep +0 -0
  315. package/project/.sdk/tm/php/src/feature/test/.gitkeep +0 -0
  316. package/project/.sdk/tm/php/test/PrimaryUtilityTest.php +1309 -0
  317. package/project/.sdk/tm/php/test/Runner.php +112 -0
  318. package/project/.sdk/tm/php/test/StructRunner.php +275 -0
  319. package/project/.sdk/tm/php/test/StructUtilityTest.php +1336 -0
  320. package/project/.sdk/tm/php/utility/Clean.php +12 -0
  321. package/project/.sdk/tm/php/utility/Done.php +26 -0
  322. package/project/.sdk/tm/php/utility/FeatureAdd.php +12 -0
  323. package/project/.sdk/tm/php/utility/FeatureHook.php +23 -0
  324. package/project/.sdk/tm/php/utility/FeatureInit.php +25 -0
  325. package/project/.sdk/tm/php/utility/Fetcher.php +105 -0
  326. package/project/.sdk/tm/php/utility/MakeContext.php +14 -0
  327. package/project/.sdk/tm/php/utility/MakeError.php +59 -0
  328. package/project/.sdk/tm/php/utility/MakeFetchDef.php +36 -0
  329. package/project/.sdk/tm/php/utility/MakeOptions.php +102 -0
  330. package/project/.sdk/tm/php/utility/MakePoint.php +87 -0
  331. package/project/.sdk/tm/php/utility/MakeRequest.php +57 -0
  332. package/project/.sdk/tm/php/utility/MakeResponse.php +43 -0
  333. package/project/.sdk/tm/php/utility/MakeResult.php +53 -0
  334. package/project/.sdk/tm/php/utility/MakeSpec.php +64 -0
  335. package/project/.sdk/tm/php/utility/MakeUrl.php +41 -0
  336. package/project/.sdk/tm/php/utility/Param.php +68 -0
  337. package/project/.sdk/tm/php/utility/PrepareAuth.php +33 -0
  338. package/project/.sdk/tm/php/utility/PrepareBody.php +15 -0
  339. package/project/.sdk/tm/php/utility/PrepareHeaders.php +18 -0
  340. package/project/.sdk/tm/php/utility/PrepareMethod.php +21 -0
  341. package/project/.sdk/tm/php/utility/PrepareParams.php +34 -0
  342. package/project/.sdk/tm/php/utility/PreparePath.php +20 -0
  343. package/project/.sdk/tm/php/utility/PrepareQuery.php +32 -0
  344. package/project/.sdk/tm/php/utility/Register.php +67 -0
  345. package/project/.sdk/tm/php/utility/ResultBasic.php +29 -0
  346. package/project/.sdk/tm/php/utility/ResultBody.php +17 -0
  347. package/project/.sdk/tm/php/utility/ResultHeaders.php +21 -0
  348. package/project/.sdk/tm/php/utility/TransformRequest.php +27 -0
  349. package/project/.sdk/tm/php/utility/TransformResponse.php +42 -0
  350. package/project/.sdk/tm/php/utility/struct/Struct.php +3535 -0
  351. package/project/.sdk/tm/py/Makefile +10 -0
  352. package/project/.sdk/tm/py/core/__init__.py +0 -0
  353. package/project/.sdk/tm/py/core/context.py +199 -0
  354. package/project/.sdk/tm/py/core/control.py +12 -0
  355. package/project/.sdk/tm/py/core/error.py +18 -0
  356. package/project/.sdk/tm/py/core/helpers.py +15 -0
  357. package/project/.sdk/tm/py/core/operation.py +37 -0
  358. package/project/.sdk/tm/py/core/response.py +34 -0
  359. package/project/.sdk/tm/py/core/result.py +44 -0
  360. package/project/.sdk/tm/py/core/spec.py +23 -0
  361. package/project/.sdk/tm/py/core/utility_type.py +82 -0
  362. package/project/.sdk/tm/py/entity/__init__.py +0 -0
  363. package/project/.sdk/tm/py/feature/__init__.py +0 -0
  364. package/project/.sdk/tm/py/feature/base_feature.py +61 -0
  365. package/project/.sdk/tm/py/feature/log_feature.py +84 -0
  366. package/project/.sdk/tm/py/feature/test_feature.py +164 -0
  367. package/project/.sdk/tm/py/src/feature/README.md +3 -0
  368. package/project/.sdk/tm/py/src/feature/base/.gitkeep +0 -0
  369. package/project/.sdk/tm/py/src/feature/log/.gitkeep +0 -0
  370. package/project/.sdk/tm/py/src/feature/test/.gitkeep +0 -0
  371. package/project/.sdk/tm/py/test/__init__.py +0 -0
  372. package/project/.sdk/tm/py/test/runner.py +90 -0
  373. package/project/.sdk/tm/py/test/struct_runner.py +411 -0
  374. package/project/.sdk/tm/py/test/test_primary_utility.py +1101 -0
  375. package/project/.sdk/tm/py/test/test_struct_utility.py +751 -0
  376. package/project/.sdk/tm/py/utility/__init__.py +0 -0
  377. package/project/.sdk/tm/py/utility/clean.py +5 -0
  378. package/project/.sdk/tm/py/utility/done.py +14 -0
  379. package/project/.sdk/tm/py/utility/feature_add.py +6 -0
  380. package/project/.sdk/tm/py/utility/feature_hook.py +15 -0
  381. package/project/.sdk/tm/py/utility/feature_init.py +18 -0
  382. package/project/.sdk/tm/py/utility/fetcher.py +95 -0
  383. package/project/.sdk/tm/py/utility/make_context.py +7 -0
  384. package/project/.sdk/tm/py/utility/make_error.py +64 -0
  385. package/project/.sdk/tm/py/utility/make_fetch_def.py +37 -0
  386. package/project/.sdk/tm/py/utility/make_options.py +103 -0
  387. package/project/.sdk/tm/py/utility/make_point.py +74 -0
  388. package/project/.sdk/tm/py/utility/make_request.py +52 -0
  389. package/project/.sdk/tm/py/utility/make_response.py +36 -0
  390. package/project/.sdk/tm/py/utility/make_result.py +41 -0
  391. package/project/.sdk/tm/py/utility/make_spec.py +68 -0
  392. package/project/.sdk/tm/py/utility/make_url.py +34 -0
  393. package/project/.sdk/tm/py/utility/param.py +55 -0
  394. package/project/.sdk/tm/py/utility/prepare_auth.py +34 -0
  395. package/project/.sdk/tm/py/utility/prepare_body.py +11 -0
  396. package/project/.sdk/tm/py/utility/prepare_headers.py +17 -0
  397. package/project/.sdk/tm/py/utility/prepare_method.py +15 -0
  398. package/project/.sdk/tm/py/utility/prepare_params.py +28 -0
  399. package/project/.sdk/tm/py/utility/prepare_path.py +16 -0
  400. package/project/.sdk/tm/py/utility/prepare_query.py +33 -0
  401. package/project/.sdk/tm/py/utility/register.py +68 -0
  402. package/project/.sdk/tm/py/utility/result_basic.py +26 -0
  403. package/project/.sdk/tm/py/utility/result_body.py +13 -0
  404. package/project/.sdk/tm/py/utility/result_headers.py +17 -0
  405. package/project/.sdk/tm/py/utility/transform_request.py +27 -0
  406. package/project/.sdk/tm/py/utility/transform_response.py +39 -0
  407. package/project/.sdk/tm/py/utility/voxgig_struct/__init__.py +72 -0
  408. package/project/.sdk/tm/py/utility/voxgig_struct/voxgig_struct.py +2770 -0
  409. package/project/.sdk/tm/rb/Gemfile +4 -0
  410. package/project/.sdk/tm/rb/LICENSE +22 -0
  411. package/project/.sdk/tm/rb/Makefile +10 -0
  412. package/project/.sdk/tm/rb/core/context.rb +105 -0
  413. package/project/.sdk/tm/rb/core/control.rb +11 -0
  414. package/project/.sdk/tm/rb/core/error.rb +24 -0
  415. package/project/.sdk/tm/rb/core/helpers.rb +16 -0
  416. package/project/.sdk/tm/rb/core/operation.rb +26 -0
  417. package/project/.sdk/tm/rb/core/response.rb +20 -0
  418. package/project/.sdk/tm/rb/core/result.rb +23 -0
  419. package/project/.sdk/tm/rb/core/spec.rb +23 -0
  420. package/project/.sdk/tm/rb/core/utility_type.rb +32 -0
  421. package/project/.sdk/tm/rb/feature/base_feature.rb +30 -0
  422. package/project/.sdk/tm/rb/feature/log_feature.rb +50 -0
  423. package/project/.sdk/tm/rb/feature/test_feature.rb +154 -0
  424. package/project/.sdk/tm/rb/src/feature/README.md +3 -0
  425. package/project/.sdk/tm/rb/src/feature/base/.gitkeep +0 -0
  426. package/project/.sdk/tm/rb/src/feature/log/.gitkeep +0 -0
  427. package/project/.sdk/tm/rb/src/feature/test/.gitkeep +0 -0
  428. package/project/.sdk/tm/rb/test/primary_utility_test.rb +1083 -0
  429. package/project/.sdk/tm/rb/test/runner.rb +70 -0
  430. package/project/.sdk/tm/rb/test/struct_runner.rb +309 -0
  431. package/project/.sdk/tm/rb/test/struct_utility_test.rb +670 -0
  432. package/project/.sdk/tm/rb/utility/clean.rb +4 -0
  433. package/project/.sdk/tm/rb/utility/done.rb +14 -0
  434. package/project/.sdk/tm/rb/utility/feature_add.rb +6 -0
  435. package/project/.sdk/tm/rb/utility/feature_hook.rb +11 -0
  436. package/project/.sdk/tm/rb/utility/feature_init.rb +16 -0
  437. package/project/.sdk/tm/rb/utility/fetcher.rb +67 -0
  438. package/project/.sdk/tm/rb/utility/make_context.rb +7 -0
  439. package/project/.sdk/tm/rb/utility/make_error.rb +44 -0
  440. package/project/.sdk/tm/rb/utility/make_fetch_def.rb +24 -0
  441. package/project/.sdk/tm/rb/utility/make_options.rb +57 -0
  442. package/project/.sdk/tm/rb/utility/make_point.rb +77 -0
  443. package/project/.sdk/tm/rb/utility/make_request.rb +44 -0
  444. package/project/.sdk/tm/rb/utility/make_response.rb +25 -0
  445. package/project/.sdk/tm/rb/utility/make_result.rb +33 -0
  446. package/project/.sdk/tm/rb/utility/make_spec.rb +50 -0
  447. package/project/.sdk/tm/rb/utility/make_url.rb +32 -0
  448. package/project/.sdk/tm/rb/utility/param.rb +48 -0
  449. package/project/.sdk/tm/rb/utility/prepare_auth.rb +26 -0
  450. package/project/.sdk/tm/rb/utility/prepare_body.rb +6 -0
  451. package/project/.sdk/tm/rb/utility/prepare_headers.rb +11 -0
  452. package/project/.sdk/tm/rb/utility/prepare_method.rb +5 -0
  453. package/project/.sdk/tm/rb/utility/prepare_params.rb +25 -0
  454. package/project/.sdk/tm/rb/utility/prepare_path.rb +13 -0
  455. package/project/.sdk/tm/rb/utility/prepare_query.rb +22 -0
  456. package/project/.sdk/tm/rb/utility/register.rb +63 -0
  457. package/project/.sdk/tm/rb/utility/result_basic.rb +23 -0
  458. package/project/.sdk/tm/rb/utility/result_body.rb +11 -0
  459. package/project/.sdk/tm/rb/utility/result_headers.rb +15 -0
  460. package/project/.sdk/tm/rb/utility/struct/voxgig_struct.rb +2256 -0
  461. package/project/.sdk/tm/rb/utility/transform_request.rb +15 -0
  462. package/project/.sdk/tm/rb/utility/transform_response.rb +23 -0
  463. package/src/cmp/Main.ts +1 -16
  464. package/src/cmp/Readme.ts +5 -5
  465. package/src/cmp/ReadmeEntity.ts +77 -25
  466. package/src/cmp/ReadmeExplanation.ts +333 -0
  467. package/src/cmp/ReadmeHowto.ts +28 -0
  468. package/src/cmp/ReadmeIntro.ts +10 -24
  469. package/src/cmp/ReadmeModel.ts +57 -88
  470. package/src/cmp/ReadmeOptions.ts +40 -11
  471. package/src/cmp/ReadmeQuick.ts +4 -1
  472. package/src/cmp/ReadmeRef.ts +1057 -40
  473. package/src/cmp/ReadmeTop.ts +213 -0
  474. package/src/sdkgen.ts +12 -0
  475. package/project/.sdk/src/cmp/js/Quick_js.ts +0 -78
  476. package/project/.sdk/src/cmp/js/TestAcceptEntity_js.ts +0 -13
  477. package/project/.sdk/src/cmp/js/TestAccept_js.ts +0 -18
  478. package/project/.sdk/tm/go/test/exists_test.go +0 -16
  479. package/project/.sdk/tm/js/src/utility/AuthUtility.js +0 -21
  480. package/project/.sdk/tm/js/src/utility/BodyUtility.js +0 -29
  481. package/project/.sdk/tm/js/src/utility/ErrorUtility.js +0 -33
  482. package/project/.sdk/tm/js/src/utility/FindparamUtility.js +0 -31
  483. package/project/.sdk/tm/js/src/utility/FullurlUtility.js +0 -39
  484. package/project/.sdk/tm/js/src/utility/HeadersUtility.js +0 -13
  485. package/project/.sdk/tm/js/src/utility/JoinurlUtility.js +0 -14
  486. package/project/.sdk/tm/js/src/utility/OperatorUtility.js +0 -44
  487. package/project/.sdk/tm/js/src/utility/OptionsUtility.js +0 -54
  488. package/project/.sdk/tm/js/src/utility/ParamsUtility.js +0 -21
  489. package/project/.sdk/tm/js/src/utility/QueryUtility.js +0 -21
  490. package/project/.sdk/tm/js/src/utility/ReqformUtility.js +0 -32
  491. package/project/.sdk/tm/js/src/utility/RequestUtility.js +0 -48
  492. package/project/.sdk/tm/js/src/utility/ResbasicUtility.js +0 -27
  493. package/project/.sdk/tm/js/src/utility/ResbodyUtility.js +0 -15
  494. package/project/.sdk/tm/js/src/utility/ResformUtility.js +0 -34
  495. package/project/.sdk/tm/js/src/utility/ResheadersUtility.js +0 -19
  496. package/project/.sdk/tm/js/src/utility/ResponseUtility.js +0 -37
  497. package/project/.sdk/tm/js/src/utility/ResultUtility.js +0 -28
  498. package/project/.sdk/tm/js/src/utility/SpecUtility.js +0 -35
@@ -0,0 +1,1213 @@
1
+ -- ProjectName SDK primary utility test
2
+
3
+ local json = require("dkjson")
4
+ local vs = require("utility.struct.struct")
5
+ local sdk = require("ProjectName_sdk")
6
+ local helpers = require("core.helpers")
7
+ local runner = require("test.runner")
8
+ local Context = require("core.context")
9
+ local Spec = require("core.spec")
10
+ local Result = require("core.result")
11
+ local Response = require("core.response")
12
+ local Operation = require("core.operation")
13
+ local BaseFeature = require("feature.base_feature")
14
+ local ProjectNameError = require("core.error")
15
+
16
+ local _test_dir = debug.getinfo(1, "S").source:match("^@(.+/)") or "./"
17
+
18
+
19
+ -- Load test.json
20
+ local function load_test_spec()
21
+ local path = _test_dir .. "../../.sdk/test/test.json"
22
+ local f = io.open(path, "r")
23
+ if f == nil then
24
+ error("failed to load test.json: " .. path)
25
+ end
26
+ local content = f:read("*a")
27
+ f:close()
28
+ local spec = json.decode(content)
29
+ if spec == nil then
30
+ error("failed to parse test.json")
31
+ end
32
+ return spec
33
+ end
34
+
35
+
36
+ -- Navigate into nested map by keys
37
+ local function get_spec(spec, ...)
38
+ local cur = spec
39
+ local keys = {...}
40
+ for _, key in ipairs(keys) do
41
+ if type(cur) ~= "table" then
42
+ return nil
43
+ end
44
+ cur = cur[key]
45
+ end
46
+ if type(cur) == "table" then
47
+ return cur
48
+ end
49
+ return nil
50
+ end
51
+
52
+
53
+ -- JSON normalize: round-trip through JSON to normalize types
54
+ local function json_normalize(val)
55
+ if val == nil then
56
+ return nil
57
+ end
58
+ local encoded = json.encode(val)
59
+ if encoded == nil then
60
+ return val
61
+ end
62
+ local decoded = json.decode(encoded)
63
+ return decoded
64
+ end
65
+
66
+
67
+ -- JSON string representation
68
+ local function json_str(val)
69
+ if val == nil then
70
+ return "nil"
71
+ end
72
+ local encoded = json.encode(val)
73
+ if encoded == nil then
74
+ return tostring(val)
75
+ end
76
+ return encoded
77
+ end
78
+
79
+
80
+ -- Match a string pattern: /regex/ or case-insensitive contains
81
+ -- Converts common PCRE patterns (\w, \d, \s) to Lua patterns (%w, %d, %s)
82
+ local function match_string(pattern, val)
83
+ if #pattern >= 2 and pattern:sub(1, 1) == "/" and pattern:sub(-1) == "/" then
84
+ local re = pattern:sub(2, -2)
85
+ -- Convert PCRE character classes to Lua pattern equivalents
86
+ re = re:gsub("\\w", "%%w")
87
+ re = re:gsub("\\d", "%%d")
88
+ re = re:gsub("\\s", "%%s")
89
+ local ok = string.find(val, re)
90
+ return ok ~= nil
91
+ end
92
+ return string.find(string.lower(val), string.lower(pattern), 1, true) ~= nil
93
+ end
94
+
95
+
96
+ -- Deep match: check that all keys in 'check' exist and match in 'base'
97
+ local function match_deep(check, base, path, errors)
98
+ if check == nil then
99
+ return
100
+ end
101
+
102
+ path = path or ""
103
+ errors = errors or {}
104
+
105
+ if type(check) == "table" then
106
+ -- Determine if check is a list (array) or map
107
+ local is_list = false
108
+ if #check > 0 then
109
+ is_list = true
110
+ for k, _ in pairs(check) do
111
+ if type(k) ~= "number" then
112
+ is_list = false
113
+ break
114
+ end
115
+ end
116
+ end
117
+
118
+ if is_list then
119
+ for i, check_val in ipairs(check) do
120
+ local child_path = path .. "[" .. i .. "]"
121
+ local base_val = nil
122
+ if type(base) == "table" and base[i] ~= nil then
123
+ base_val = base[i]
124
+ end
125
+ match_deep(check_val, base_val, child_path, errors)
126
+ end
127
+ else
128
+ for key, check_val in pairs(check) do
129
+ local child_path = path .. "." .. tostring(key)
130
+ local base_val = nil
131
+ if type(base) == "table" then
132
+ base_val = base[key]
133
+ end
134
+ match_deep(check_val, base_val, child_path, errors)
135
+ end
136
+ end
137
+ else
138
+ local check_str = nil
139
+ if type(check) == "string" then
140
+ check_str = check
141
+ end
142
+
143
+ if check_str == "__EXISTS__" then
144
+ if base == nil then
145
+ table.insert(errors, "match " .. path .. ": expected value to exist but got nil")
146
+ end
147
+ return
148
+ end
149
+
150
+ if check_str == "__UNDEF__" then
151
+ if base ~= nil then
152
+ table.insert(errors, "match " .. path .. ": expected nil but got " .. json_str(base))
153
+ end
154
+ return
155
+ end
156
+
157
+ local norm_check = json_normalize(check)
158
+ local norm_base = json_normalize(base)
159
+
160
+ -- Compare normalized values
161
+ local check_json = json.encode(norm_check)
162
+ local base_json = json.encode(norm_base)
163
+
164
+ if check_json ~= base_json then
165
+ if check_str ~= nil and check_str ~= "" then
166
+ local base_str = tostring(base or "")
167
+ if match_string(check_str, base_str) then
168
+ return
169
+ end
170
+ end
171
+ table.insert(errors, "match " .. path .. ": got " ..
172
+ json_str(norm_base) .. ", want " .. json_str(norm_check))
173
+ end
174
+ end
175
+ end
176
+
177
+
178
+ -- Run a test set from test.json
179
+ local function runset(testspec, subject)
180
+ if testspec == nil then
181
+ return
182
+ end
183
+ local set = testspec["set"]
184
+ if type(set) ~= "table" then
185
+ return
186
+ end
187
+
188
+ for si, entry_ref in ipairs(set) do
189
+ local i = si - 1
190
+ local entry = entry_ref
191
+
192
+ local mark = ""
193
+ if entry["mark"] ~= nil then
194
+ mark = " (mark=" .. tostring(entry["mark"]) .. ")"
195
+ end
196
+
197
+ local result, err = subject(entry)
198
+
199
+ local expected_err = entry["err"]
200
+
201
+ if err ~= nil then
202
+ if expected_err ~= nil then
203
+ local err_msg = tostring(err)
204
+ if type(err) == "table" and err.msg ~= nil then
205
+ err_msg = err.msg
206
+ end
207
+ if type(expected_err) == "string" then
208
+ if not match_string(expected_err, err_msg) then
209
+ error("entry " .. i .. mark .. ": error mismatch: got " ..
210
+ json_str(err_msg) .. ", want contains " .. json_str(expected_err))
211
+ end
212
+ elseif type(expected_err) == "boolean" and expected_err == true then
213
+ -- err: true means any error is acceptable
214
+ end
215
+ if entry["match"] ~= nil then
216
+ local result_map = {
217
+ ["in"] = entry["in"],
218
+ out = json_normalize(result),
219
+ err = { message = tostring(err) },
220
+ }
221
+ local errors = {}
222
+ match_deep(entry["match"], result_map, "", errors)
223
+ if #errors > 0 then
224
+ error("entry " .. i .. mark .. ": " .. table.concat(errors, "; "))
225
+ end
226
+ end
227
+ goto continue
228
+ end
229
+ error("entry " .. i .. mark .. ": unexpected error: " .. tostring(err))
230
+ end
231
+
232
+ if expected_err ~= nil then
233
+ error("entry " .. i .. mark .. ": expected error containing " ..
234
+ json_str(expected_err) .. " but got result: " .. json_str(result))
235
+ end
236
+
237
+ do
238
+ local matched = false
239
+ if entry["match"] ~= nil then
240
+ local result_map = {
241
+ ["in"] = entry["in"],
242
+ out = json_normalize(result),
243
+ }
244
+ if entry["args"] ~= nil then
245
+ result_map["args"] = entry["args"]
246
+ elseif entry["in"] ~= nil then
247
+ result_map["args"] = { entry["in"] }
248
+ end
249
+ if entry["ctx"] ~= nil then
250
+ result_map["ctx"] = entry["ctx"]
251
+ end
252
+ local errors = {}
253
+ match_deep(entry["match"], result_map, "", errors)
254
+ if #errors > 0 then
255
+ error("entry " .. i .. mark .. ": " .. table.concat(errors, "; "))
256
+ end
257
+ matched = true
258
+ end
259
+
260
+ local expected_out = entry["out"]
261
+ if expected_out == nil and matched then
262
+ goto continue
263
+ end
264
+ if expected_out ~= nil then
265
+ local norm_result = json_normalize(result)
266
+ local norm_expected = json_normalize(expected_out)
267
+ local rj = json.encode(norm_result)
268
+ local ej = json.encode(norm_expected)
269
+ -- Treat empty [] and {} as equivalent
270
+ local rj_norm = (rj == "[]") and "{}" or rj
271
+ local ej_norm = (ej == "[]") and "{}" or ej
272
+ if rj_norm ~= ej_norm then
273
+ error("entry " .. i .. mark .. ": output mismatch: got " ..
274
+ json_str(norm_result) .. ", want " .. json_str(norm_expected))
275
+ end
276
+ end
277
+ end
278
+
279
+ ::continue::
280
+ end
281
+ end
282
+
283
+
284
+ -- Create a context from a JSON map (like makeCtxFromMap in Go)
285
+ local function make_ctx_from_map(ctxmap, client, utility)
286
+ if ctxmap == nil then
287
+ ctxmap = {}
288
+ end
289
+
290
+ local ctx = Context.new(ctxmap, nil)
291
+
292
+ if client ~= nil then
293
+ ctx.client = client
294
+ ctx.utility = utility
295
+ end
296
+ if ctx.options == nil and client ~= nil then
297
+ ctx.options = client:options_map()
298
+ end
299
+
300
+ -- Handle spec from JSON map
301
+ if type(ctxmap["spec"]) == "table" then
302
+ ctx.spec = Spec.new(ctxmap["spec"])
303
+ end
304
+
305
+ -- Handle result from JSON map
306
+ if type(ctxmap["result"]) == "table" then
307
+ local resmap = ctxmap["result"]
308
+ ctx.result = Result.new(resmap)
309
+ if type(resmap["err"]) == "table" then
310
+ local msg = resmap["err"]["message"]
311
+ if type(msg) == "string" then
312
+ ctx.result.err = ProjectNameError.new("", msg, nil)
313
+ end
314
+ end
315
+ end
316
+
317
+ -- Handle response from JSON map
318
+ if type(ctxmap["response"]) == "table" then
319
+ local respmap = ctxmap["response"]
320
+ ctx.response = Response.new(respmap)
321
+ if respmap["body"] ~= nil then
322
+ local body_copy = respmap["body"]
323
+ ctx.response.json_func = function() return body_copy end
324
+ end
325
+ if type(respmap["headers"]) == "table" then
326
+ local lower_headers = {}
327
+ for k, v in pairs(respmap["headers"]) do
328
+ lower_headers[string.lower(k)] = v
329
+ end
330
+ ctx.response.headers = lower_headers
331
+ end
332
+ end
333
+
334
+ return ctx
335
+ end
336
+
337
+
338
+ -- Fix context options
339
+ local function fixctx(ctx, client)
340
+ if ctx ~= nil and ctx.client ~= nil and ctx.options == nil then
341
+ ctx.options = ctx.client:options_map()
342
+ end
343
+ end
344
+
345
+
346
+ -- Create an error from a JSON map
347
+ local function err_from_map(m)
348
+ if m == nil then
349
+ return nil
350
+ end
351
+ local msg = m["message"]
352
+ if type(msg) ~= "string" or msg == "" then
353
+ return nil
354
+ end
355
+ local code = m["code"] or ""
356
+ return ProjectNameError.new(code, msg, nil)
357
+ end
358
+
359
+
360
+ -- Create a basic test context
361
+ local function make_test_ctx(client, utility, overrides)
362
+ local ctxmap = {
363
+ opname = "load",
364
+ client = client,
365
+ utility = utility,
366
+ }
367
+ if overrides ~= nil then
368
+ for k, v in pairs(overrides) do
369
+ ctxmap[k] = v
370
+ end
371
+ end
372
+ return utility.make_context(ctxmap, client:get_root_ctx())
373
+ end
374
+
375
+
376
+ -- Create a full test context with point and match
377
+ local function make_test_full_ctx(client, utility)
378
+ local ctx = make_test_ctx(client, utility, nil)
379
+ ctx.point = {
380
+ parts = { "items", "{id}" },
381
+ args = { params = { { name = "id", reqd = true } } },
382
+ params = { "id" },
383
+ alias = {},
384
+ select = {},
385
+ active = true,
386
+ transform = {},
387
+ }
388
+ ctx.match = { id = "item01" }
389
+ ctx.reqmatch = { id = "item01" }
390
+ return ctx
391
+ end
392
+
393
+
394
+ describe("PrimaryUtility", function()
395
+ local spec = load_test_spec()
396
+ local primary = get_spec(spec, "primary")
397
+ assert.is_not_nil(primary, "primary section not found in test.json")
398
+
399
+ local client = sdk.test(nil, nil)
400
+ local utility = client:get_utility()
401
+
402
+
403
+ it("exists", function()
404
+ assert.is_not_nil(utility.clean, "clean should not be nil")
405
+ assert.is_not_nil(utility.done, "done should not be nil")
406
+ assert.is_not_nil(utility.make_error, "make_error should not be nil")
407
+ assert.is_not_nil(utility.feature_add, "feature_add should not be nil")
408
+ assert.is_not_nil(utility.feature_hook, "feature_hook should not be nil")
409
+ assert.is_not_nil(utility.feature_init, "feature_init should not be nil")
410
+ assert.is_not_nil(utility.fetcher, "fetcher should not be nil")
411
+ assert.is_not_nil(utility.make_fetch_def, "make_fetch_def should not be nil")
412
+ assert.is_not_nil(utility.make_context, "make_context should not be nil")
413
+ assert.is_not_nil(utility.make_options, "make_options should not be nil")
414
+ assert.is_not_nil(utility.make_request, "make_request should not be nil")
415
+ assert.is_not_nil(utility.make_response, "make_response should not be nil")
416
+ assert.is_not_nil(utility.make_result, "make_result should not be nil")
417
+ assert.is_not_nil(utility.make_point, "make_point should not be nil")
418
+ assert.is_not_nil(utility.make_spec, "make_spec should not be nil")
419
+ assert.is_not_nil(utility.make_url, "make_url should not be nil")
420
+ assert.is_not_nil(utility.param, "param should not be nil")
421
+ assert.is_not_nil(utility.prepare_auth, "prepare_auth should not be nil")
422
+ assert.is_not_nil(utility.prepare_body, "prepare_body should not be nil")
423
+ assert.is_not_nil(utility.prepare_headers, "prepare_headers should not be nil")
424
+ assert.is_not_nil(utility.prepare_method, "prepare_method should not be nil")
425
+ assert.is_not_nil(utility.prepare_params, "prepare_params should not be nil")
426
+ assert.is_not_nil(utility.prepare_path, "prepare_path should not be nil")
427
+ assert.is_not_nil(utility.prepare_query, "prepare_query should not be nil")
428
+ assert.is_not_nil(utility.result_basic, "result_basic should not be nil")
429
+ assert.is_not_nil(utility.result_body, "result_body should not be nil")
430
+ assert.is_not_nil(utility.result_headers, "result_headers should not be nil")
431
+ assert.is_not_nil(utility.transform_request, "transform_request should not be nil")
432
+ assert.is_not_nil(utility.transform_response, "transform_response should not be nil")
433
+ end)
434
+
435
+
436
+ it("clean-basic", function()
437
+ local ctx = make_test_ctx(client, utility, nil)
438
+ local val = { key = "secret123", name = "test" }
439
+ local cleaned = utility.clean(ctx, val)
440
+ assert.is_not_nil(cleaned, "cleaned should not be nil")
441
+ end)
442
+
443
+
444
+ it("done-basic", function()
445
+ runset(get_spec(primary, "done", "basic"), function(entry)
446
+ local ctxmap = entry["ctx"]
447
+ if type(ctxmap) ~= "table" then
448
+ ctxmap = {}
449
+ end
450
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
451
+ fixctx(ctx, client)
452
+ return utility.done(ctx)
453
+ end)
454
+ end)
455
+
456
+
457
+ it("makeError-basic", function()
458
+ runset(get_spec(primary, "makeError", "basic"), function(entry)
459
+ local args = entry["args"]
460
+ if type(args) ~= "table" or #args == 0 then
461
+ args = { {} }
462
+ end
463
+
464
+ local ctxmap = args[1]
465
+ if type(ctxmap) ~= "table" then
466
+ ctxmap = {}
467
+ end
468
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
469
+ fixctx(ctx, client)
470
+
471
+ local err_val = nil
472
+ if #args > 1 then
473
+ if type(args[2]) == "table" then
474
+ err_val = err_from_map(args[2])
475
+ end
476
+ end
477
+
478
+ return utility.make_error(ctx, err_val)
479
+ end)
480
+ end)
481
+
482
+
483
+ it("makeError-no-throw", function()
484
+ local ctx = make_test_full_ctx(client, utility)
485
+ ctx.ctrl.throw_err = false
486
+ ctx.result = Result.new({
487
+ ok = false,
488
+ resdata = { id = "safe01" },
489
+ })
490
+
491
+ local out, err = utility.make_error(ctx, ctx:make_error("test_code", "test message"))
492
+ assert.is_nil(err, "expected no error")
493
+ assert.is_not_nil(out, "expected result")
494
+ if type(out) == "table" then
495
+ assert.are.equal("safe01", out["id"])
496
+ else
497
+ error("expected table result, got: " .. type(out))
498
+ end
499
+ end)
500
+
501
+
502
+ it("featureAdd-basic", function()
503
+ local ctx = make_test_ctx(client, utility, nil)
504
+ local start_len = #client.features
505
+
506
+ local feature = BaseFeature.new()
507
+ utility.feature_add(ctx, feature)
508
+
509
+ assert.are.equal(start_len + 1, #client.features)
510
+ end)
511
+
512
+
513
+ it("featureHook-basic", function()
514
+ local hook_client = sdk.test(nil, nil)
515
+ local hook_utility = hook_client:get_utility()
516
+ local ctx = make_test_ctx(hook_client, hook_utility, nil)
517
+
518
+ local called = false
519
+ local hook_feature = BaseFeature.new()
520
+ hook_feature.TestHook = function(self_feat, hook_ctx)
521
+ called = true
522
+ end
523
+ hook_client.features = { hook_feature }
524
+
525
+ hook_utility.feature_hook(ctx, "TestHook")
526
+ assert.is_true(called, "expected TestHook to be called")
527
+ end)
528
+
529
+
530
+ it("featureInit-basic", function()
531
+ local init_client = sdk.test(nil, nil)
532
+ local init_utility = init_client:get_utility()
533
+ local ctx = make_test_ctx(init_client, init_utility, nil)
534
+ ctx.options["feature"] = {
535
+ initfeat = { active = true },
536
+ }
537
+
538
+ local init_called = false
539
+ local feature = BaseFeature.new()
540
+ feature.name = "initfeat"
541
+ feature.active = true
542
+ feature.get_name = function(self_feat) return "initfeat" end
543
+ feature.get_active = function(self_feat) return true end
544
+ feature.init = function(self_feat, init_ctx, options)
545
+ init_called = true
546
+ end
547
+
548
+ init_utility.feature_init(ctx, feature)
549
+ assert.is_true(init_called, "expected init to be called")
550
+ end)
551
+
552
+
553
+ it("featureInit-inactive", function()
554
+ local init_client = sdk.test(nil, nil)
555
+ local init_utility = init_client:get_utility()
556
+ local ctx = make_test_ctx(init_client, init_utility, nil)
557
+ ctx.options["feature"] = {
558
+ nofeat = { active = false },
559
+ }
560
+
561
+ local init_called = false
562
+ local feature = BaseFeature.new()
563
+ feature.name = "nofeat"
564
+ feature.active = false
565
+ feature.get_name = function(self_feat) return "nofeat" end
566
+ feature.get_active = function(self_feat) return false end
567
+ feature.init = function(self_feat, init_ctx, options)
568
+ init_called = true
569
+ end
570
+
571
+ init_utility.feature_init(ctx, feature)
572
+ assert.is_false(init_called, "expected init NOT to be called for inactive feature")
573
+ end)
574
+
575
+
576
+ it("fetcher-live", function()
577
+ local calls = {}
578
+ local live_client = sdk.new({
579
+ system = {
580
+ fetch = function(url, fetchdef)
581
+ table.insert(calls, { url = url, init = fetchdef })
582
+ return { status = 200, statusText = "OK" }, nil
583
+ end,
584
+ },
585
+ })
586
+ local live_utility = live_client:get_utility()
587
+ local ctx = live_utility.make_context({
588
+ opname = "load",
589
+ client = live_client,
590
+ utility = live_utility,
591
+ }, nil)
592
+
593
+ local fetchdef = { method = "GET", headers = {} }
594
+ local _, err = live_utility.fetcher(ctx, "http://example.com/test", fetchdef)
595
+ assert.is_nil(err, "expected no error")
596
+ assert.are.equal(1, #calls)
597
+ assert.are.equal("http://example.com/test", calls[1]["url"])
598
+ end)
599
+
600
+
601
+ it("fetcher-blocked-test-mode", function()
602
+ local blocked_client = sdk.new({
603
+ system = {
604
+ fetch = function(url, fetchdef)
605
+ return {}, nil
606
+ end,
607
+ },
608
+ })
609
+ blocked_client.mode = "test"
610
+
611
+ local blocked_utility = blocked_client:get_utility()
612
+ local ctx = blocked_utility.make_context({
613
+ opname = "load",
614
+ client = blocked_client,
615
+ utility = blocked_utility,
616
+ }, nil)
617
+
618
+ local fetchdef = { method = "GET", headers = {} }
619
+ local _, err = blocked_utility.fetcher(ctx, "http://example.com/test", fetchdef)
620
+ assert.is_not_nil(err, "expected error for test mode fetch")
621
+ local err_msg = tostring(err)
622
+ if type(err) == "table" and err.msg ~= nil then
623
+ err_msg = err.msg
624
+ end
625
+ assert.is_truthy(string.find(err_msg, "blocked"),
626
+ "expected error containing 'blocked', got: " .. err_msg)
627
+ end)
628
+
629
+
630
+ it("makeContext-basic", function()
631
+ runset(get_spec(primary, "makeContext", "basic"), function(entry)
632
+ local in_val = entry["in"]
633
+ if type(in_val) == "table" then
634
+ local ctx = utility.make_context(in_val, nil)
635
+ local out = {
636
+ id = ctx.id,
637
+ }
638
+ if ctx.op ~= nil then
639
+ out["op"] = {
640
+ name = ctx.op.name,
641
+ input = ctx.op.input,
642
+ }
643
+ end
644
+ return out, nil
645
+ end
646
+ return nil, nil
647
+ end)
648
+ end)
649
+
650
+
651
+ it("makeFetchDef-basic", function()
652
+ local ctx = make_test_full_ctx(client, utility)
653
+ ctx.spec = Spec.new({
654
+ base = "http://localhost:8080",
655
+ prefix = "/api",
656
+ path = "items/{id}",
657
+ suffix = "",
658
+ params = { id = "item01" },
659
+ query = {},
660
+ headers = { ["content-type"] = "application/json" },
661
+ method = "GET",
662
+ step = "start",
663
+ })
664
+ ctx.result = Result.new({})
665
+
666
+ local fetchdef, err = utility.make_fetch_def(ctx)
667
+ assert.is_nil(err, "should not be error")
668
+ assert.is_not_nil(fetchdef, "fetchdef should not be nil")
669
+ assert.are.equal("GET", fetchdef["method"])
670
+ local url = fetchdef["url"] or ""
671
+ assert.is_truthy(string.find(url, "/api/items/item01", 1, true),
672
+ "expected url to contain /api/items/item01, got " .. url)
673
+ assert.are.equal("application/json", fetchdef["headers"]["content-type"])
674
+ assert.is_nil(fetchdef["body"], "expected nil body")
675
+ end)
676
+
677
+
678
+ it("makeFetchDef-with-body", function()
679
+ local ctx = make_test_full_ctx(client, utility)
680
+ ctx.spec = Spec.new({
681
+ base = "http://localhost:8080",
682
+ prefix = "",
683
+ path = "items",
684
+ suffix = "",
685
+ params = {},
686
+ query = {},
687
+ headers = {},
688
+ method = "POST",
689
+ step = "start",
690
+ body = { name = "test" },
691
+ })
692
+ ctx.result = Result.new({})
693
+
694
+ local fetchdef, err = utility.make_fetch_def(ctx)
695
+ assert.is_nil(err, "should not be error")
696
+ assert.is_not_nil(fetchdef, "fetchdef should not be nil")
697
+ assert.are.equal("POST", fetchdef["method"])
698
+ local body_str = fetchdef["body"]
699
+ assert.is_not_nil(body_str, "expected body")
700
+ assert.are.equal("string", type(body_str))
701
+ assert.is_truthy(string.find(body_str, '"name"', 1, true),
702
+ "expected body to contain name, got " .. tostring(body_str))
703
+ end)
704
+
705
+
706
+ it("makeOptions-basic", function()
707
+ runset(get_spec(primary, "makeOptions", "basic"), function(entry)
708
+ local in_val = entry["in"]
709
+ if type(in_val) ~= "table" then
710
+ in_val = {}
711
+ end
712
+ local ctx = utility.make_context({
713
+ options = in_val["options"],
714
+ config = in_val["config"],
715
+ }, nil)
716
+ ctx.client = client
717
+ ctx.utility = utility
718
+ return utility.make_options(ctx), nil
719
+ end)
720
+ end)
721
+
722
+
723
+ it("makeRequest-basic", function()
724
+ runset(get_spec(primary, "makeRequest", "basic"), function(entry)
725
+ local ctxmap = entry["ctx"]
726
+ if type(ctxmap) ~= "table" then
727
+ ctxmap = {}
728
+ end
729
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
730
+ ctx.options = client:options_map()
731
+
732
+ local _, err = utility.make_request(ctx)
733
+ if err ~= nil then
734
+ return nil, err
735
+ end
736
+
737
+ -- Update entry ctx for match checking
738
+ local entry_ctx = entry["ctx"]
739
+ if type(entry_ctx) == "table" then
740
+ if ctx.response ~= nil then
741
+ entry_ctx["response"] = "exists"
742
+ end
743
+ if ctx.result ~= nil then
744
+ entry_ctx["result"] = "exists"
745
+ end
746
+ end
747
+
748
+ return nil, nil
749
+ end)
750
+ end)
751
+
752
+
753
+ it("makeResponse-basic", function()
754
+ runset(get_spec(primary, "makeResponse", "basic"), function(entry)
755
+ local ctxmap = entry["ctx"]
756
+ if type(ctxmap) ~= "table" then
757
+ ctxmap = {}
758
+ end
759
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
760
+ fixctx(ctx, client)
761
+
762
+ local _, err = utility.make_response(ctx)
763
+ if err ~= nil then
764
+ return nil, err
765
+ end
766
+
767
+ -- Update entry ctx for match checking with result data
768
+ local entry_ctx = entry["ctx"]
769
+ if type(entry_ctx) == "table" and ctx.result ~= nil then
770
+ entry_ctx["result"] = {
771
+ ok = ctx.result.ok,
772
+ status = ctx.result.status,
773
+ statusText = ctx.result.status_text,
774
+ headers = ctx.result.headers,
775
+ body = ctx.result.body,
776
+ }
777
+ end
778
+
779
+ return nil, nil
780
+ end)
781
+ end)
782
+
783
+
784
+ it("makeResult-basic", function()
785
+ local ctx = make_test_full_ctx(client, utility)
786
+ ctx.spec = Spec.new({
787
+ base = "http://localhost:8080",
788
+ prefix = "/api",
789
+ path = "items/{id}",
790
+ suffix = "",
791
+ params = { id = "item01" },
792
+ query = {},
793
+ headers = {},
794
+ method = "GET",
795
+ step = "start",
796
+ })
797
+ ctx.result = Result.new({
798
+ ok = true,
799
+ status = 200,
800
+ statusText = "OK",
801
+ headers = {},
802
+ resdata = { id = "item01", name = "Test" },
803
+ })
804
+
805
+ local result, err = utility.make_result(ctx)
806
+ assert.is_nil(err, "expected no error")
807
+ assert.is_not_nil(result, "expected result")
808
+ assert.are.equal(200, result.status)
809
+ end)
810
+
811
+
812
+ it("makeResult-no-spec", function()
813
+ local ctx = make_test_full_ctx(client, utility)
814
+ ctx.spec = nil
815
+ ctx.result = Result.new({
816
+ ok = true,
817
+ status = 200,
818
+ statusText = "OK",
819
+ headers = {},
820
+ })
821
+
822
+ local _, err = utility.make_result(ctx)
823
+ assert.is_not_nil(err, "expected error for nil spec")
824
+ end)
825
+
826
+
827
+ it("makeResult-no-result", function()
828
+ local ctx = make_test_full_ctx(client, utility)
829
+ ctx.spec = Spec.new({ step = "start" })
830
+ ctx.result = nil
831
+
832
+ local _, err = utility.make_result(ctx)
833
+ assert.is_not_nil(err, "expected error for nil result")
834
+ end)
835
+
836
+
837
+ it("makeSpec-basic", function()
838
+ local setup_opts = get_spec(primary, "makeSpec", "DEF", "setup", "a")
839
+ local spec_client = sdk.test(nil, setup_opts)
840
+ local spec_utility = spec_client:get_utility()
841
+
842
+ runset(get_spec(primary, "makeSpec", "basic"), function(entry)
843
+ local ctxmap = entry["ctx"]
844
+ if type(ctxmap) ~= "table" then
845
+ ctxmap = {}
846
+ end
847
+ local ctx = make_ctx_from_map(ctxmap, spec_client, spec_utility)
848
+ ctx.options = spec_client:options_map()
849
+
850
+ local _, err = utility.make_spec(ctx)
851
+ if err ~= nil then
852
+ return nil, err
853
+ end
854
+
855
+ -- Update entry ctx for match
856
+ local entry_ctx = entry["ctx"]
857
+ if type(entry_ctx) == "table" and ctx.spec ~= nil then
858
+ entry_ctx["spec"] = {
859
+ base = ctx.spec.base,
860
+ prefix = ctx.spec.prefix,
861
+ suffix = ctx.spec.suffix,
862
+ method = ctx.spec.method,
863
+ params = ctx.spec.params,
864
+ query = ctx.spec.query,
865
+ headers = ctx.spec.headers,
866
+ step = ctx.spec.step,
867
+ }
868
+ end
869
+
870
+ return nil, nil
871
+ end)
872
+ end)
873
+
874
+
875
+ it("makePoint-basic", function()
876
+ local ctx = make_test_ctx(client, utility, nil)
877
+ local point = {
878
+ parts = { "items", "{id}" },
879
+ args = { params = {} },
880
+ params = {},
881
+ alias = {},
882
+ select = {},
883
+ active = true,
884
+ transform = {},
885
+ }
886
+ ctx.op.points = { point }
887
+
888
+ local _, err = utility.make_point(ctx)
889
+ assert.is_nil(err, "expected no error")
890
+ assert.is_not_nil(ctx.point, "expected point to be set")
891
+ end)
892
+
893
+
894
+ it("makeUrl-basic", function()
895
+ runset(get_spec(primary, "makeUrl", "basic"), function(entry)
896
+ local ctxmap = entry["ctx"]
897
+ if type(ctxmap) ~= "table" then
898
+ ctxmap = {}
899
+ end
900
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
901
+ if ctx.result == nil then
902
+ ctx.result = Result.new({})
903
+ end
904
+ return utility.make_url(ctx)
905
+ end)
906
+ end)
907
+
908
+
909
+ it("operator-basic", function()
910
+ runset(get_spec(primary, "operator", "basic"), function(entry)
911
+ local in_val = entry["in"]
912
+ if type(in_val) ~= "table" then
913
+ in_val = {}
914
+ end
915
+ local op = Operation.new(in_val)
916
+ return {
917
+ entity = op.entity,
918
+ name = op.name,
919
+ input = op.input,
920
+ points = op.points,
921
+ }, nil
922
+ end)
923
+ end)
924
+
925
+
926
+ it("param-basic", function()
927
+ runset(get_spec(primary, "param", "basic"), function(entry)
928
+ local args = entry["args"]
929
+ if type(args) ~= "table" or #args < 2 then
930
+ return nil, nil
931
+ end
932
+
933
+ local ctxmap = args[1]
934
+ if type(ctxmap) ~= "table" then
935
+ ctxmap = {}
936
+ end
937
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
938
+ local paramdef = args[2]
939
+
940
+ local result = utility.param(ctx, paramdef)
941
+
942
+ -- Update entry ctx for match
943
+ if type(entry["match"]) == "table" then
944
+ local ctx_match = entry["match"]["ctx"]
945
+ if type(ctx_match) == "table" then
946
+ local entry_ctx = entry["ctx"]
947
+ if entry_ctx == nil then
948
+ entry_ctx = {}
949
+ entry["ctx"] = entry_ctx
950
+ end
951
+ -- Copy spec alias back to entry ctx for matching
952
+ local spec_match = ctx_match["spec"]
953
+ if type(spec_match) == "table" then
954
+ if ctx.spec ~= nil then
955
+ if entry_ctx["spec"] == nil then
956
+ entry_ctx["spec"] = {}
957
+ end
958
+ local alias_match = spec_match["alias"]
959
+ if type(alias_match) == "table" then
960
+ entry_ctx["spec"] = {
961
+ alias = ctx.spec.alias,
962
+ }
963
+ end
964
+ end
965
+ end
966
+ end
967
+ end
968
+
969
+ return result, nil
970
+ end)
971
+ end)
972
+
973
+
974
+ it("prepareAuth-basic", function()
975
+ local setup_opts = get_spec(primary, "prepareAuth", "DEF", "setup", "a")
976
+ local auth_client = sdk.test(nil, setup_opts)
977
+ local auth_utility = auth_client:get_utility()
978
+
979
+ runset(get_spec(primary, "prepareAuth", "basic"), function(entry)
980
+ local ctxmap = entry["ctx"]
981
+ if type(ctxmap) ~= "table" then
982
+ ctxmap = {}
983
+ end
984
+ local ctx = make_ctx_from_map(ctxmap, auth_client, auth_utility)
985
+ fixctx(ctx, auth_client)
986
+
987
+ local _, err = utility.prepare_auth(ctx)
988
+ if err ~= nil then
989
+ return nil, err
990
+ end
991
+
992
+ -- Update entry ctx for match
993
+ local entry_ctx = entry["ctx"]
994
+ if type(entry_ctx) == "table" and ctx.spec ~= nil then
995
+ entry_ctx["spec"] = {
996
+ headers = ctx.spec.headers,
997
+ }
998
+ end
999
+
1000
+ return nil, nil
1001
+ end)
1002
+ end)
1003
+
1004
+
1005
+ it("prepareBody-basic", function()
1006
+ runset(get_spec(primary, "prepareBody", "basic"), function(entry)
1007
+ local ctxmap = entry["ctx"]
1008
+ if type(ctxmap) ~= "table" then
1009
+ ctxmap = {}
1010
+ end
1011
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1012
+ fixctx(ctx, client)
1013
+ return utility.prepare_body(ctx), nil
1014
+ end)
1015
+ end)
1016
+
1017
+
1018
+ it("prepareHeaders-basic", function()
1019
+ runset(get_spec(primary, "prepareHeaders", "basic"), function(entry)
1020
+ local ctxmap = entry["ctx"]
1021
+ if type(ctxmap) ~= "table" then
1022
+ ctxmap = {}
1023
+ end
1024
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1025
+ return utility.prepare_headers(ctx), nil
1026
+ end)
1027
+ end)
1028
+
1029
+
1030
+ it("prepareMethod-basic", function()
1031
+ runset(get_spec(primary, "prepareMethod", "basic"), function(entry)
1032
+ local ctxmap = entry["ctx"]
1033
+ if type(ctxmap) ~= "table" then
1034
+ ctxmap = {}
1035
+ end
1036
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1037
+ return utility.prepare_method(ctx), nil
1038
+ end)
1039
+ end)
1040
+
1041
+
1042
+ it("prepareParams-basic", function()
1043
+ runset(get_spec(primary, "prepareParams", "basic"), function(entry)
1044
+ local ctxmap = entry["ctx"]
1045
+ if type(ctxmap) ~= "table" then
1046
+ ctxmap = {}
1047
+ end
1048
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1049
+ return utility.prepare_params(ctx), nil
1050
+ end)
1051
+ end)
1052
+
1053
+
1054
+ it("preparePath-basic", function()
1055
+ local ctx = make_test_full_ctx(client, utility)
1056
+ ctx.point = {
1057
+ parts = { "api", "planet", "{id}" },
1058
+ args = { params = {} },
1059
+ }
1060
+
1061
+ local path = utility.prepare_path(ctx)
1062
+ assert.are.equal("api/planet/{id}", path)
1063
+ end)
1064
+
1065
+
1066
+ it("preparePath-single", function()
1067
+ local ctx = make_test_full_ctx(client, utility)
1068
+ ctx.point = {
1069
+ parts = { "items" },
1070
+ args = { params = {} },
1071
+ }
1072
+
1073
+ local path = utility.prepare_path(ctx)
1074
+ assert.are.equal("items", path)
1075
+ end)
1076
+
1077
+
1078
+ it("prepareQuery-basic", function()
1079
+ runset(get_spec(primary, "prepareQuery", "basic"), function(entry)
1080
+ local ctxmap = entry["ctx"]
1081
+ if type(ctxmap) ~= "table" then
1082
+ ctxmap = {}
1083
+ end
1084
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1085
+ return utility.prepare_query(ctx), nil
1086
+ end)
1087
+ end)
1088
+
1089
+
1090
+ it("resultBasic-basic", function()
1091
+ runset(get_spec(primary, "resultBasic", "basic"), function(entry)
1092
+ local ctxmap = entry["ctx"]
1093
+ if type(ctxmap) ~= "table" then
1094
+ ctxmap = {}
1095
+ end
1096
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1097
+ fixctx(ctx, client)
1098
+
1099
+ local result = utility.result_basic(ctx)
1100
+
1101
+ local out = {
1102
+ status = result.status,
1103
+ statusText = result.status_text,
1104
+ }
1105
+ if result.err ~= nil then
1106
+ local err_msg = tostring(result.err)
1107
+ if type(result.err) == "table" and result.err.msg ~= nil then
1108
+ err_msg = result.err.msg
1109
+ end
1110
+ out["err"] = {
1111
+ message = err_msg,
1112
+ }
1113
+ end
1114
+
1115
+ return out, nil
1116
+ end)
1117
+ end)
1118
+
1119
+
1120
+ it("resultBody-basic", function()
1121
+ runset(get_spec(primary, "resultBody", "basic"), function(entry)
1122
+ local ctxmap = entry["ctx"]
1123
+ if type(ctxmap) ~= "table" then
1124
+ ctxmap = {}
1125
+ end
1126
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1127
+
1128
+ utility.result_body(ctx)
1129
+
1130
+ -- Update entry ctx for match
1131
+ local entry_ctx = entry["ctx"]
1132
+ if type(entry_ctx) == "table" and ctx.result ~= nil then
1133
+ entry_ctx["result"] = {
1134
+ body = ctx.result.body,
1135
+ }
1136
+ end
1137
+
1138
+ return nil, nil
1139
+ end)
1140
+ end)
1141
+
1142
+
1143
+ it("resultHeaders-basic", function()
1144
+ runset(get_spec(primary, "resultHeaders", "basic"), function(entry)
1145
+ local ctxmap = entry["ctx"]
1146
+ if type(ctxmap) ~= "table" then
1147
+ ctxmap = {}
1148
+ end
1149
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1150
+
1151
+ utility.result_headers(ctx)
1152
+
1153
+ -- Update entry ctx for match
1154
+ local entry_ctx = entry["ctx"]
1155
+ if type(entry_ctx) == "table" and ctx.result ~= nil then
1156
+ entry_ctx["result"] = {
1157
+ headers = ctx.result.headers,
1158
+ }
1159
+ end
1160
+
1161
+ return nil, nil
1162
+ end)
1163
+ end)
1164
+
1165
+
1166
+ it("transformRequest-basic", function()
1167
+ runset(get_spec(primary, "transformRequest", "basic"), function(entry)
1168
+ local ctxmap = entry["ctx"]
1169
+ if type(ctxmap) ~= "table" then
1170
+ ctxmap = {}
1171
+ end
1172
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1173
+
1174
+ local result = utility.transform_request(ctx)
1175
+
1176
+ -- Update entry ctx for match (step changed)
1177
+ local entry_ctx = entry["ctx"]
1178
+ if type(entry_ctx) == "table" and ctx.spec ~= nil then
1179
+ local spec_map = entry_ctx["spec"]
1180
+ if type(spec_map) == "table" then
1181
+ spec_map["step"] = ctx.spec.step
1182
+ end
1183
+ end
1184
+
1185
+ return result, nil
1186
+ end)
1187
+ end)
1188
+
1189
+
1190
+ it("transformResponse-basic", function()
1191
+ runset(get_spec(primary, "transformResponse", "basic"), function(entry)
1192
+ local ctxmap = entry["ctx"]
1193
+ if type(ctxmap) ~= "table" then
1194
+ ctxmap = {}
1195
+ end
1196
+ local ctx = make_ctx_from_map(ctxmap, client, utility)
1197
+
1198
+ local result = utility.transform_response(ctx)
1199
+
1200
+ -- Update entry ctx for match (step changed)
1201
+ local entry_ctx = entry["ctx"]
1202
+ if type(entry_ctx) == "table" and ctx.spec ~= nil then
1203
+ local spec_map = entry_ctx["spec"]
1204
+ if type(spec_map) == "table" then
1205
+ spec_map["step"] = ctx.spec.step
1206
+ end
1207
+ end
1208
+
1209
+ return result, nil
1210
+ end)
1211
+ end)
1212
+
1213
+ end)