test/consume_test.rb in roar-rails-0.1.6 vs test/consume_test.rb in roar-rails-1.0.0
- old
+ new
@@ -14,20 +14,37 @@
include Roar::Rails::TestCase
tests UnnamespaceSingersController
test "#consume parses incoming document and updates the model" do
- post :consume_json, "{\"name\": \"Bumi\"}", :format => 'json'
+ @request.env['CONTENT_TYPE'] = 'application/json'
+ post :consume_json, "{\"name\": \"Bumi\"}"
assert_equal %{#<struct Singer name="Bumi">}, @response.body
end
end
+class ConsumeHalWithNoHalRespondTest < ActionController::TestCase
+ include Roar::Rails::TestCase
+
+ tests UnnamespaceSingersController
+
+ # Content-type is set properly, it's a registered mime but responder doesn't do #from_hal.
+ # FIXME: why does that still find a representer?
+ test "#consume parses hal document and updates the model" do
+ @request.env['CONTENT_TYPE'] = 'application/hal+json'
+ # assert_raises Roar::Rails::UnsupportedMediaType do
+ assert_raises NoMethodError do # currently, we don't know if a format is supported in general, or not.
+ post :consume_json, "{\"name\": \"Bumi\"}"
+ end
+ end
+end
+
class ConsumeWithConfigurationTest < ActionController::TestCase
include Roar::Rails::TestCase
module MusicianRepresenter
- include Roar::Representer::JSON
+ include Roar::JSON
property :name, :as => :called
end
class SingersController < ActionController::Base
@@ -42,15 +59,58 @@
end
tests SingersController
test "#consume uses ConsumeWithConfigurationTest::MusicianRepresenter to parse incoming document" do
+ @request.env['CONTENT_TYPE'] = 'application/json'
post :consume_json, %{{"called":"Bumi"}}, :format => :json
assert_equal %{#<struct Singer name="Bumi">}, @response.body
end
+
+ test "#do not consume missing content type" do
+ assert_raises Roar::Rails::UnsupportedMediaType do
+ post :consume_json, "{\"name\": \"Bumi\"}"
+ end
+ end
+
+
+ test "#do not consume parses unknown content type" do
+ @request.env['CONTENT_TYPE'] = 'application/custom+json'
+ assert_raises Roar::Rails::UnsupportedMediaType do
+ post :consume_json, "{\"name\": \"Bumi\"}"
+ end
+ end
end
+class ConsumeHalTest < ActionController::TestCase
+ include Roar::Rails::TestCase
+
+ module MusicianRepresenter
+ include Roar::JSON::HAL
+ property :name
+ end
+
+
+ class SingersController < ActionController::Base
+ include Roar::Rails::ControllerAdditions
+ represents :hal, :entity => MusicianRepresenter
+
+ def consume_hal
+ singer = consume!(Singer.new)
+ render :text => singer.inspect
+ end
+ end
+
+ tests SingersController
+
+ test "#consume parses HAL document and updates the model" do
+ @request.env['CONTENT_TYPE'] = 'application/hal+json'
+ post :consume_hal, "{\"name\": \"Bumi\"}"
+ assert_equal %{#<struct Singer name="Bumi">}, @response.body
+ end
+end
+
class ConsumeWithOptionsOverridingConfigurationTest < ActionController::TestCase
include Roar::Rails::TestCase
class SingersController < ActionController::Base
@@ -64,16 +124,18 @@
end
tests SingersController
test "#consume uses #represents config to parse incoming document" do
+ @request.env['CONTENT_TYPE'] = 'application/json'
post :consume_json, %{{"called":"Bumi"}}, :format => :json
assert_equal %{#<struct Singer name="Bumi">}, @response.body
end
end
class RequestBodyStringTest < ConsumeTest
test "#read rewinds before reading" do
+ @request.env['CONTENT_TYPE'] = 'application/json'
@request.instance_eval do
def body
incoming = super
incoming.read
incoming