Module: Umlaut::TestHelp
- Defined in:
- lib/umlaut/test_help.rb
Overview
Some methods helpful in writing automated tests against Umlaut. Used in Umlaut, can also be used in your local app or Umlaut plugin.
Add to your test_helper.rb:
require 'umlaut/test_help'
include Umlaut::TestHelp
Defined Under Namespace
Modules: TestWithCassette
Instance Method Summary collapse
-
#assert_dispatched(request, service_id, status = DispatchedService::Successful) ⇒ Object
Assert that, for a given request, a service with a given id registered a DispatchedService with status DispatchedService::Succesful assert_dispatched(umalut_request, “service_id”).
-
#assert_service_responses(request, service_id, options = {}) ⇒ Object
Assert that for a given umlaut request, a service with a given ID recorded at least one ServiceResponse of any type: assert_service_responses(umlaut_service, “service_id”).
-
#fake_rails_request(umlaut_url) ⇒ Object
Methods you can use to make a mocked up Rails Request and corersponding Umlaut Request Pass in a URL, absolute or partial, eg “/resolve?isbn=X”.
- #fake_umlaut_request(umlaut_url) ⇒ Object
-
#with_service_config(hash) ⇒ Object
The list of configured services is global state.
Instance Method Details
#assert_dispatched(request, service_id, status = DispatchedService::Successful) ⇒ Object
Assert that, for a given request, a service with a given id registered a DispatchedService with status DispatchedService::Succesful
assert_dispatched(umalut_request, "service_id")
Assert that a service with a given id registered a DispatchedService with another status.
assert_dispatched(umlaut_request, "service_id", DispatchedService::FailedTemporary)
45 46 47 48 49 50 51 52 53 |
# File 'lib/umlaut/test_help.rb', line 45 def assert_dispatched(request, service_id, status = DispatchedService::Successful) dispatched = request.dispatched_services.to_a.find {|ds| ds.service_id == service_id} assert dispatched.present?, "No DispatchedService record for service_id `#{service_id}`" if status assert_equal status, dispatched.status end end |
#assert_service_responses(request, service_id, options = {}) ⇒ Object
Assert that for a given umlaut request, a service with a given ID recorded at least one ServiceResponse of any type:
assert_service_responses(umlaut_service, "service_id")
Assert that it recorded exactly ‘number` of ServiceResponses
assert_service_responses(umlaut_service, 'service_id', :number => 5)
Assert that it recorded some ServiceResponses, and _at least one_ of those ServiceResponses was of each of the kind(s) specified. With or without :number.
assert_service_resposnes(umlaut_service, 'service_id', :includes_type => :fulltext)
assert_service_resposnes(umlaut_service, 'service_id', :number => 5, :includes_type => :fulltext)
assert_service_resposnes(umlaut_service, 'service_id', :number => 5, :includes_type => [:fulltext, :highlighted_link])
On assertion success, the method will return the array of ServiceResponse objects found, OR if :number => 1, the single ServiceResponse not in an array for convenience.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/umlaut/test_help.rb', line 72 def assert_service_responses(request, service_id, = {}) number = [:number] type_names = Array([:includes_type]) responses = request.service_responses.to_a.find_all {|r| r.service_id == service_id} if number assert_equal number, responses.length, "Found #{responses.length} ServiceResponses from service id `#{service_id}`, expected #{number}" else assert responses.length > 0, "No ServiceResponse found for service id `#{service_id}" end type_names.each do |kind| assert responses.find {|sr| sr.service_type_value_name == kind.to_s}, "The generated ServiceResponses for service id `#{service_id}` must include type #{kind}" if number.to_i > 0 end if number == 1 return responses.first else return responses end end |
#fake_rails_request(umlaut_url) ⇒ Object
Methods you can use to make a mocked up Rails Request and corersponding Umlaut Request Pass in a URL, absolute or partial, eg “/resolve?isbn=X”
14 15 16 17 |
# File 'lib/umlaut/test_help.rb', line 14 def fake_rails_request(umlaut_url) # hard to figure out how to mock a request, this seems to work ActionController::TestRequest.new(Rack::MockRequest.env_for(umlaut_url)) end |
#fake_umlaut_request(umlaut_url) ⇒ Object
19 20 21 22 |
# File 'lib/umlaut/test_help.rb', line 19 def fake_umlaut_request(umlaut_url) rails_request = fake_rails_request(umlaut_url) Request.find_or_create(rails_request.params, {}, rails_request) end |
#with_service_config(hash) ⇒ Object
The list of configured services is global state. Sometimes we want to test with a specific configuration list. An experimental hacky way to let you do that. Yes, this is a smell of a bad design, but we do what we can.
This is in progress and still needs more api, this is still too hard.
30 31 32 33 34 35 36 |
# File 'lib/umlaut/test_help.rb', line 30 def with_service_config(hash) original = ServiceStore.config ServiceStore.config = hash yield ensure ServiceStore.config = original end |