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,27 +1,27 @@
1
1
  describe HttpStub::Server::Stub::Match::Rules do
2
2
 
3
- let(:header_payload) do
3
+ let(:method_arg) { :get }
4
+ let(:headers_arg) do
4
5
  {
5
- "match_rule_header1" => "match_rule_header_value1",
6
- "match_rule_header2" => "match_rule_header_value2",
7
- "match_rule_header3" => "match_rule_header_value3"
6
+ match_rule_header1: "match_rule_header_value1",
7
+ match_rule_header2: "match_rule_header_value2",
8
+ match_rule_header3: "match_rule_header_value3"
8
9
  }
9
10
  end
10
- let(:parameter_payload) do
11
+ let(:parameters_arg) do
11
12
  {
12
- "match_rule_parameter1" => "match_rule_parameter_value1",
13
- "match_rule_parameter2" => "match_rule_parameter_value2",
14
- "match_rule_parameter3" => "match_rule_parameter_value3"
13
+ match_rule_parameter1: "match_rule_parameter_value1",
14
+ match_rule_parameter2: "match_rule_parameter_value2",
15
+ match_rule_parameter3: "match_rule_parameter_value3"
15
16
  }
16
17
  end
17
- let(:method_payload) { "get" }
18
- let(:match_rules_payload) do
18
+ let(:match_rules_args) do
19
19
  {
20
- "uri" => "/a_path",
21
- "method" => method_payload,
22
- "headers" => header_payload,
23
- "parameters" => parameter_payload,
24
- "body" => { "schema" => { "json" => "stub schema definition" } }
20
+ uri: "/a_path",
21
+ method: method_arg,
22
+ headers: headers_arg,
23
+ parameters: parameters_arg,
24
+ body: { schema: { json: "stub schema definition" } }
25
25
  }
26
26
  end
27
27
  let(:uri_rule) { instance_double(HttpStub::Server::Stub::Match::Rule::Uri, matches?: true) }
@@ -30,7 +30,7 @@ describe HttpStub::Server::Stub::Match::Rules do
30
30
  let(:parameters_rule) { instance_double(HttpStub::Server::Stub::Match::Rule::Parameters, matches?: true) }
31
31
  let(:body_rule) { double("HttpStub::Server::Stub::SomeRequestBody", matches?: true) }
32
32
 
33
- let(:match_rules) { HttpStub::Server::Stub::Match::Rules.new(match_rules_payload) }
33
+ let(:match_rules) { described_class.new(match_rules_args) }
34
34
 
35
35
  before(:example) do
36
36
  allow(HttpStub::Server::Stub::Match::Rule::Uri).to receive(:new).and_return(uri_rule)
@@ -68,8 +68,8 @@ describe HttpStub::Server::Stub::Match::Rules do
68
68
 
69
69
  describe "#matches?" do
70
70
 
71
- let(:request_method) { method_payload }
72
- let(:request) { instance_double(HttpStub::Server::Request::Request, method: method_payload) }
71
+ let(:request_method) { method_arg }
72
+ let(:request) { instance_double(HttpStub::Server::Request::Request, method: method_arg) }
73
73
  let(:logger) { instance_double(Logger) }
74
74
 
75
75
  subject { match_rules.matches?(request, logger) }
@@ -1,81 +1,28 @@
1
1
  describe HttpStub::Server::Stub::Match::StringValueMatcher do
2
2
 
3
- let(:stub_value) { "some stub value" }
4
-
5
3
  describe "::match?" do
6
4
 
5
+ let(:stub_value) { :some_stub_value }
7
6
  let(:actual_value) { "some actual value" }
8
7
 
9
8
  subject { described_class.match?(stub_value, actual_value) }
10
9
 
11
- shared_examples_for "a StringValueMatcher that matches an expected stub value" do
12
-
13
- it "determines if actual value should be omitted" do
14
- expect(HttpStub::Server::Stub::Match::OmittedValueMatcher).to(
15
- receive(:match?).with(expected_stub_match_value, actual_value)
16
- )
17
-
18
- subject
19
- end
20
-
21
- it "determines if the actual value matches a regular expression" do
22
- expect(HttpStub::Server::Stub::Match::RegexpValueMatcher).to(
23
- receive(:match?).with(expected_stub_match_value, actual_value)
24
- )
25
-
26
- subject
27
- end
28
-
29
- it "determines if the actual value exactly matches the stub value" do
30
- expect(HttpStub::Server::Stub::Match::ExactValueMatcher).to(
31
- receive(:match?).with(expected_stub_match_value, actual_value)
32
- )
33
-
34
- subject
35
- end
36
-
37
- it "determines if actual value should be omitted" do
38
- expect(HttpStub::Server::Stub::Match::OmittedValueMatcher).to(
39
- receive(:match?).with(expected_stub_match_value, actual_value)
40
- )
41
-
42
- subject
43
- end
44
-
45
- it "determines if the actual value matches a regular expression" do
46
- expect(HttpStub::Server::Stub::Match::RegexpValueMatcher).to(
47
- receive(:match?).with(expected_stub_match_value, actual_value)
48
- )
49
-
50
- subject
51
- end
52
-
53
- it "determines if the actual value exactly matches the stub value" do
54
- expect(HttpStub::Server::Stub::Match::ExactValueMatcher).to(
55
- receive(:match?).with(expected_stub_match_value, actual_value)
56
- )
57
-
58
- subject
59
- end
10
+ it "determines if actual value matches by omission" do
11
+ expect(HttpStub::Server::Stub::Match::OmittedValueMatcher).to receive(:match?).with(stub_value, actual_value)
60
12
 
13
+ subject
61
14
  end
62
15
 
63
- context "when the provided stub value is a string" do
64
-
65
- let(:stub_value) { "some stub value" }
66
- let(:expected_stub_match_value) { "some stub value" }
67
-
68
- it_behaves_like "a StringValueMatcher that matches an expected stub value"
16
+ it "determines if the actual value matches the stub value using a regular expression" do
17
+ expect(HttpStub::Server::Stub::Match::RegexpValueMatcher).to receive(:match?).with(stub_value, actual_value)
69
18
 
19
+ subject
70
20
  end
71
21
 
72
- context "when the provided stub value is not a string" do
73
-
74
- let(:stub_value) { 88 }
75
- let(:expected_stub_match_value) { "88" }
76
-
77
- it_behaves_like "a StringValueMatcher that matches an expected stub value"
22
+ it "determines if the actual value exactly matches the stub value" do
23
+ expect(HttpStub::Server::Stub::Match::ExactValueMatcher).to receive(:match?).with(stub_value, actual_value)
78
24
 
25
+ subject
79
26
  end
80
27
 
81
28
  context "when an omitted match occurs" do
@@ -1,14 +1,14 @@
1
1
  describe HttpStub::Server::Stub::Registry, "integrating with real stubs" do
2
2
 
3
- let(:memory_session) { HttpStub::Server::SessionFixture.memory }
3
+ let(:initial_stubs) { [] }
4
4
 
5
5
  let(:logger) { instance_double(Logger, info: nil) }
6
6
 
7
- let(:stub_registry) { HttpStub::Server::Stub::Registry.new(memory_session) }
7
+ let(:stub_registry) { HttpStub::Server::Stub::Registry.new(initial_stubs) }
8
8
 
9
9
  shared_context "a stub is added" do
10
10
 
11
- let(:added_stub) { create_stub(4) }
11
+ let(:added_stub) { HttpStub::Server::StubFixture.create(id: 4) }
12
12
 
13
13
  before(:example) { stub_registry.add(added_stub, logger) }
14
14
 
@@ -18,23 +18,21 @@ describe HttpStub::Server::Stub::Registry, "integrating with real stubs" do
18
18
 
19
19
  subject { stub_registry.reset(logger) }
20
20
 
21
- context "when stubs have been added to the servers memory" do
21
+ context "when initial stubs were provided" do
22
22
 
23
- let(:stubs) { (1..3).map { |i| create_stub(i) } }
24
-
25
- before(:example) { stubs.each { |stub| memory_session.add_stub(stub, logger) } }
23
+ let(:initial_stubs) { (1..3).map { |i| HttpStub::Server::StubFixture.create(id: i) } }
26
24
 
27
25
  context "and a stub is subsequently added" do
28
26
 
29
27
  include_context "a stub is added"
30
28
 
31
- it "retains stubs added to the servers memory" do
29
+ it "retains the initial stubs" do
32
30
  subject
33
31
 
34
- expect(stub_registry.all).to eql(stubs)
32
+ expect(stub_registry.all).to include(*initial_stubs)
35
33
  end
36
34
 
37
- it "rejects stubs not added to the servers memory" do
35
+ it "rejects stubs not initially present" do
38
36
  subject
39
37
 
40
38
  expect(stub_registry.all).not_to include(added_stub)
@@ -44,7 +42,9 @@ describe HttpStub::Server::Stub::Registry, "integrating with real stubs" do
44
42
 
45
43
  end
46
44
 
47
- context "when no stubs have been added to the servers memory" do
45
+ context "when no initial stubs were provided" do
46
+
47
+ let(:initial_stubs) { [] }
48
48
 
49
49
  context "and a stub is subsequently added" do
50
50
 
@@ -62,21 +62,4 @@ describe HttpStub::Server::Stub::Registry, "integrating with real stubs" do
62
62
 
63
63
  end
64
64
 
65
- def create_stub(number)
66
- HttpStub::Server::Stub.create(
67
- "uri" => "/uri#{number}",
68
- "method" => "get",
69
- "headers" => {"header_key_#{number}" => "header_value_#{number}"},
70
- "parameters" => {"parameter_key_#{number}" => "parameter_value_#{number}"},
71
- "response" => {
72
- "status" => 200 + number,
73
- "body" => "Body #{number}"
74
- },
75
- "triggers" => {
76
- "scenario_names" => [],
77
- "stubs" => []
78
- }
79
- )
80
- end
81
-
82
65
  end
@@ -1,17 +1,16 @@
1
1
  describe HttpStub::Server::Stub::Registry do
2
2
 
3
- let(:stubs_in_memory) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
4
- let(:memory_session) { instance_double(HttpStub::Server::Session::Session, stubs: stubs_in_memory) }
3
+ let(:initial_stubs) { (1..3).map { HttpStub::Server::StubFixture.create } }
5
4
 
6
5
  let(:underlying_stub_registry) { instance_double(HttpStub::Server::Registry) }
7
6
  let(:logger) { instance_double(Logger) }
8
7
 
9
- let(:stub_registry) { described_class.new(memory_session) }
8
+ let(:stub_registry) { described_class.new(initial_stubs) }
10
9
 
11
10
  before(:example) { allow(HttpStub::Server::Registry).to receive(:new).and_return(underlying_stub_registry) }
12
11
 
13
- it "uses an underlying simple registry that is initialised with the memory sessions stubs" do
14
- expect(HttpStub::Server::Registry).to receive(:new).with("stub", stubs_in_memory)
12
+ it "uses an underlying simple registry that is initialised with the initial stubs" do
13
+ expect(HttpStub::Server::Registry).to receive(:new).with("stub", initial_stubs)
15
14
 
16
15
  stub_registry
17
16
  end
@@ -114,14 +113,8 @@ describe HttpStub::Server::Stub::Registry do
114
113
 
115
114
  before(:example) { allow(underlying_stub_registry).to receive(:replace) }
116
115
 
117
- it "retrieves the stubs in the memory session" do
118
- expect(memory_session).to receive(:stubs)
119
-
120
- subject
121
- end
122
-
123
- it "replaces the stubs in the underlying registry with those in the memory session" do
124
- expect(underlying_stub_registry).to receive(:replace).with(stubs_in_memory, logger)
116
+ it "replaces the stubs in the underlying registry with those initially provided" do
117
+ expect(underlying_stub_registry).to receive(:replace).with(initial_stubs, logger)
125
118
 
126
119
  subject
127
120
  end
@@ -0,0 +1,64 @@
1
+ describe HttpStub::Server::Stub::Response::Blocks do
2
+
3
+ let(:provided_blocks) { HttpStub::Server::Stub::Response::BlocksFixture.many }
4
+
5
+ let(:blocks) { described_class.new(provided_blocks) }
6
+
7
+ describe "#each" do
8
+
9
+ it "yields each provided block" do
10
+ yielded_blocks = []
11
+ blocks.each { |block| yielded_blocks << block }
12
+
13
+ expect(yielded_blocks).to eql(provided_blocks)
14
+ end
15
+
16
+ end
17
+
18
+ describe "#evaluate_with" do
19
+
20
+ let(:parameter_value) { "some parameter value" }
21
+ let(:parameters) { { some_parameter: parameter_value } }
22
+ let(:request) { HttpStub::Server::RequestFixture.create(parameters: parameters) }
23
+
24
+ let(:provided_blocks) do
25
+ [
26
+ lambda { |request| { key: "value with parameter: #{request.parameters[:some_parameter]}" } },
27
+ lambda { { hash: { nested_key: "nested value", another_nested_key: "another nested value" } } },
28
+ lambda { { hash: { nested_key: "new nested value", yet_another_nested_key: "yet another nested value" } } }
29
+ ]
30
+ end
31
+
32
+ subject { blocks.evaluate_with(request) }
33
+
34
+ it "merges the hashes composed by each block" do
35
+ expect(subject.keys).to eql(%i{ key hash })
36
+ end
37
+
38
+ it "interpolates values from the request" do
39
+ expect(subject).to include(key: "value with parameter: #{parameter_value}")
40
+ end
41
+
42
+ it "performs a nested merge of the hashes" do
43
+ expected_hash = {
44
+ nested_key: "new nested value",
45
+ another_nested_key: "another nested value",
46
+ yet_another_nested_key: "yet another nested value"
47
+ }
48
+
49
+ expect(subject).to include(hash: expected_hash)
50
+ end
51
+
52
+ end
53
+
54
+ describe "#to_array" do
55
+
56
+ subject { blocks.to_array }
57
+
58
+ it "returns the source of the provided blocks" do
59
+ expect(subject).to eql(provided_blocks.map(&:source))
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,52 @@
1
+ describe HttpStub::Server::Stub::Response::Body do
2
+
3
+ describe "::create" do
4
+
5
+ subject { described_class.create(args) }
6
+
7
+ context "when a body argument containing text is provided" do
8
+
9
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_body }
10
+
11
+ it "returns a text body" do
12
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::TextBody)
13
+ end
14
+
15
+ it "has text which is the value of the body" do
16
+ expect(subject.text).to eql(args[:body])
17
+ end
18
+
19
+ end
20
+
21
+ context "when a json argument is provided" do
22
+
23
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_json }
24
+
25
+ it "returns a text body" do
26
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::TextBody)
27
+ end
28
+
29
+ it "has text which is the JSON representation of the value" do
30
+ expect(subject.text).to eql(args[:json].to_json)
31
+ end
32
+
33
+ end
34
+
35
+ context "when a body argument containing a file is provided" do
36
+
37
+ let(:args) { { body: HttpStub::Server::Stub::Response::FileBodyFixture.args } }
38
+ let(:file_path) { args[:body][:file][:path] }
39
+
40
+ it "returns a file body" do
41
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::FileBody)
42
+ end
43
+
44
+ it "has a uri which includes the path to the file" do
45
+ expect(subject.uri).to include(file_path)
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,117 @@
1
+ describe HttpStub::Server::Stub::Response::FileBody do
2
+
3
+ let(:args) { HttpStub::Server::Stub::Response::FileBodyFixture.args }
4
+ let(:file_path) { args[:file][:path] }
5
+
6
+ let(:file_body) { described_class.new(args) }
7
+
8
+ describe "#headers" do
9
+
10
+ subject { file_body.headers }
11
+
12
+ it "includes a content-type of application/octet-stream" do
13
+ expect(subject).to include("content-type" => "application/octet-stream")
14
+ end
15
+
16
+ end
17
+
18
+ describe "#uri" do
19
+
20
+ subject { file_body.uri }
21
+
22
+ it "returns the url to the file navigable by a browser" do
23
+ expect(subject).to eql("file://#{file_path}")
24
+ end
25
+
26
+ end
27
+
28
+ describe "#serve" do
29
+
30
+ let(:content_type) { "plain/text" }
31
+ let(:headers) { { "content-type" => content_type } }
32
+ let(:response) { HttpStub::Server::Stub::ResponseBuilder.new.with_headers!(headers).build }
33
+ let(:application) { instance_double(Sinatra::Base) }
34
+
35
+ subject { file_body.serve(application, response) }
36
+
37
+ it "sends the file via the application" do
38
+ expect(application).to receive(:send_file).with(file_path, anything)
39
+
40
+ subject
41
+ end
42
+
43
+ it "sends the file without any provided response status to ensure that 304 responses are honoured" do
44
+ expect(application).to receive(:send_file).with(anything, hash_excluding(:status))
45
+
46
+ subject
47
+ end
48
+
49
+ it "sends the file with a type that is the configured content type" do
50
+ expect(application).to receive(:send_file).with(anything, hash_including(type: content_type))
51
+
52
+ subject
53
+ end
54
+
55
+ context "when a last modified header is configured in the stub response" do
56
+
57
+ let(:last_modified_date) { "Thu, 14 May 2015 12:56:00 GMT" }
58
+ let(:headers) { { "last-modified" => last_modified_date } }
59
+
60
+ it "sends the file with the last modified date" do
61
+ expect(application).to receive(:send_file).with(anything, hash_including(last_modified: last_modified_date))
62
+
63
+ subject
64
+ end
65
+
66
+ end
67
+
68
+ context "when no last modified header is configured in the stub response" do
69
+
70
+ let(:headers) { {} }
71
+
72
+ it "sends the file without a last modified date" do
73
+ expect(application).to receive(:send_file).with(anything, hash_excluding(:last_modified))
74
+
75
+ subject
76
+ end
77
+
78
+ end
79
+
80
+ context "when a content disposition header is configured in the stub response" do
81
+
82
+ let(:content_disposition) { "attachment" }
83
+ let(:headers) { { "content-disposition" => content_disposition } }
84
+
85
+ it "sends the file with a disposition whose value is the configured content disposition" do
86
+ expect(application).to receive(:send_file).with(anything, hash_including(disposition: content_disposition))
87
+
88
+ subject
89
+ end
90
+
91
+ end
92
+
93
+ context "when a content disposition header is not configured in the stub response" do
94
+
95
+ let(:headers) { {} }
96
+
97
+ it "sends the file without a disposition" do
98
+ expect(application).to receive(:send_file).with(anything, hash_excluding(:disposition))
99
+
100
+ subject
101
+ end
102
+
103
+ end
104
+
105
+ end
106
+
107
+ describe "#to_s" do
108
+
109
+ subject { file_body.to_s }
110
+
111
+ it "returns the uri" do
112
+ expect(subject).to eql(file_body.uri)
113
+ end
114
+
115
+ end
116
+
117
+ end