test/responder_test.rb in roar-rails-0.1.0 vs test/responder_test.rb in roar-rails-0.1.1
- old
+ new
@@ -43,10 +43,121 @@
it "inherits when subclass doesn't call ::represents" do
Class.new(One).represents_options.must_equal One.represents_options
end
end
+ class JsonResponseTest < ResponderTest
+ SingerRepresenter = ::SingerRepresenter
+ class SingersController < BaseController
+ end
+ tests SingersController
+
+ test "set Content-type to json" do
+ get do
+ singer = Singer.new("Bumi")
+ respond_with singer
+ end
+
+ @response.body.must_equal "{\"name\":\"Bumi\",\"links\":[{\"rel\":\"self\",\"href\":\"http://roar.apotomo.de/singers/Bumi\"}]}"
+ @response.headers["Content-Type"].must_match "application/json"
+ end
+ end
+
+ class SuppressingRepresenterForFormatTest < ResponderTest
+ class SingersController < BaseController
+ end
+ tests SingersController
+
+ test "returns non-represented json of model by falling back to Rails default responding when supressed in respond_with" do
+ singer = Singer.new('Bumi')
+
+ get do
+ respond_with singer, :represented_formats => []
+ end
+
+ assert_equal bumi_json, @response.body
+ end
+ end
+
+ class ProvidingRepresenterForFormatTest < ResponderTest
+ SingerRepresenter = ::SingerRepresenter
+ class SingersController < BaseController
+ represents :json, :entity => SingerRepresenter
+ end
+ tests SingersController
+
+ test "returns represented json of model when set in respond_with" do
+ singer = Singer.new('Bumi')
+
+ get do
+ respond_with singer, :represented_formats => [:json]
+ end
+
+ assert_equal %{{"name":"Bumi","links":[{"rel":"self","href":"http://roar.apotomo.de/singers/Bumi"}]}}, @response.body
+ end
+
+ test "return represented json model by using configured default" do
+ singer = Singer.new('Bumi')
+
+ Rails.application.config.representer.represented_formats = [:json]
+ get do
+ respond_with singer
+ end
+ Rails.application.config.representer.represented_formats = nil
+
+ assert_equal %{{"name":"Bumi","links":[{"rel":"self","href":"http://roar.apotomo.de/singers/Bumi"}]}}, @response.body
+ end
+
+ test "return non-represented json model by falling back to Rails default responding when supressed in the configuration" do
+ singer = Singer.new('Bumi')
+
+ Rails.application.config.representer.represented_formats = []
+ get do
+ respond_with singer
+ end
+ Rails.application.config.representer.represented_formats = nil
+
+ assert_equal bumi_json, @response.body
+ end
+
+ test "represented_formats passed to respond_with override global directive" do
+ singer = Singer.new('Bumi')
+
+ Rails.application.config.representer.represented_formats = [:hal]
+ get do
+ respond_with singer, :represented_formats => [:json]
+ end
+ Rails.application.config.representer.represented_formats = nil
+
+ assert_equal %{{"name":"Bumi","links":[{"rel":"self","href":"http://roar.apotomo.de/singers/Bumi"}]}}, @response.body
+ end
+ end
+
+ class XmlResponseTest < ResponderTest
+ module SingerRepresenter
+ include Roar::Representer::XML
+
+ property :name
+ self.representation_wrap = :singer
+ end
+
+ class SingersController < BaseController
+ respond_to :xml
+ end
+ tests SingersController
+
+ test "set Content-type to xml" do
+ get :xml do
+ singer = Singer.new("Bumi")
+ respond_with singer
+ end
+
+ @response.body.must_equal_xml '<singer><name>Bumi</name></singer>'
+ @response.headers["Content-Type"].must_match "application/xml"
+ end
+ end
+
class UnconfiguredControllerTest < ResponderTest
SingersRepresenter = ::SingersRepresenter
SingerRepresenter = ::SingerRepresenter
class SingersController < BaseController
@@ -58,11 +169,11 @@
get do
singer = Singer.new("Bumi")
respond_with singer
end
- @response.body.must_equal singer.to_json
+ @response.body.must_equal "{\"name\":\"Bumi\",\"links\":[{\"rel\":\"self\",\"href\":\"http://roar.apotomo.de/singers/Bumi\"}]}"
end
test "responder finds SingersRepresenter for collections by convention" do
get do
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
@@ -93,11 +204,11 @@
get do
singer = Singer.new("Bumi")
respond_with singer, :represent_with => SingerRepresenter
end
- assert_equal singer.to_json, @response.body
+ @response.body.must_equal "{\"name\":\"Bumi\",\"links\":[{\"rel\":\"self\",\"href\":\"http://roar.apotomo.de/singers/Bumi\"}]}"
end
test "responder uses passed representer for collection" do
get do
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
@@ -128,11 +239,11 @@
get do
singer = Singer.new("Bumi")
respond_with singer
end
- @response.body.must_equal singer.to_json
+ @response.body.must_equal "{\"name\":\"Bumi\",\"links\":[{\"rel\":\"self\",\"href\":\"http://roar.apotomo.de/singers/Bumi\"}]}"
end
test "responder uses configured representer for collection" do
get do
singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")]
@@ -222,31 +333,52 @@
created_singer.must_be_kind_of(Singer)
created_singer.name.must_equal "Mr. Bumi"
end
end
+ class FallbackTest < ResponderTest
+ class MusicianController < BaseController
+ represents :json, Object
+ end
+ tests MusicianController
- def get(&block)
+ test "passes options to entity representer" do
+ get do
+ render :text => "Rendered template"
+ end
+
+ @response.body.must_equal("Rendered template")
+ end
+ end
+
+
+
+ def get(format=:json, &block)
@controller.instance_eval do
@block = block
end
- super :execute, :format => 'json'
+ super :execute, :format => format
end
- def put(body="", &block)
+ def put(body="", format=:json, &block)
@controller.instance_eval do
@block = block
end
- super :execute, body, :format => 'json'
+ super :execute, body, :format => format
end
def singer(name="Bumi")
singer = Musician.new(name)
singer.extend SingerRepresenter
end
def singers
[singer("Bumi"), singer("Bjork"), singer("Sinead")]
+ end
+
+ def bumi_json
+ return "[\"Bumi\"]" if Roar::Rails.rails3_0?
+ "{\"name\":\"Bumi\"}"
end
end