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