http_stub 0.27.0 → 0.28.0.beta1

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 (299) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub/client.rb +18 -0
  3. data/lib/http_stub/client/client.rb +28 -0
  4. data/lib/http_stub/client/request.rb +38 -0
  5. data/lib/http_stub/client/server.rb +20 -0
  6. data/lib/http_stub/client/session.rb +43 -0
  7. data/lib/http_stub/configurator.rb +61 -0
  8. data/lib/http_stub/configurator/endpoint_template.rb +24 -0
  9. data/lib/http_stub/configurator/part.rb +23 -0
  10. data/lib/http_stub/configurator/scenario.rb +42 -0
  11. data/lib/http_stub/configurator/server.rb +53 -0
  12. data/lib/http_stub/configurator/state.rb +41 -0
  13. data/lib/http_stub/configurator/stub.rb +13 -0
  14. data/lib/http_stub/configurator/stub/stub.rb +75 -0
  15. data/lib/http_stub/{configurer/dsl/stub_builder_template.rb → configurator/stub/template.rb} +5 -5
  16. data/lib/http_stub/extensions/core/object.rb +17 -0
  17. data/lib/http_stub/rake/server_tasks.rb +2 -14
  18. data/lib/http_stub/rake/task_generators.rb +3 -3
  19. data/lib/http_stub/server.rb +110 -0
  20. data/lib/http_stub/server/application/application.rb +10 -6
  21. data/lib/http_stub/server/application/request_support.rb +2 -2
  22. data/lib/http_stub/server/application/routes/memory.rb +1 -6
  23. data/lib/http_stub/server/application/routes/scenario.rb +1 -11
  24. data/lib/http_stub/server/application/routes/session.rb +1 -1
  25. data/lib/http_stub/server/application/routes/status.rb +0 -10
  26. data/lib/http_stub/server/application/routes/stub.rb +2 -12
  27. data/lib/http_stub/server/daemon.rb +1 -10
  28. data/lib/http_stub/server/memory/controller.rb +2 -8
  29. data/lib/http_stub/server/memory/initial_state.rb +27 -0
  30. data/lib/http_stub/server/memory/memory.rb +6 -27
  31. data/lib/http_stub/server/registry.rb +3 -1
  32. data/lib/http_stub/server/request/factory.rb +3 -3
  33. data/lib/http_stub/server/response.rb +12 -6
  34. data/lib/http_stub/server/scenario.rb +2 -2
  35. data/lib/http_stub/server/scenario/controller.rb +3 -13
  36. data/lib/http_stub/server/scenario/registry.rb +25 -0
  37. data/lib/http_stub/server/scenario/scenario.rb +13 -8
  38. data/lib/http_stub/server/session.rb +0 -1
  39. data/lib/http_stub/server/session/controller.rb +7 -8
  40. data/lib/http_stub/server/session/identifier_strategy.rb +9 -2
  41. data/lib/http_stub/server/session/registry.rb +7 -13
  42. data/lib/http_stub/server/session/session.rb +4 -8
  43. data/lib/http_stub/server/stdout_logger.rb +13 -0
  44. data/lib/http_stub/server/stub.rb +3 -2
  45. data/lib/http_stub/server/stub/controller.rb +0 -10
  46. data/lib/http_stub/server/stub/empty.rb +2 -1
  47. data/lib/http_stub/server/stub/match/controller.rb +1 -1
  48. data/lib/http_stub/server/stub/match/exact_value_matcher.rb +2 -1
  49. data/lib/http_stub/server/stub/match/omitted_value_matcher.rb +1 -1
  50. data/lib/http_stub/server/stub/match/regexp_value_matcher.rb +1 -2
  51. data/lib/http_stub/server/stub/match/rule/body.rb +7 -29
  52. data/lib/http_stub/server/stub/match/rule/{json_body.rb → json_schema_body.rb} +1 -1
  53. data/lib/http_stub/server/stub/match/rule/method.rb +1 -1
  54. data/lib/http_stub/server/stub/match/rule/schema_body.rb +39 -0
  55. data/lib/http_stub/server/stub/match/rules.rb +6 -6
  56. data/lib/http_stub/server/stub/match/string_value_matcher.rb +1 -2
  57. data/lib/http_stub/server/stub/registry.rb +4 -4
  58. data/lib/http_stub/server/stub/response.rb +2 -6
  59. data/lib/http_stub/server/stub/response/blocks.rb +33 -0
  60. data/lib/http_stub/server/stub/response/body.rb +21 -0
  61. data/lib/http_stub/server/stub/response/file_body.rb +46 -0
  62. data/lib/http_stub/server/stub/response/headers.rb +24 -0
  63. data/lib/http_stub/server/stub/response/response.rb +52 -0
  64. data/lib/http_stub/server/stub/response/text_body.rb +32 -0
  65. data/lib/http_stub/server/stub/stub.rb +17 -11
  66. data/lib/http_stub/server/stub/triggers.rb +16 -5
  67. data/lib/http_stub/server/views/_file_body_response.haml +1 -0
  68. data/lib/http_stub/server/views/_response.haml +6 -1
  69. data/lib/http_stub/server/views/_text_body_response.haml +1 -0
  70. data/lib/http_stub/server/views/application.sass +31 -31
  71. data/lib/http_stub/version.rb +1 -1
  72. data/spec/acceptance/{configurer_part_spec.rb → configurator_part_spec.rb} +8 -8
  73. data/spec/acceptance/cross_origin_support_spec.rb +9 -11
  74. data/spec/acceptance/endpoint_template_spec.rb +5 -5
  75. data/spec/acceptance/scenario_spec.rb +8 -8
  76. data/spec/acceptance/server_defaults_spec.rb +3 -3
  77. data/spec/acceptance/server_memory_spec.rb +13 -5
  78. data/spec/acceptance/server_status_spec.rb +4 -21
  79. data/spec/acceptance/session_spec.rb +8 -11
  80. data/spec/acceptance/stub_body_request_matching_spec.rb +9 -9
  81. data/spec/acceptance/stub_control_values_spec.rb +74 -82
  82. data/spec/acceptance/stub_match_last_spec.rb +60 -80
  83. data/spec/acceptance/stub_match_list_spec.rb +30 -66
  84. data/spec/acceptance/stub_miss_list_spec.rb +19 -27
  85. data/spec/acceptance/stub_response_block_spec.rb +66 -0
  86. data/spec/acceptance/stub_spec.rb +109 -185
  87. data/spec/acceptance/stub_trigger_spec.rb +12 -89
  88. data/spec/helper.rb +32 -10
  89. data/spec/lib/http_stub/client/client_spec.rb +109 -0
  90. data/spec/lib/http_stub/client/request_integration_spec.rb +74 -0
  91. data/spec/lib/http_stub/client/request_spec.rb +32 -0
  92. data/spec/lib/http_stub/client/server_spec.rb +75 -0
  93. data/spec/lib/http_stub/client/session_spec.rb +117 -0
  94. data/spec/lib/http_stub/client_spec.rb +15 -0
  95. data/spec/lib/http_stub/{configurer/dsl/server_endpoint_template_spec.rb → configurator/endpoint_template_spec.rb} +49 -38
  96. data/spec/lib/http_stub/configurator/part_spec.rb +103 -0
  97. data/spec/lib/http_stub/configurator/scenario_spec.rb +162 -0
  98. data/spec/lib/http_stub/configurator/server_spec.rb +344 -0
  99. data/spec/lib/http_stub/configurator/state_spec.rb +113 -0
  100. data/spec/lib/http_stub/configurator/stub/stub_spec.rb +867 -0
  101. data/spec/lib/http_stub/{configurer/dsl/stub_builder_template_spec.rb → configurator/stub/template_spec.rb} +46 -44
  102. data/spec/lib/http_stub/configurator/stub_spec.rb +27 -0
  103. data/spec/lib/http_stub/configurator_spec.rb +113 -0
  104. data/spec/lib/http_stub/extensions/core/hash_spec.rb +3 -3
  105. data/spec/lib/http_stub/extensions/core/object_spec.rb +29 -0
  106. data/spec/lib/http_stub/rake/server_daemon_tasks_smoke_spec.rb +14 -9
  107. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +25 -53
  108. data/spec/lib/http_stub/rake/server_tasks_spec.rb +12 -55
  109. data/spec/lib/http_stub/server/application/application_spec.rb +4 -49
  110. data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +2 -5
  111. data/spec/lib/http_stub/server/application/request_support_integration_spec.rb +4 -4
  112. data/spec/lib/http_stub/server/application/request_support_spec.rb +16 -11
  113. data/spec/lib/http_stub/server/application/routes/memory_spec.rb +1 -21
  114. data/spec/lib/http_stub/server/application/routes/scenario_spec.rb +4 -56
  115. data/spec/lib/http_stub/server/application/routes/session_integration_spec.rb +1 -1
  116. data/spec/lib/http_stub/server/application/routes/status_spec.rb +2 -36
  117. data/spec/lib/http_stub/server/application/routes/stub_integration_spec.rb +3 -34
  118. data/spec/lib/http_stub/server/application/routes/stub_spec.rb +6 -55
  119. data/spec/lib/http_stub/server/daemon_integration_spec.rb +5 -1
  120. data/spec/lib/http_stub/server/daemon_spec.rb +8 -77
  121. data/spec/lib/http_stub/server/memory/controller_spec.rb +2 -28
  122. data/spec/lib/http_stub/server/memory/initial_state_spec.rb +57 -0
  123. data/spec/lib/http_stub/server/memory/memory_spec.rb +28 -116
  124. data/spec/lib/http_stub/server/registry_spec.rb +57 -2
  125. data/spec/lib/http_stub/server/request/factory_spec.rb +8 -6
  126. data/spec/lib/http_stub/server/response_spec.rb +32 -10
  127. data/spec/lib/http_stub/server/scenario/controller_spec.rb +14 -53
  128. data/spec/lib/http_stub/server/scenario/registry_spec.rb +147 -0
  129. data/spec/lib/http_stub/server/scenario/scenario_spec.rb +8 -10
  130. data/spec/lib/http_stub/server/scenario_spec.rb +1 -1
  131. data/spec/lib/http_stub/server/session/controller_spec.rb +4 -5
  132. data/spec/lib/http_stub/server/session/identifier_strategy_spec.rb +15 -48
  133. data/spec/lib/http_stub/server/session/registry_spec.rb +15 -28
  134. data/spec/lib/http_stub/server/session/session_spec.rb +13 -71
  135. data/spec/lib/http_stub/server/stdout_logger_spec.rb +17 -0
  136. data/spec/lib/http_stub/server/stub/controller_spec.rb +7 -65
  137. data/spec/lib/http_stub/server/stub/empty_spec.rb +8 -0
  138. data/spec/lib/http_stub/server/stub/match/controller_spec.rb +2 -2
  139. data/spec/lib/http_stub/server/stub/match/exact_value_matcher_spec.rb +49 -11
  140. data/spec/lib/http_stub/server/stub/match/hash_matcher_spec.rb +4 -4
  141. data/spec/lib/http_stub/server/stub/match/match_spec.rb +4 -4
  142. data/spec/lib/http_stub/server/stub/match/miss_spec.rb +2 -2
  143. data/spec/lib/http_stub/server/stub/match/omitted_value_matcher_spec.rb +31 -12
  144. data/spec/lib/http_stub/server/stub/match/regexp_value_matcher_spec.rb +20 -11
  145. data/spec/lib/http_stub/server/stub/match/rule/body_spec.rb +3 -3
  146. data/spec/lib/http_stub/server/stub/match/rule/{json_body_spec.rb → json_schema_body_spec.rb} +5 -5
  147. data/spec/lib/http_stub/server/stub/match/rule/method_spec.rb +42 -8
  148. data/spec/lib/http_stub/server/stub/match/rule/schema_body_spec.rb +64 -0
  149. data/spec/lib/http_stub/server/stub/match/rules_spec.rb +18 -18
  150. data/spec/lib/http_stub/server/stub/match/string_value_matcher_spec.rb +10 -63
  151. data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +11 -28
  152. data/spec/lib/http_stub/server/stub/registry_spec.rb +6 -13
  153. data/spec/lib/http_stub/server/stub/response/blocks_spec.rb +64 -0
  154. data/spec/lib/http_stub/server/stub/response/body_spec.rb +52 -0
  155. data/spec/lib/http_stub/server/stub/response/file_body_spec.rb +117 -0
  156. data/spec/lib/http_stub/server/stub/response/headers_spec.rb +89 -0
  157. data/spec/lib/http_stub/server/stub/response/response_spec.rb +342 -0
  158. data/spec/lib/http_stub/server/stub/response/text_body_spec.rb +138 -0
  159. data/spec/lib/http_stub/server/stub/response_spec.rb +23 -32
  160. data/spec/lib/http_stub/server/stub/stub_spec.rb +33 -39
  161. data/spec/lib/http_stub/server/stub/triggers_spec.rb +47 -12
  162. data/spec/lib/http_stub/server/stub_spec.rb +1 -1
  163. data/spec/support/extensions/core/random.rb +23 -0
  164. data/spec/support/http_stub/configurator/scenario_builder.rb +35 -0
  165. data/spec/support/http_stub/configurator/scenario_fixture.rb +39 -0
  166. data/spec/support/http_stub/configurator/stub_builder.rb +112 -0
  167. data/spec/support/http_stub/configurator/stub_fixture.rb +58 -0
  168. data/spec/support/http_stub/configurator_fixture.rb +13 -0
  169. data/spec/support/http_stub/configurator_with_stub_builder_and_requester.rb +14 -0
  170. data/spec/support/http_stub/headers_fixture.rb +11 -0
  171. data/spec/support/http_stub/{html_view_excluding_request_details.rb → html_view_excluding_a_stub_request.rb} +2 -2
  172. data/spec/support/http_stub/{html_view_including_request_details.rb → html_view_including_a_stub_request.rb} +20 -12
  173. data/spec/support/http_stub/port.rb +12 -0
  174. data/spec/support/http_stub/server/application/http_stub_rack_application_test.rb +2 -3
  175. data/spec/support/http_stub/server/driver.rb +20 -15
  176. data/spec/support/http_stub/server/memory_fixture.rb +2 -2
  177. data/spec/support/http_stub/server/request/sinatra_request_fixture.rb +16 -0
  178. data/spec/support/http_stub/server/request_fixture.rb +11 -6
  179. data/spec/support/http_stub/server/scenario_fixture.rb +14 -2
  180. data/spec/support/http_stub/server/session_fixture.rb +2 -16
  181. data/spec/support/http_stub/server/silent_logger.rb +7 -0
  182. data/spec/support/http_stub/server/simple_request.rb +17 -0
  183. data/spec/support/http_stub/server/stub/match/match_fixture.rb +1 -1
  184. data/spec/support/http_stub/server/stub/response/blocks_fixture.rb +54 -0
  185. data/spec/support/http_stub/server/stub/response/file_body_fixture.rb +25 -0
  186. data/spec/support/http_stub/server/stub/response/text_body_fixture.rb +33 -0
  187. data/spec/support/http_stub/server/stub/response_builder.rb +24 -0
  188. data/spec/support/http_stub/server/stub/response_fixture.rb +15 -0
  189. data/spec/support/http_stub/server/stub_fixture.rb +21 -0
  190. data/spec/support/http_stub/server_integration.rb +9 -6
  191. data/spec/support/http_stub/stub_requester.rb +37 -0
  192. data/spec/support/object_convertable_to_json.rb +11 -0
  193. data/spec/support/rack/rack_application_test.rb +1 -1
  194. data/spec/support/rack/request_fixture.rb +22 -4
  195. metadata +166 -207
  196. data/lib/http_stub.rb +0 -131
  197. data/lib/http_stub/configurer.rb +0 -42
  198. data/lib/http_stub/configurer/dsl/request_attribute_referencer.rb +0 -19
  199. data/lib/http_stub/configurer/dsl/request_referencer.rb +0 -24
  200. data/lib/http_stub/configurer/dsl/scenario_builder.rb +0 -39
  201. data/lib/http_stub/configurer/dsl/server.rb +0 -80
  202. data/lib/http_stub/configurer/dsl/server_endpoint_template.rb +0 -23
  203. data/lib/http_stub/configurer/dsl/session.rb +0 -51
  204. data/lib/http_stub/configurer/dsl/session_endpoint_template.rb +0 -22
  205. data/lib/http_stub/configurer/dsl/session_factory.rb +0 -34
  206. data/lib/http_stub/configurer/dsl/stub_builder.rb +0 -65
  207. data/lib/http_stub/configurer/part.rb +0 -23
  208. data/lib/http_stub/configurer/request/controllable_value.rb +0 -19
  209. data/lib/http_stub/configurer/request/http/basic.rb +0 -27
  210. data/lib/http_stub/configurer/request/http/factory.rb +0 -33
  211. data/lib/http_stub/configurer/request/http/multipart.rb +0 -34
  212. data/lib/http_stub/configurer/request/omittable.rb +0 -26
  213. data/lib/http_stub/configurer/request/regexpable.rb +0 -33
  214. data/lib/http_stub/configurer/request/scenario.rb +0 -29
  215. data/lib/http_stub/configurer/request/stub.rb +0 -39
  216. data/lib/http_stub/configurer/request/stub_response.rb +0 -38
  217. data/lib/http_stub/configurer/request/stub_response_file.rb +0 -20
  218. data/lib/http_stub/configurer/request/triggers.rb +0 -25
  219. data/lib/http_stub/configurer/server/buffered_command_processor.rb +0 -24
  220. data/lib/http_stub/configurer/server/command.rb +0 -22
  221. data/lib/http_stub/configurer/server/command_processor.rb +0 -35
  222. data/lib/http_stub/configurer/server/configuration.rb +0 -33
  223. data/lib/http_stub/configurer/server/facade.rb +0 -61
  224. data/lib/http_stub/configurer/server/request_processor.rb +0 -30
  225. data/lib/http_stub/configurer/server/session_facade.rb +0 -57
  226. data/lib/http_stub/server/application/configuration.rb +0 -38
  227. data/lib/http_stub/server/application/response_pipeline.rb +0 -20
  228. data/lib/http_stub/server/application/response_support.rb +0 -19
  229. data/lib/http_stub/server/scenario/parser.rb +0 -17
  230. data/lib/http_stub/server/session/configuration.rb +0 -32
  231. data/lib/http_stub/server/status/controller.rb +0 -25
  232. data/lib/http_stub/server/stub/parser.rb +0 -17
  233. data/lib/http_stub/server/stub/payload.rb +0 -20
  234. data/lib/http_stub/server/stub/payload/base_uri_modifier.rb +0 -17
  235. data/lib/http_stub/server/stub/payload/response_body_modifier.rb +0 -21
  236. data/lib/http_stub/server/stub/response/attribute/body.rb +0 -32
  237. data/lib/http_stub/server/stub/response/attribute/headers.rb +0 -32
  238. data/lib/http_stub/server/stub/response/attribute/interpolator.rb +0 -26
  239. data/lib/http_stub/server/stub/response/attribute/interpolator/headers.rb +0 -27
  240. data/lib/http_stub/server/stub/response/attribute/interpolator/parameters.rb +0 -27
  241. data/lib/http_stub/server/stub/response/base.rb +0 -61
  242. data/lib/http_stub/server/stub/response/file.rb +0 -45
  243. data/lib/http_stub/server/stub/response/text.rb +0 -35
  244. data/lib/http_stub/server/views/_file_response.haml +0 -1
  245. data/lib/http_stub/server/views/_text_response.haml +0 -1
  246. data/spec/acceptance/configurer_initialization_spec.rb +0 -157
  247. data/spec/acceptance/request_reference_spec.rb +0 -42
  248. data/spec/lib/http_stub/configurer/dsl/request_attribute_referencer_spec.rb +0 -37
  249. data/spec/lib/http_stub/configurer/dsl/request_referencer_spec.rb +0 -37
  250. data/spec/lib/http_stub/configurer/dsl/scenario_builder_spec.rb +0 -201
  251. data/spec/lib/http_stub/configurer/dsl/server_spec.rb +0 -575
  252. data/spec/lib/http_stub/configurer/dsl/session_endpoint_template_spec.rb +0 -150
  253. data/spec/lib/http_stub/configurer/dsl/session_factory_spec.rb +0 -97
  254. data/spec/lib/http_stub/configurer/dsl/session_spec.rb +0 -210
  255. data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +0 -747
  256. data/spec/lib/http_stub/configurer/part_spec.rb +0 -103
  257. data/spec/lib/http_stub/configurer/request/controllable_value_spec.rb +0 -34
  258. data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +0 -91
  259. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +0 -222
  260. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +0 -118
  261. data/spec/lib/http_stub/configurer/request/omittable_spec.rb +0 -70
  262. data/spec/lib/http_stub/configurer/request/regexpable_spec.rb +0 -77
  263. data/spec/lib/http_stub/configurer/request/scenario_spec.rb +0 -69
  264. data/spec/lib/http_stub/configurer/request/stub_response_spec.rb +0 -195
  265. data/spec/lib/http_stub/configurer/request/stub_spec.rb +0 -231
  266. data/spec/lib/http_stub/configurer/request/triggers_spec.rb +0 -101
  267. data/spec/lib/http_stub/configurer/server/buffered_command_processor_spec.rb +0 -35
  268. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +0 -75
  269. data/spec/lib/http_stub/configurer/server/command_spec.rb +0 -26
  270. data/spec/lib/http_stub/configurer/server/configuration_spec.rb +0 -139
  271. data/spec/lib/http_stub/configurer/server/facade_spec.rb +0 -235
  272. data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +0 -100
  273. data/spec/lib/http_stub/configurer/server/session_facade_spec.rb +0 -285
  274. data/spec/lib/http_stub/configurer_spec.rb +0 -105
  275. data/spec/lib/http_stub/server/application/configuration_spec.rb +0 -59
  276. data/spec/lib/http_stub/server/application/response_pipeline_spec.rb +0 -29
  277. data/spec/lib/http_stub/server/application/response_support_spec.rb +0 -30
  278. data/spec/lib/http_stub/server/scenario/parser_spec.rb +0 -64
  279. data/spec/lib/http_stub/server/session/configuration_spec.rb +0 -94
  280. data/spec/lib/http_stub/server/status/controller_spec.rb +0 -47
  281. data/spec/lib/http_stub/server/stub/parser_spec.rb +0 -56
  282. data/spec/lib/http_stub/server/stub/payload/base_uri_modifier_spec.rb +0 -23
  283. data/spec/lib/http_stub/server/stub/payload/response_body_modifier_spec.rb +0 -84
  284. data/spec/lib/http_stub/server/stub/payload_spec.rb +0 -33
  285. data/spec/lib/http_stub/server/stub/response/attribute/body_spec.rb +0 -98
  286. data/spec/lib/http_stub/server/stub/response/attribute/headers_spec.rb +0 -73
  287. data/spec/lib/http_stub/server/stub/response/attribute/interpolator/headers_spec.rb +0 -53
  288. data/spec/lib/http_stub/server/stub/response/attribute/interpolator/parameters_spec.rb +0 -53
  289. data/spec/lib/http_stub/server/stub/response/attribute/interpolator_spec.rb +0 -41
  290. data/spec/lib/http_stub/server/stub/response/base_spec.rb +0 -217
  291. data/spec/lib/http_stub/server/stub/response/file_spec.rb +0 -197
  292. data/spec/lib/http_stub/server/stub/response/text_spec.rb +0 -182
  293. data/spec/resources/sample.pdf +0 -0
  294. data/spec/resources/sample.txt +0 -1
  295. data/spec/support/http_stub/configurer_integration.rb +0 -24
  296. data/spec/support/http_stub/empty_configurer.rb +0 -7
  297. data/spec/support/http_stub/scenario_fixture.rb +0 -33
  298. data/spec/support/http_stub/stub_fixture.rb +0 -125
  299. data/spec/support/http_stub/stub_registrator.rb +0 -83
@@ -0,0 +1,58 @@
1
+ module HttpStub
2
+ module Configurator
3
+
4
+ class StubFixture
5
+
6
+ class << self
7
+
8
+ def create_hash(args={})
9
+ stub_id = args[:id] || next_id
10
+ {
11
+ id: stub_id,
12
+ match_rules: {
13
+ uri: "/uri/#{stub_id}",
14
+ method: :get,
15
+ headers: { "header_#{stub_id}" => "header value #{stub_id}" },
16
+ parameters: { "parameter_#{stub_id}" => "parameter value #{stub_id}" },
17
+ },
18
+ response: {
19
+ status: 200,
20
+ body: "body #{stub_id}"
21
+ },
22
+ triggers: {
23
+ scenario_names: [],
24
+ stubs: []
25
+ }
26
+ }
27
+ end
28
+
29
+ def create(args={})
30
+ hash = self.create_hash(args)
31
+ HttpStub::Configurator::Stub.create do |stub|
32
+ stub.match_requests(hash[:match_rules])
33
+ stub.respond_with(hash[:response])
34
+ stub.trigger(hash[:triggers])
35
+ end
36
+ end
37
+
38
+ def create_hashes
39
+ (1..3).map { self.create_hash }
40
+ end
41
+
42
+ def many
43
+ (1..3).map { self.create }
44
+ end
45
+
46
+ private
47
+
48
+ def next_id
49
+ @next_id ||= 0
50
+ "#{@next_id += 1}"
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,13 @@
1
+ module HttpStub
2
+
3
+ class ConfiguratorFixture
4
+
5
+ def self.create(args={})
6
+ Class.new.tap do |configurator|
7
+ configurator.send(:include, HttpStub::Configurator)
8
+ configurator.stub_server.port = args[:port] || HttpStub::Port.free_port
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ shared_context "configurator with stub builder and requester" do
2
+
3
+ let(:configurator) { HttpStub::Examples::ConfiguratorWithComprehensiveStubs }
4
+
5
+ let(:stub_builder) { configurator.stub_builder }
6
+ let(:stub_requester) { HttpStub::StubRequester.new(server_uri, stub_builder) }
7
+
8
+ let(:stub_match_rules) { stub_builder.match_rules }
9
+ let(:stub_response) { stub_builder.response }
10
+ let(:expected_match_response) { stub_requester.expected_response }
11
+
12
+ let(:stub_request) { stub_requester.last_request }
13
+
14
+ end
@@ -0,0 +1,11 @@
1
+ module HttpStub
2
+
3
+ class HeadersFixture
4
+
5
+ def self.many
6
+ (1..3).each_with_object({}) { |i, hash| hash["header_name_#{i}"] = "value #{Random.string}" }
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -1,11 +1,11 @@
1
- shared_context "HTML view excluding request details" do
1
+ shared_context "HTML view excluding a stub request" do
2
2
 
3
3
  it "returns a 200 response" do
4
4
  expect(response.code).to eql(200)
5
5
  end
6
6
 
7
7
  it "returns a response body that does not include the request" do
8
- expect(response.body).to_not include(escape_html(stub_registrator.request_uri))
8
+ expect(response.body).to_not include(escape_html(stub_request[:uri]))
9
9
  end
10
10
 
11
11
  end
@@ -1,31 +1,39 @@
1
- shared_context "HTML view including request details" do
1
+ shared_context "HTML view including a stub request" do
2
+
3
+ let(:ensure_stub_request_is_issued) { response }
2
4
 
3
5
  it "returns a 200 response" do
4
6
  expect(response.code).to eql(200)
5
7
  end
6
8
 
7
9
  it "returns a response body that contains the uri of the request" do
8
- expect(response.body).to include(escape_html(stub_registrator.request_body))
10
+ ensure_stub_request_is_issued
11
+
12
+ expect(response.body).to include(escape_html(stub_request[:uri]))
9
13
  end
10
14
 
11
15
  it "returns a response body that contains the method of the request" do
12
- expect(response.body).to include(escape_html(stub_registrator.request_method))
16
+ ensure_stub_request_is_issued
17
+
18
+ expect(response.body).to include(escape_html(stub_request[:method]))
13
19
  end
14
20
 
15
21
  it "returns a response body that contains the headers of the request whose names are in uppercase" do
16
- stub_registrator.request_headers.each do |expected_header_key, expected_header_value|
22
+ ensure_stub_request_is_issued
23
+
24
+ stub_request[:headers].each do |expected_header_key, expected_header_value|
17
25
  expect(response.body).to include("#{expected_header_key.upcase}:#{expected_header_value}")
18
26
  end
19
27
  end
20
28
 
21
29
  context "when the request contains parameters" do
22
30
 
23
- def configure_stub_registrator
24
- stub_registrator.with_request_parameters
25
- end
31
+ before(:example) { stub_builder.with_request_parameters! }
26
32
 
27
33
  it "returns a response body that contains the parameters" do
28
- stub_registrator.request_parameters.each do |expected_parameter_key, expected_parameter_value|
34
+ ensure_stub_request_is_issued
35
+
36
+ stub_request[:parameters].each do |expected_parameter_key, expected_parameter_value|
29
37
  expect(response.body).to include("#{expected_parameter_key}=#{expected_parameter_value}")
30
38
  end
31
39
  end
@@ -34,12 +42,12 @@ shared_context "HTML view including request details" do
34
42
 
35
43
  context "when the request contains a body" do
36
44
 
37
- def configure_stub_registrator
38
- stub_registrator.with_request_body
39
- end
45
+ before(:example) { stub_builder.with_request_body! }
40
46
 
41
47
  it "returns a response body that contains the body" do
42
- expect(response.body).to include("#{escape_html(stub_registrator.request_body)}")
48
+ ensure_stub_request_is_issued
49
+
50
+ expect(response.body).to include("#{escape_html(stub_request[:body])}")
43
51
  end
44
52
 
45
53
  end
@@ -0,0 +1,12 @@
1
+ module HttpStub
2
+
3
+ class Port
4
+
5
+ def self.free_port
6
+ tcp_server = TCPServer.new(@host, 0)
7
+ tcp_server.local_address.ip_port.tap { tcp_server.close }
8
+ end
9
+
10
+ end
11
+
12
+ end
@@ -7,14 +7,13 @@ shared_context "http_stub rack application test" do
7
7
  let(:request) { HttpStub::Server::RequestFixture.create }
8
8
  let(:request_factory) { instance_double(HttpStub::Server::Request::Factory, create: request) }
9
9
 
10
- let(:response_pipeline) { instance_double(HttpStub::Server::Application::ResponsePipeline, process: nil) }
10
+ let(:configurator) { Class.new { include HttpStub::Configurator } }
11
11
 
12
12
  let(:app_class) { HttpStub::Server::Application::Application }
13
- let(:app) { app_class.new! }
14
13
 
15
14
  before(:example) do
15
+ app_class.configure(configurator)
16
16
  allow(HttpStub::Server::Request::Factory).to receive(:new).and_return(request_factory)
17
- allow(HttpStub::Server::Application::ResponsePipeline).to receive(:new).and_return(response_pipeline)
18
17
  end
19
18
 
20
19
  shared_context "enabled session support" do
@@ -5,15 +5,16 @@ module HttpStub
5
5
 
6
6
  DRIVERS = {}
7
7
 
8
- private_constant :DRIVERS
8
+ DEV_NULL = "/dev/null".freeze
9
9
 
10
- attr_reader :session_id, :host, :port, :uri
10
+ private_constant :DRIVERS, :DEV_NULL
11
+
12
+ attr_reader :session_id, :host, :port, :uri, :client
11
13
 
12
14
  class << self
13
15
 
14
- def find_or_create(specification)
15
- resolved_specification = { name: "example_server", port: 8001 }.merge(specification)
16
- DRIVERS[resolved_specification] ||= self.new(resolved_specification)
16
+ def find_or_create(configurator)
17
+ DRIVERS[configurator] ||= self.new(configurator)
17
18
  end
18
19
 
19
20
  def all
@@ -22,18 +23,22 @@ module HttpStub
22
23
 
23
24
  end
24
25
 
25
- def initialize(specification)
26
- @name = specification[:name]
27
- @host = "localhost"
28
- @port = specification[:port]
29
- @uri = "http://#{@host}:#{@port}"
26
+ def initialize(configurator)
27
+ @configurator = configurator
28
+ @host = "localhost"
30
29
  end
31
30
 
32
31
  def start
33
- return if @pid
34
- @pid = Process.spawn("rake #{@name}:start:foreground", out: "/dev/null", err: "/dev/null")
35
- ::Wait.until!(description: "http stub server #{@name} started") do
36
- Net::HTTP.get_response(@host, "/", @port)
32
+ return if @port
33
+ ::Wait.until!(description: "server on an available port started") do
34
+ @port = HttpStub::Port.free_port
35
+ @pid = Process.spawn("rake launch_server configurator=#{@configurator.name} port=#{@port}", out: DEV_NULL,
36
+ err: DEV_NULL)
37
+ ::Wait.until!(description: "http stub server for #{@configurator.name} started", timeout_in_seconds: 3) do
38
+ Net::HTTP.get_response(@host, "/http_stub/status", @port)
39
+ @uri = "http://#{@host}:#{@port}"
40
+ @client = HttpStub::Client.create(@uri)
41
+ end
37
42
  end
38
43
  end
39
44
 
@@ -42,7 +47,7 @@ module HttpStub
42
47
  end
43
48
 
44
49
  def reset_session
45
- HTTParty.post("#{@uri}/http_stub/stubs/reset", body: { http_stub_session_id: @session_id })
50
+ @client.session(@session_id).reset!
46
51
  end
47
52
 
48
53
  def stop
@@ -5,8 +5,8 @@ module HttpStub
5
5
 
6
6
  class << self
7
7
 
8
- def create(session_configuration=HttpStub::Server::Session::Configuration.new(nil))
9
- HttpStub::Server::Memory::Memory.new(session_configuration)
8
+ def create(configurator_state=HttpStub::Configurator::State.new)
9
+ HttpStub::Server::Memory::Memory.new(configurator_state)
10
10
  end
11
11
 
12
12
  end
@@ -0,0 +1,16 @@
1
+ module HttpStub
2
+ module Server
3
+ module Request
4
+
5
+ class SinatraRequestFixture
6
+
7
+ def self.create(args={})
8
+ rack_request = Rack::RequestFixture.create(args)
9
+ HttpStub::Server::Request::SinatraRequest.new(rack_request, rack_request.params)
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
16
+ end
@@ -5,17 +5,22 @@ module HttpStub
5
5
 
6
6
  class << self
7
7
 
8
- def create(rack_request=Rack::RequestFixture.create)
9
- request_factory.create(rack_request, rack_request.params, HttpServerManager::Test::SilentLogger)
8
+ def create(args={})
9
+ rack_request = args[:rack_request] || create_rack_request(args)
10
+ request_factory.create(rack_request, rack_request.params, HttpStub::Server::SilentLogger)
10
11
  end
11
12
 
12
13
  private
13
14
 
15
+ def create_rack_request(args)
16
+ rack_request_args = args.merge({}).tap { |rack_request_args| rack_request_args.delete(:session_id) }
17
+ rack_request_args.deep_merge!(headers: { session_id: args[:session_id] }) if args[:session_id]
18
+ Rack::RequestFixture.create(rack_request_args)
19
+ end
20
+
14
21
  def request_factory
15
- @session_configuration ||= HttpStub::Server::Session::Configuration.new(nil)
16
- @request_factory ||= HttpStub::Server::Request::Factory.new(
17
- @session_configuration, HttpStub::Server::MemoryFixture.create(@session_configuration)
18
- )
22
+ @server_memory ||= HttpStub::Server::Memory::Memory.new(HttpStub::Configurator::State.new)
23
+ @request_factory ||= HttpStub::Server::Request::Factory.new({ header: :session_id }, @server_memory)
19
24
  end
20
25
 
21
26
  end
@@ -3,8 +3,20 @@ module HttpStub
3
3
 
4
4
  class ScenarioFixture
5
5
 
6
- def self.create(name="empty")
7
- HttpStub::Server::Scenario::Scenario.new("name" => name, "stubs" => [], "triggered_scenario_names" => [])
6
+ class << self
7
+
8
+ def with_stubs(args={})
9
+ self.create(args.merge(stubs: HttpStub::Configurator::StubFixture.create_hashes))
10
+ end
11
+
12
+ def create(args={})
13
+ HttpStub::Server::Scenario::Scenario.new(HttpStub::Configurator::ScenarioFixture.create_hash(args))
14
+ end
15
+
16
+ def many
17
+ (1..3).map { self.create }
18
+ end
19
+
8
20
  end
9
21
 
10
22
  end
@@ -3,22 +3,8 @@ module HttpStub
3
3
 
4
4
  class SessionFixture
5
5
 
6
- class << self
7
-
8
- def create(id=SecureRandom.uuid)
9
- HttpStub::Server::Session::Session.new(id, scenario_registry, HttpStub::Server::Session::Empty)
10
- end
11
-
12
- def memory
13
- self.create(HttpStub::Server::Session::MEMORY_SESSION_ID)
14
- end
15
-
16
- private
17
-
18
- def scenario_registry
19
- @scenario_registry ||= HttpStub::Server::Registry.new("scenario")
20
- end
21
-
6
+ def self.create(id=SecureRandom.uuid)
7
+ HttpStub::Server::Session::Session.new(id, HttpStub::Server::Registry.new("scenario"), [])
22
8
  end
23
9
 
24
10
  end
@@ -0,0 +1,7 @@
1
+ module HttpStub
2
+ module Server
3
+
4
+ SilentLogger = HttpServerManager::Test::SilentLogger
5
+
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ module HttpStub
2
+ module Server
3
+
4
+ class SimpleRequest
5
+
6
+ attr_reader :headers, :parameters
7
+
8
+ def initialize(args)
9
+ resolved_args = { headers: {}, parameters: {} }.with_indifferent_access.merge(args)
10
+ @headers = resolved_args[:headers]
11
+ @parameters = resolved_args[:parameters]
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -9,7 +9,7 @@ module HttpStub
9
9
  HttpStub::Server::Stub::Match::Match.new(
10
10
  HttpStub::Server::RequestFixture.create,
11
11
  HttpStub::Server::Response::OK,
12
- HttpStub::Server::Stub::Stub.new(HttpStub::StubFixture.new.server_payload)
12
+ HttpStub::Server::StubFixture.create
13
13
  )
14
14
  end
15
15
 
@@ -0,0 +1,54 @@
1
+ module HttpStub
2
+ module Server
3
+ module Stub
4
+ module Response
5
+
6
+ class BlocksFixture
7
+
8
+ class << self
9
+
10
+ def simple
11
+ lambda do
12
+ {
13
+ status: 200,
14
+ headers: HttpStub::HeadersFixture.many,
15
+ body: "simple content",
16
+ delay_in_seconds: 8
17
+ }
18
+ end
19
+ end
20
+
21
+ def containing(value)
22
+ lambda do
23
+ {
24
+ status: 201,
25
+ headers: HttpStub::HeadersFixture.many,
26
+ body: "value provided = #{value}",
27
+ delay_in_seconds: 18
28
+ }
29
+ end
30
+ end
31
+
32
+ def with_request_interpolation
33
+ lambda do |request|
34
+ {
35
+ status: 200,
36
+ headers: HttpStub::HeadersFixture.many,
37
+ body: "parameter[:some_parameter] = #{request.parameters[:some_parameter]}",
38
+ delay_in_seconds: 28
39
+ }
40
+ end
41
+ end
42
+
43
+ def many
44
+ [ simple, containing("some value"), with_request_interpolation ]
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end