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
@@ -1,109 +1,73 @@
1
1
  describe "Stub match list acceptance" do
2
- include_context "configurer integration"
2
+ include_context "server integration"
3
3
 
4
4
  describe "GET /http_stub/stubs/matches" do
5
+ include_context "configurator with stub builder and requester"
5
6
 
6
- let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs/matches") }
7
+ let(:response) do
8
+ request_prior_to_match_list_request
9
+ HTTParty.get("#{server_uri}/http_stub/stubs/matches")
10
+ end
7
11
  let(:response_document) { Nokogiri::HTML(response.body) }
8
12
 
9
- before(:example) { configure_stub_registrator }
10
-
11
13
  context "when a request has been made matching a stub" do
12
14
 
13
- before(:example) do
14
- stub_registrator.register_stub
15
-
16
- stub_registrator.issue_matching_request
17
- end
15
+ let(:request_prior_to_match_list_request) { stub_requester.issue_matching_request }
18
16
 
19
- include_context "HTML view including request details"
17
+ include_context "HTML view including a stub request"
20
18
 
21
19
  it "returns a response body that contains stub response status" do
22
- expect(response.body).to match(/#{escape_html(stub_registrator.stub_response_status)}/)
20
+ expect(response.body).to match(/#{escape_html(stub_response[:status])}/)
23
21
  end
24
22
 
25
23
  it "returns a response body that contains stub response headers" do
26
- stub_registrator.stub_response_headers.each do |expected_header_key, expected_header_value|
24
+ stub_response[:headers].each do |expected_header_key, expected_header_value|
27
25
  expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
28
26
  end
29
27
  end
30
28
 
31
29
  it "returns a response body that contains stub response body" do
32
- expect(response.body).to match(/#{escape_html(stub_registrator.stub_response_body)}/)
30
+ expect(response.body).to match(/#{escape_html(stub_response[:body])}/)
33
31
  end
34
32
 
35
33
  it "returns a response body that contains a link to the matched stub" do
36
34
  stub_link = response_document.css("a.stub").first
37
- expect(stub_registrator.stub_uri).to end_with(stub_link["href"])
35
+ expect(stub_builder.stub_uri).to end_with(stub_link["href"])
38
36
  end
39
37
 
40
- end
41
-
42
- context "when a request has been made matching a stub whose response includes request references" do
43
-
44
- before(:example) do
45
- stub_registrator.with_request_parameters
46
- stub_registrator.with_request_interpolation
47
-
48
- stub_registrator.register_stub
38
+ context "whose response includes request interpolation" do
49
39
 
50
- stub_registrator.issue_matching_request
51
- end
52
-
53
- it "returns a response body that contains stub response status" do
54
- expect(response.body).to match(/#{stub_registrator.stub_response_status}/)
55
- end
40
+ before(:example) { stub_builder.with_request_parameters!.and.with_request_interpolation! }
56
41
 
57
- it "returns a response body that contains stub response headers with interpolated request references" do
58
- expected_stub_response_headers = {
59
- header_reference: "request header value 2",
60
- parameter_reference: "parameter value 2"
61
- }
42
+ it "returns a response body that contains the matches response status" do
43
+ expect(response.body).to match(/#{expected_match_response[:status]}/)
44
+ end
62
45
 
63
- expected_stub_response_headers.each do |expected_header_key, expected_header_value|
64
- expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
46
+ it "returns a response body that contains the matches response headers with interpolated request references" do
47
+ expected_match_response[:headers].each do |expected_header_key, expected_header_value|
48
+ expect(response.body).to match(/#{expected_header_key}:#{expected_header_value}/)
49
+ end
65
50
  end
66
- end
67
51
 
68
- it "returns a response body that contains stub response body with interpolated request references" do
69
- expected_stub_response_body = "header: request header value 3, parameter: parameter value 3"
52
+ it "returns a response body that contains the matches response body with interpolated request references" do
53
+ expect(response.body).to match(/#{escape_html(expected_match_response[:body])}/)
54
+ end
70
55
 
71
- expect(response.body).to match(/#{escape_html(expected_stub_response_body)}/)
72
- end
56
+ it "returns a response body that contains a link to the matched stub" do
57
+ stub_link = response_document.css("a.stub").first
58
+ expect(stub_builder.stub_uri).to end_with(stub_link["href"])
59
+ end
73
60
 
74
- it "returns a response body that contains a link to the matched stub" do
75
- stub_link = response_document.css("a.stub").first
76
- expect(stub_registrator.stub_uri).to end_with(stub_link["href"])
77
61
  end
78
62
 
79
63
  end
80
64
 
81
65
  context "when a request has been made that does not match a stub" do
82
66
 
83
- before(:example) { stub_registrator.issue_matching_request }
84
-
85
- include_context "HTML view excluding request details"
86
-
87
- end
88
-
89
- context "when a request has been made configuring a stub" do
67
+ let(:request_prior_to_match_list_request) { stub_requester.issue_non_matching_request }
90
68
 
91
- before(:example) { stub_registrator.register_stub }
92
-
93
- include_context "HTML view excluding request details"
94
-
95
- end
96
-
97
- context "when a request has been made configuring a scenario" do
98
-
99
- before(:example) { stub_registrator.register_scenario }
100
-
101
- include_context "HTML view excluding request details"
102
-
103
- end
69
+ include_context "HTML view excluding a stub request"
104
70
 
105
- def configure_stub_registrator
106
- # intentionally blank
107
71
  end
108
72
 
109
73
  end
@@ -1,12 +1,16 @@
1
1
  describe "Stub miss list acceptance" do
2
- include_context "configurer integration"
2
+ include_context "server integration"
3
3
 
4
4
  describe "GET /http_stub/stubs/misses" do
5
+ include_context "configurator with stub builder and requester"
5
6
 
6
- let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs/misses") }
7
- let(:response_document) { Nokogiri::HTML(response.body) }
7
+ let(:request_prior_to_miss_list_request) { nil }
8
8
 
9
- before(:example) { configure_stub_registrator }
9
+ let(:response) do
10
+ request_prior_to_miss_list_request
11
+ HTTParty.get("#{server_uri}/http_stub/stubs/misses")
12
+ end
13
+ let(:response_document) { Nokogiri::HTML(response.body) }
10
14
 
11
15
  context "when no miss has been registered" do
12
16
 
@@ -16,44 +20,32 @@ describe "Stub miss list acceptance" do
16
20
 
17
21
  end
18
22
 
19
- context "when a request has been made that does not match a stub" do
20
-
21
- before(:example) { stub_registrator.issue_matching_request }
22
-
23
- include_context "HTML view including request details"
24
-
25
- end
23
+ context "when the only request made activates a scenario" do
26
24
 
27
- context "when a request has been made matching a stub" do
25
+ let(:configurator) { HttpStub::Examples::ConfiguratorWithTrivialScenarios }
28
26
 
29
- before(:example) do
30
- stub_registrator.register_stub
27
+ let(:request_prior_to_miss_list_request) { client.activate!("Scenario 1") }
31
28
 
32
- stub_registrator.issue_matching_request
29
+ it "returns a response with an empty request list" do
30
+ expect(response.body).to_not include("Request")
33
31
  end
34
32
 
35
- include_context "HTML view excluding request details"
36
-
37
33
  end
38
34
 
39
- context "when a request has been made configuring a stub" do
35
+ context "when a request has been made that does not match a stub" do
40
36
 
41
- before(:example) { stub_registrator.register_stub }
37
+ let(:request_prior_to_miss_list_request) { stub_requester.issue_non_matching_request }
42
38
 
43
- include_context "HTML view excluding request details"
39
+ include_context "HTML view including a stub request"
44
40
 
45
41
  end
46
42
 
47
- context "when a request has been made configuring a scenario" do
48
-
49
- before(:example) { stub_registrator.register_scenario }
43
+ context "when a request has been made matching a stub" do
50
44
 
51
- include_context "HTML view excluding request details"
45
+ let(:request_prior_to_miss_list_request) { stub_requester.issue_matching_request }
52
46
 
53
- end
47
+ include_context "HTML view excluding a stub request"
54
48
 
55
- def configure_stub_registrator
56
- # intentionally blank
57
49
  end
58
50
 
59
51
  end
@@ -0,0 +1,66 @@
1
+ describe "Stub response block acceptance" do
2
+ include_context "server integration"
3
+
4
+ context "when a server configured with a stub containing a chain of response blocks is started" do
5
+
6
+ let(:configurator) { HttpStub::Examples::ConfiguratorWithResponseBlocks }
7
+
8
+ context "and a request is made matching the stub" do
9
+
10
+ let(:header_value) { "some header value" }
11
+ let(:parameter_value) { "some parameter value" }
12
+
13
+ let(:response) do
14
+ HTTParty.get("#{server_uri}/some_path", headers: { "header_name" => header_value },
15
+ query: { "parameter_name" => parameter_value })
16
+ end
17
+
18
+ describe "the response status" do
19
+
20
+ it "is the value from the last declaring block" do
21
+ expect(response.code).to eql(201)
22
+ end
23
+
24
+ end
25
+
26
+ context "the response headers" do
27
+
28
+ it "include headers from early in the chain that are not overridden" do
29
+ expect(response.headers["header_defaulted"]).to eql("some default header value")
30
+ end
31
+
32
+ it "includes headers from the last declaring block" do
33
+ expect(response.headers["header_overridden"]).to eql("some overridden header value")
34
+ end
35
+
36
+ it "includes interpolated values from the request headers" do
37
+ expect(response.headers["header_referencing_header"]).to eql(header_value)
38
+ end
39
+
40
+ it "includes interpolated values from the request parameters" do
41
+ expect(response.headers["header_referencing_parameter"]).to eql(parameter_value)
42
+ end
43
+
44
+ end
45
+
46
+ context "the response body" do
47
+
48
+ it "is the value from the last declaring block" do
49
+ expect(response.body).to_not eql("some default body")
50
+ end
51
+
52
+ it "includes interpolated values from the request headers" do
53
+ expect(response.body).to include(header_value)
54
+ end
55
+
56
+ it "includes interpolated values from the request headers" do
57
+ expect(response.body).to include(parameter_value)
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ end
65
+
66
+ end
@@ -1,297 +1,221 @@
1
1
  describe "Stub basics acceptance" do
2
- include_context "configurer integration"
2
+ include_context "server integration"
3
3
 
4
- context "when a stub is submitted" do
4
+ let(:configurator) { HttpStub::Examples::ConfiguratorWithTrivialStubs }
5
5
 
6
- context "that contains no request headers or parameters" do
6
+ context "when a stub has no match headers or parameters" do
7
7
 
8
- context "and it contains a response status" do
8
+ context "and it contains a body only" do
9
9
 
10
- before(:example) do
11
- stub_server.add_stub! do |stub|
12
- stub.match_requests(uri: "/stub_with_status", method: :get)
13
- stub.respond_with(status: 201, body: "Stub body")
14
- end
15
- end
16
-
17
- context "and a matching request is made" do
18
-
19
- let(:response) { HTTParty.get("#{server_uri}/stub_with_status") }
20
-
21
- it "responds with the stubbed status" do
22
- expect(response.code).to eql(201)
23
- end
24
-
25
- it "replays the stubbed body" do
26
- expect(response.body).to eql("Stub body")
27
- end
28
-
29
- end
30
-
31
- context "and stubs are cleared" do
32
-
33
- before(:example) { stub_server.clear_stubs! }
34
-
35
- context "and a matching request is made" do
36
-
37
- let(:response) { HTTParty.get("#{server_uri}/stub_with_status") }
10
+ context "and a matching request is made" do
38
11
 
39
- it "responds with a 404 status code" do
40
- expect(response.code).to eql(404)
41
- end
42
-
43
- end
12
+ let(:response) { HTTParty.get("#{server_uri}/stub_with_body_only") }
44
13
 
14
+ it "replays the stubbed body" do
15
+ expect(response.body).to eql("Stub body")
45
16
  end
46
17
 
47
18
  end
48
19
 
49
- context "and it does not contain a response status" do
50
-
51
- before(:example) do
52
- stub_server.add_stub! do |stub|
53
- stub.match_requests(uri: "/stub_without_status", method: :get)
54
- stub.respond_with(body: "Stub body")
55
- end
56
- end
57
-
58
- context "and a matching request is made" do
59
-
60
- let(:response) { HTTParty.get("#{server_uri}/stub_without_status") }
61
-
62
- it "replays the stubbed body" do
63
- expect(response.body).to eql("Stub body")
64
- end
20
+ end
65
21
 
66
- end
22
+ context "and it contains a response status only" do
67
23
 
68
- end
24
+ context "and a matching request is made" do
69
25
 
70
- context "and it does not contain a request method" do
26
+ let(:response) { HTTParty.get("#{server_uri}/stub_with_status_only") }
71
27
 
72
- before(:example) do
73
- stub_server.add_stub! { match_requests(uri: "/stub_without_method").respond_with(body: "Stub body") }
28
+ it "responds with the stubbed status" do
29
+ expect(response.code).to eql(201)
74
30
  end
75
31
 
76
- context "and a request is made with a matching uri" do
77
-
78
- let(:response) { HTTParty.get("#{server_uri}/stub_without_method") }
79
-
80
- it "replays the stubbed body" do
81
- expect(response.body).to eql("Stub body")
82
- end
83
-
32
+ it "responds with an empty body" do
33
+ expect(response.body).to eql("")
84
34
  end
85
35
 
86
36
  end
87
37
 
88
38
  end
89
39
 
90
- context "that contains request headers" do
40
+ end
91
41
 
92
- context "whose values are strings" do
42
+ context "when a stub has match headers" do
93
43
 
94
- before(:example) do
95
- stub_server.add_stub! do
96
- match_requests(uri: "/stub_with_headers", method: :get, headers: { key: "value" })
97
- respond_with(status: 202, body: "Another stub body")
98
- end
99
- end
44
+ context "whose values are strings" do
100
45
 
101
- context "and that request is made" do
46
+ let(:response) do
47
+ HTTParty.get("#{server_uri}/stub_with_string_match_headers", headers: { "key" => header_value })
48
+ end
102
49
 
103
- let(:response) { HTTParty.get("#{server_uri}/stub_with_headers", headers: { "key" => "value" }) }
50
+ context "and a matching request is made" do
104
51
 
105
- it "replays the stubbed response" do
106
- expect(response.code).to eql(202)
107
- expect(response.body).to eql("Another stub body")
108
- end
52
+ let(:header_value) { "value" }
109
53
 
54
+ it "replays the stubbed response" do
55
+ expect(response.body).to eql("String match headers body")
110
56
  end
111
57
 
112
- context "and a request with different headers is made" do
58
+ end
113
59
 
114
- let(:response) { HTTParty.get("#{server_uri}/stub_with_headers", headers: { "key" => "other_value" }) }
60
+ context "and a request with a different header value is made" do
115
61
 
116
- it "responds with a 404 status code" do
117
- expect(response.code).to eql(404)
118
- end
62
+ let(:header_value) { "other_value" }
119
63
 
64
+ it "responds with a 404 status code" do
65
+ expect(response.code).to eql(404)
120
66
  end
121
67
 
122
68
  end
123
69
 
124
70
  end
125
71
 
126
- context "that contains request parameters" do
72
+ end
127
73
 
128
- context "whose values are strings" do
74
+ context "when a stub has match parameters" do
129
75
 
130
- before(:example) do
131
- stub_server.add_stub! do
132
- match_requests(uri: "/stub_with_parameters", method: :get, parameters: { key: "value" })
133
- respond_with(status: 202, body: "Another stub body")
134
- end
135
- end
76
+ context "whose values are strings" do
136
77
 
137
- context "and that request is made" do
78
+ let(:response) { HTTParty.get("#{server_uri}/stub_with_string_match_parameters?key=#{parameter_value}") }
138
79
 
139
- let(:response) { HTTParty.get("#{server_uri}/stub_with_parameters?key=value") }
80
+ context "and a matching request is made" do
140
81
 
141
- it "replays the stubbed response" do
142
- expect(response.code).to eql(202)
143
- expect(response.body).to eql("Another stub body")
144
- end
82
+ let(:parameter_value) { "value" }
145
83
 
84
+ it "replays the stubbed response" do
85
+ expect(response.body).to eql("String match parameters body")
146
86
  end
147
87
 
148
- context "and a request with different parameters is made" do
88
+ end
149
89
 
150
- let(:response) { HTTParty.get("#{server_uri}/stub_with_parameters?key=another_value") }
90
+ context "and a request with different parameters is made" do
151
91
 
152
- it "responds with a 404 status code" do
153
- expect(response.code).to eql(404)
154
- end
92
+ let(:parameter_value) { "another_value" }
155
93
 
94
+ it "responds with a 404 status code" do
95
+ expect(response.code).to eql(404)
156
96
  end
157
97
 
158
98
  end
159
99
 
160
- context "whose values are numbers" do
100
+ end
161
101
 
162
- before(:example) do
163
- stub_server.add_stub! do
164
- match_requests(uri: "/stub_with_parameters", method: :get, parameters: { key: 88 })
165
- respond_with(status: 203, body: "Body for parameter number")
166
- end
167
- end
102
+ context "whose values are numerics" do
168
103
 
169
- context "and that request is made" do
104
+ let(:response) { HTTParty.get("#{server_uri}/stub_with_numeric_match_parameters?key=#{parameter_value}") }
170
105
 
171
- let(:response) { HTTParty.get("#{server_uri}/stub_with_parameters?key=88") }
106
+ context "and a matching request is made" do
172
107
 
173
- it "replays the stubbed response" do
174
- expect(response.code).to eql(203)
175
- expect(response.body).to eql("Body for parameter number")
176
- end
108
+ let(:parameter_value) { 88 }
177
109
 
110
+ it "replays the stubbed response" do
111
+ expect(response.body).to eql("Numeric match parameters body")
178
112
  end
179
113
 
180
114
  end
181
115
 
182
116
  end
183
117
 
184
- describe "that contains response headers" do
118
+ end
185
119
 
186
- context "with a content-type header" do
120
+ describe "when a stub has response headers" do
187
121
 
188
- before(:example) do
189
- stub_server.add_stub! do
190
- match_requests(uri: "/some_stub_path", method: :get)
191
- respond_with(body: "Some stub body", headers: { "content-type" => "application/xhtml" })
192
- end
193
- end
122
+ context "including a content-type header" do
194
123
 
195
- it "registers the stub" do
196
- response = HTTParty.get("#{server_uri}/some_stub_path")
124
+ context "and a matching request is made" do
197
125
 
126
+ let(:response) { HTTParty.get("#{server_uri}/stub_with_content_type_header") }
127
+
128
+ it "responds with the header" do
198
129
  expect(response.content_type).to eql("application/xhtml")
199
130
  end
200
131
 
201
132
  end
202
133
 
203
- context "which are custom" do
204
-
205
- describe "and an attempt is made to register a response with a other headers" do
134
+ end
206
135
 
207
- let(:response_headers) do
208
- {
209
- "some_header" => "some value",
210
- "another_header" => "another value",
211
- "yet_another_header" => "yet another value"
212
- }
213
- end
136
+ context "that are custom" do
214
137
 
215
- before(:example) do
216
- stub_server.add_stub! do |stub|
217
- stub.match_requests(uri: "/some_stub_path", method: :get)
218
- stub.respond_with(body: "Some stub body", headers: response_headers)
219
- end
220
- end
138
+ context "and a matching request is made" do
221
139
 
222
- it "registers the stub" do
223
- response = Net::HTTP.get_response("localhost", "/some_stub_path", 8001)
140
+ let(:expected_response_headers) do
141
+ {
142
+ "some_header" => "some value",
143
+ "another_header" => "another value",
144
+ "yet_another_header" => "yet another value"
145
+ }
146
+ end
224
147
 
225
- response_headers.each { |key, value| expect(response[key]).to eql(value) }
226
- end
148
+ let(:response) { HTTParty.get("#{server_uri}/stub_with_response_headers") }
227
149
 
150
+ it "responds with the headers" do
151
+ expected_response_headers.each { |key, value| expect(response.headers[key]).to eql(value) }
228
152
  end
229
153
 
230
154
  end
231
155
 
232
156
  end
233
157
 
234
- context "that contains a response body that is a file" do
158
+ end
235
159
 
236
- let(:configurer_specification) { { class: HttpStub::Examples::ConfigurerWithFileResponses } }
160
+ context "when a stub has a response body that is a file" do
237
161
 
238
- context "and a request that matches is made" do
162
+ let(:configurator) { HttpStub::Examples::ConfiguratorWithFileResponses }
239
163
 
240
- context "matching a stub with a custom content-type" do
164
+ context "and a request that matches is made" do
241
165
 
242
- let(:response) { issue_request }
166
+ context "matching a stub with a custom content-type" do
243
167
 
244
- it "responds with a status code of 200" do
245
- expect(response.code).to eql(200)
246
- end
168
+ let(:response) { issue_request }
247
169
 
248
- it "responds with the configured content type" do
249
- expect(response.content_type).to eql("application/pdf")
250
- end
251
-
252
- it "responds with the configured file" do
253
- expect(response).to contain_file(HttpStub::Examples::ConfigurerWithFileResponses::FILE_PATH)
254
- end
170
+ it "responds with a status code of 200" do
171
+ expect(response.code).to eql(200)
172
+ end
255
173
 
256
- context "and a subsequent request is made that requests the file if it has been modified" do
174
+ it "responds with the configured content type" do
175
+ expect(response.content_type).to eql("application/pdf")
176
+ end
257
177
 
258
- let(:first_response) { issue_request }
259
- let(:file_last_modified_time) { first_response.headers["Last-Modified"] }
178
+ it "responds with the configured file" do
179
+ expect(response).to contain_file(HttpStub::Examples::ConfiguratorWithFileResponses::FILE_PATH)
180
+ end
260
181
 
261
- let(:second_response) { issue_request("if_modified_since" => file_last_modified_time) }
182
+ context "and a subsequent request is made that requests the file if it has been modified" do
262
183
 
263
- it "responds with a status code of 304 to indicate the file is unchanged" do
264
- expect(second_response.code).to eql(304)
265
- end
184
+ let(:first_response) { issue_request }
185
+ let(:file_last_modified_time) { first_response.headers["Last-Modified"] }
266
186
 
267
- it "responds with no content type" do
268
- expect(second_response.content_type).to be(nil)
269
- end
187
+ let(:second_response) { issue_request("if_modified_since" => file_last_modified_time) }
270
188
 
271
- it "responds with an empty body" do
272
- expect(second_response.body).to be(nil)
273
- end
189
+ it "responds with a status code of 304 to indicate the file is unchanged" do
190
+ expect(second_response.code).to eql(304)
191
+ end
274
192
 
193
+ it "responds with no content type" do
194
+ expect(second_response.content_type).to be(nil)
275
195
  end
276
196
 
277
- def issue_request(headers={})
278
- HTTParty.get("#{server_uri}/stub_response_with_file", headers: headers)
197
+ it "responds with an empty body" do
198
+ expect(second_response.body).to be(nil)
279
199
  end
280
200
 
281
201
  end
282
202
 
283
- context "matching a stub with no content-type" do
203
+ def issue_request(headers={})
204
+ HTTParty.get("#{server_uri}/stub_response_with_file", headers: headers)
205
+ end
284
206
 
285
- let(:response) { HTTParty.get("#{server_uri}/stub_response_with_file_and_no_content_type") }
207
+ end
286
208
 
287
- it "responds with a default content type of 'application/octet-stream'" do
288
- expect(response.content_type).to eql("application/octet-stream")
289
- end
209
+ context "matching a stub with no content-type" do
290
210
 
291
- it "responds with the configured response" do
292
- expect(response).to contain_file(HttpStub::Examples::ConfigurerWithFileResponses::FILE_PATH)
293
- end
211
+ let(:response) { HTTParty.get("#{server_uri}/stub_response_with_file_and_no_content_type") }
212
+
213
+ it "responds with a default content type of 'application/octet-stream'" do
214
+ expect(response.content_type).to eql("application/octet-stream")
215
+ end
294
216
 
217
+ it "responds with the configured response" do
218
+ expect(response).to contain_file(HttpStub::Examples::ConfiguratorWithFileResponses::FILE_PATH)
295
219
  end
296
220
 
297
221
  end