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,89 @@
1
+ describe HttpStub::Server::Stub::Response::Headers do
2
+
3
+ let(:header_hash) { HttpStub::HeadersFixture.many }
4
+
5
+ let(:headers) { described_class.new(header_hash) }
6
+
7
+ it "is a hash with indifferent access in order to support merging of headers regardless of type" do
8
+ expect(headers).to be_a_kind_of(HashWithIndifferentAccess)
9
+ end
10
+
11
+ describe "::create" do
12
+
13
+ let(:body) { HttpStub::Server::Stub::Response::TextBodyFixture.text }
14
+
15
+ subject { described_class.create(header_hash, body) }
16
+
17
+ context "when headers whose keys are symbols are provided" do
18
+
19
+ let(:header_hash) { HttpStub::HeadersFixture.many.symbolize_keys }
20
+ let(:stringified_keys) { header_hash.keys.map(&:to_s) }
21
+
22
+ it "returns headers containing the provided headers with keys converted to strings" do
23
+ expect(subject.values_at(*stringified_keys)).to eql(header_hash.values)
24
+ end
25
+
26
+ it "returns headers containing the bodies headers" do
27
+ expect(subject).to include(body.headers)
28
+ end
29
+
30
+ end
31
+
32
+ context "when nil headers are provided" do
33
+
34
+ let(:header_hash) { nil }
35
+
36
+ it "creates headers containing only the bodies headers" do
37
+ expect(subject).to eql(body.headers)
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ describe "constructor" do
45
+
46
+ subject { headers }
47
+
48
+ context "when headers whose keys are symbols are provided" do
49
+
50
+ let(:header_hash) { HttpStub::HeadersFixture.many.symbolize_keys }
51
+ let(:stringified_keys) { header_hash.keys.map(&:to_s) }
52
+
53
+ it "returns headers containing the provided headers with keys converted to strings" do
54
+ expect(subject.values_at(*stringified_keys)).to eql(header_hash.values)
55
+ end
56
+
57
+ end
58
+
59
+ context "when headers whose keys are strings are provided" do
60
+
61
+ let(:header_hash) { HttpStub::HeadersFixture.many.stringify_keys }
62
+
63
+ it "returns headers containing the provided headers" do
64
+ expect(subject).to eql(header_hash)
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+
71
+ describe "#to_s" do
72
+
73
+ subject { headers.to_s }
74
+
75
+ it "returns a string with each header name and value separated by ':'" do
76
+ result = subject
77
+
78
+ header_hash.each { |name, value| expect(result).to match(/#{name}:#{value}/) }
79
+ end
80
+
81
+ it "separates each header entry with a comma for readability" do
82
+ expected_expression = header_hash.map { |name, value| "#{name}.#{value}" }.join(", ")
83
+
84
+ expect(subject).to match(/#{expected_expression}/)
85
+ end
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,342 @@
1
+ describe HttpStub::Server::Stub::Response::Response do
2
+
3
+ let(:status) { 202 }
4
+ let(:body) { "" }
5
+ let(:headers) { nil }
6
+ let(:delay_in_seconds) { 18 }
7
+ let(:blocks) { nil }
8
+ let(:args) do
9
+ { status: status, body: body, headers: headers, delay_in_seconds: delay_in_seconds, blocks: blocks }
10
+ end
11
+
12
+ let(:response) { described_class.new(args) }
13
+
14
+ describe "#status" do
15
+
16
+ subject { response.status }
17
+
18
+ context "when a value is provided in the arguments" do
19
+
20
+ context "that is an integer" do
21
+
22
+ it "returns the value provided" do
23
+ expect(subject).to eql(status)
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ context "when the status is not provided in the arguments" do
31
+
32
+ let(:args) { {} }
33
+
34
+ it "defaults to 200" do
35
+ expect(subject).to eql(200)
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+
42
+ describe "#body" do
43
+
44
+ subject { response.body }
45
+
46
+ context "when a json argument is provided" do
47
+
48
+ let(:json) { "some json" }
49
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_json(json) }
50
+
51
+ it "returns a text body" do
52
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::TextBody)
53
+ end
54
+
55
+ it "returns a body containing the json" do
56
+ expect(subject.to_s).to eql(json)
57
+ end
58
+
59
+ end
60
+
61
+ context "when a body argument is provided" do
62
+
63
+ let(:args) { { body: body } }
64
+
65
+ context "that contains text" do
66
+
67
+ let(:body) { "some text" }
68
+
69
+ it "returns a text body" do
70
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::TextBody)
71
+ end
72
+
73
+ it "returns a body containing the text" do
74
+ expect(subject.to_s).to eql(body)
75
+ end
76
+
77
+ end
78
+
79
+ context "that contains a file" do
80
+
81
+ let(:body) { HttpStub::Server::Stub::Response::FileBodyFixture.args }
82
+
83
+ it "returns a file body" do
84
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::FileBody)
85
+ end
86
+
87
+ it "returns a body containing the path to the file" do
88
+ expect(subject.to_s).to include(body.dig(:file, :path))
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ context "when no body arguments are provided" do
96
+
97
+ it "returns a text body" do
98
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::TextBody)
99
+ end
100
+
101
+ it "defaults to an empty body" do
102
+ expect(response.body.to_s).to eql("")
103
+ end
104
+
105
+ end
106
+
107
+ end
108
+
109
+ describe "#headers" do
110
+
111
+ let(:response_header_hash) { response.headers.to_hash }
112
+
113
+ it "has a well formatted string representation" do
114
+ expect(response.headers).to be_a(HttpStub::Server::Stub::Response::Headers)
115
+ end
116
+
117
+ context "when headers are provided" do
118
+
119
+ let(:headers) do
120
+ {
121
+ "a_header" => "some header",
122
+ "another_header" => "another value",
123
+ "yet_another_header" => "yet another value"
124
+ }
125
+ end
126
+
127
+ it "returns the headers" do
128
+ expect(response_header_hash).to eql(headers)
129
+ end
130
+
131
+ end
132
+
133
+ context "and no headers are provided" do
134
+
135
+ let(:headers) { nil }
136
+
137
+ it "returns an empty hash" do
138
+ expect(response_header_hash).to eql({})
139
+ end
140
+
141
+ end
142
+
143
+ end
144
+
145
+ describe "#delay_in_seconds" do
146
+
147
+ context "when a value is provided in the arguments" do
148
+
149
+ context "that is an integer" do
150
+
151
+ it "returns the value" do
152
+ expect(response.delay_in_seconds).to eql(delay_in_seconds)
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+
159
+ context "when a value is not provided in the arguments" do
160
+
161
+ let(:args) { {} }
162
+
163
+ it "defaults to 0" do
164
+ expect(response.delay_in_seconds).to eql(0)
165
+ end
166
+
167
+ end
168
+
169
+ end
170
+
171
+ describe "#blocks" do
172
+
173
+ subject { response.blocks }
174
+
175
+ context "when a value is provided in the arguments" do
176
+
177
+ let(:blocks) { HttpStub::Server::Stub::Response::BlocksFixture.many }
178
+
179
+ it "provides a means of evaluating the blocks" do
180
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::Blocks)
181
+ end
182
+
183
+ it "contains the provided blocks" do
184
+ expect(subject.to_array).to eql(blocks.map(&:source))
185
+ end
186
+
187
+ end
188
+
189
+ context "when no blocks are provided" do
190
+
191
+ let(:args) { {} }
192
+
193
+ it "contains the provided blocks" do
194
+ expect(subject.to_array).to eql([])
195
+ end
196
+
197
+ end
198
+
199
+ end
200
+
201
+ describe "#with_values_from" do
202
+
203
+ let(:parameter_value) { "some parameter value"}
204
+ let(:parameters) { { some_parameter: parameter_value } }
205
+ let(:request) { HttpStub::Server::RequestFixture.create(parameters: parameters) }
206
+
207
+ subject { response.with_values_from(request) }
208
+
209
+ context "when no blocks are provided" do
210
+
211
+ it "returns a response" do
212
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::Response)
213
+ end
214
+
215
+ it "returns a response that is unchanged" do
216
+ expect(subject.to_json).to eql(response.to_json)
217
+ end
218
+
219
+ end
220
+
221
+ context "when blocks are provided" do
222
+
223
+ let(:simple_block_headers) { { some_header: "some header value", another_header: "another header value" } }
224
+ let(:simple_block) do
225
+ lambda do
226
+ {
227
+ status: 400,
228
+ headers: simple_block_headers,
229
+ body: "First response body",
230
+ delay_in_seconds: 0
231
+ }
232
+ end
233
+ end
234
+ let(:interpolated_block_headers) do
235
+ { some_header: "some new header value", yet_another_header: "yet another header value" }
236
+ end
237
+ let(:interpolated_block) do
238
+ lambda do |request|
239
+ {
240
+ status: 201,
241
+ headers: interpolated_block_headers,
242
+ body: "Body with parameter: #{request.parameters[:some_parameter]}",
243
+ delay_in_seconds: 7
244
+ }
245
+ end
246
+ end
247
+ let(:blocks) { [ simple_block, interpolated_block ] }
248
+
249
+ it "returns a response" do
250
+ expect(subject).to be_an_instance_of(HttpStub::Server::Stub::Response::Response)
251
+ end
252
+
253
+ it "returns a response whose values include those within the blocks" do
254
+ expect(subject.to_hash).to include(status: 201, delay_in_seconds: 7)
255
+ end
256
+
257
+ it "returns a response with headers that are combined from all blocks" do
258
+ expected_headers = {
259
+ some_header: "some new header value",
260
+ another_header: "another header value",
261
+ yet_another_header: "yet another header value"
262
+ }
263
+
264
+ expect(subject.to_hash).to include(headers: expected_headers)
265
+ end
266
+
267
+ it "returns a response whose values are interpolated from the request" do
268
+ expect(subject.to_hash[:body].to_s).to eql("Body with parameter: #{parameter_value}")
269
+ end
270
+
271
+ end
272
+
273
+ end
274
+
275
+ describe "#serve_on" do
276
+
277
+ let(:application) { instance_double(Sinatra::Base) }
278
+
279
+ subject { response.serve_on(application) }
280
+
281
+ before(:example) { allow(response).to receive(:sleep) }
282
+
283
+ it "uses the body to serve the response on the application" do
284
+ expect(response.body).to receive(:serve).with(application, response)
285
+
286
+ subject
287
+ end
288
+
289
+ it "waits for the delayed time in seconds before serving the response" do
290
+ expect(response).to receive(:sleep).with(delay_in_seconds).ordered
291
+ expect(response.body).to receive(:serve).ordered
292
+
293
+ subject
294
+ end
295
+
296
+ end
297
+
298
+ describe "#to_hash" do
299
+
300
+ subject { response.to_hash }
301
+
302
+ it "contains the status" do
303
+ expect(subject).to include(status: response.status)
304
+ end
305
+
306
+ it "contains the headers" do
307
+ expect(subject).to include(headers: response.headers)
308
+ end
309
+
310
+ it "contains the body" do
311
+ expect(subject).to include(body: response.body)
312
+ end
313
+
314
+ it "contains the delay in seconds" do
315
+ expect(subject).to include(delay_in_seconds: response.delay_in_seconds)
316
+ end
317
+
318
+ context "when blocks are provided" do
319
+
320
+ let(:blocks) { HttpStub::Server::Stub::Response::BlocksFixture.many }
321
+ let(:blocks_as_strings) { blocks.map(&:source) }
322
+ let(:args) { { blocks: blocks } }
323
+
324
+ it "contains a string respresentation of the blocks" do
325
+ expect(subject).to include(blocks: blocks_as_strings)
326
+ end
327
+
328
+ end
329
+
330
+ end
331
+
332
+ describe "#to_json" do
333
+
334
+ subject { response.to_json }
335
+
336
+ it "is the JSON representation of the responses hash" do
337
+ expect(subject).to eql(response.to_hash.to_json)
338
+ end
339
+
340
+ end
341
+
342
+ end
@@ -0,0 +1,138 @@
1
+ describe HttpStub::Server::Stub::Response::TextBody do
2
+
3
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_body }
4
+
5
+ let(:text_body) { described_class.new(args) }
6
+
7
+ describe "#headers" do
8
+
9
+ subject { text_body.headers }
10
+
11
+ context "when a json argument is provided" do
12
+
13
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_json }
14
+
15
+ it "includes a content-type of application/json" do
16
+ expect(subject).to include("content-type" => "application/json")
17
+ end
18
+
19
+ end
20
+
21
+ context "when a body is provided" do
22
+
23
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_body }
24
+
25
+ it "returns an empty hash" do
26
+ expect(subject).to eql({})
27
+ end
28
+
29
+ end
30
+
31
+ context "when neither a json argument or body is provided" do
32
+
33
+ let(:args) { {} }
34
+
35
+ it "returns an empty hash" do
36
+ expect(subject).to eql({})
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ describe "#text" do
44
+
45
+ subject { text_body.text }
46
+
47
+ context "when a json argument is provided" do
48
+
49
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_json(json_value) }
50
+
51
+ context "that converts to json" do
52
+
53
+ let(:json_value) { "some json value" }
54
+
55
+ it "returns the json representation of the argument" do
56
+ expect(subject).to eql(json_value)
57
+ end
58
+
59
+ end
60
+
61
+ context "that does not convert to json" do
62
+
63
+ let(:json_value) { nil }
64
+
65
+ it "returns an empty string" do
66
+ expect(subject).to eql("")
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+
73
+ context "when a body is provided" do
74
+
75
+ let(:args) { HttpStub::Server::Stub::Response::TextBodyFixture.args_with_body }
76
+
77
+ it "returns the body value" do
78
+ expect(subject).to eql(args[:body])
79
+ end
80
+
81
+ end
82
+
83
+ context "when neither JSON or a body is provided" do
84
+
85
+ let(:args) { {} }
86
+
87
+ it "returns an empty string" do
88
+ expect(subject).to eql("")
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ describe "#serve" do
96
+
97
+ let(:application) { instance_double(Sinatra::Base) }
98
+ let(:response) { HttpStub::Server::Stub::ResponseBuilder.new.with_headers!.build }
99
+
100
+ subject { text_body.serve(application, response) }
101
+
102
+ it "halts processing of the applications request" do
103
+ expect(application).to receive(:halt)
104
+
105
+ subject
106
+ end
107
+
108
+ it "halts with the responses status" do
109
+ expect(application).to receive(:halt).with(response.status, anything, anything)
110
+
111
+ subject
112
+ end
113
+
114
+ it "halts with the hash representation of the responses headers" do
115
+ expect(application).to receive(:halt).with(anything, response.headers, anything)
116
+
117
+ subject
118
+ end
119
+
120
+ it "halts with the text bodys text" do
121
+ expect(application).to receive(:halt).with(anything, anything, text_body.text)
122
+
123
+ subject
124
+ end
125
+
126
+ end
127
+
128
+ describe "#to_s" do
129
+
130
+ subject { text_body.to_s }
131
+
132
+ it "returns the text" do
133
+ expect(subject).to eql(text_body.text)
134
+ end
135
+
136
+ end
137
+
138
+ end