test/responder_test.rb in roar-rails-0.0.11 vs test/responder_test.rb in roar-rails-0.0.12

- old
+ new

@@ -2,11 +2,11 @@ Singer = Struct.new(:name) module SingersRepresenter include Roar::Representer::JSON - + collection :singers, :extend => SingerRepresenter def singers each end end @@ -17,100 +17,100 @@ end class RepresentsTest < MiniTest::Spec class SingersController end - + before do @controller = Class.new do include Roar::Rails::ControllerAdditions end.new end - + describe "representer_for" do describe "nothing configured" do before do @controller = class ::SingersController include Roar::Rails::ControllerAdditions self end.new end - + it "uses model class" do assert_equal SingerRepresenter, @controller.representer_for(:json, Singer.new) end - + it "uses plural controller name when collection" do assert_equal SingersRepresenter, @controller.representer_for(:json, []) end end - + describe "represents :json, Singer" do before do @controller = class ::WhateverController < ActionController::Base include Roar::Rails::ControllerAdditions represents :json, Object self end.new end - + it "uses defined class for item" do assert_equal ObjectRepresenter, @controller.representer_for(:json, Singer.new) end - + it "uses plural name when collection" do assert_equal ObjectsRepresenter, @controller.representer_for(:json, []) end end - - + + describe "represents :json, :entity => SingerRepresenter" do before do @controller = class ::FooController < ActionController::Base include Roar::Rails::ControllerAdditions represents :json, :entity => "ObjectRepresenter" self end.new end - + it "returns :entity representer name" do assert_equal "ObjectRepresenter", @controller.representer_for(:json, Singer.new) end - + it "doesn't infer collection representer" do assert_equal nil, @controller.representer_for(:json, []) end end - + describe "represents :json, :entity => SingerRepresenter, :collection => SingersRepresenter" do before do @controller = class ::BooController < ActionController::Base include Roar::Rails::ControllerAdditions represents :json, :entity => "ObjectRepresenter", :collection => "SingersRepresenter" self end.new end - + it "uses defined class for item" do assert_equal "ObjectRepresenter", @controller.representer_for(:json, Singer.new) end - + it "uses defined class when collection" do assert_equal "SingersRepresenter", @controller.representer_for(:json, []) end end end end class ResponderTest < ActionController::TestCase include Roar::Rails::TestCase - + class BaseController < ActionController::Base include Roar::Rails::ControllerAdditions respond_to :json - + def execute instance_exec &@block end end @@ -136,20 +136,20 @@ test "responder finds SingerRepresenter representer by convention" do get do singer = Singer.new("Bumi") respond_with singer end - + assert_equal singer.to_json, @response.body end - + test "responder finds SingersRepresenter for collections by convention" do get do singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")] respond_with singers end - + assert_equal({:singers => singers.collect {|s| s.extend(SingerRepresenter).to_hash }}.to_json, @response.body) end test "responder allows empty response bodies to pass through" do put do @@ -163,81 +163,103 @@ class RespondToOptionsOverridingConfigurationTest < ResponderTest class SingersController < BaseController represents :json, Object end - + tests SingersController - + test "responder uses passed representer" do get do singer = Singer.new("Bumi") respond_with singer, :represent_with => SingerRepresenter end - + assert_equal singer.to_json, @response.body end - + test "responder uses passed representer for collection" do get do singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")] respond_with singers, :represent_with => SingersRepresenter end - + assert_equal({:singers => singers.collect {|s| s.extend(SingerRepresenter).to_hash }}.to_json, @response.body) end - + test "responder uses passed representer for collection items when :represent_items_with set" do get do singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")] respond_with singers, :represent_items_with => SingerRepresenter end - + assert_equal(singers.collect {|s| s.extend(SingerRepresenter).to_hash }.to_json, @response.body) end end - + class ConfiguredControllerTest < ResponderTest class MusicianController < BaseController represents :json, :entity => SingerRepresenter, :collection => SingersRepresenter end - + tests MusicianController - + test "responder uses configured representer" do get do singer = Singer.new("Bumi") respond_with singer end - + assert_equal singer.to_json, @response.body end - + test "responder uses configured representer for collection" do get do singers = [Singer.new("Bumi"), Singer.new("Bjork"), Singer.new("Sinead")] respond_with singers end - + assert_equal({:singers => singers.collect {|s| s.extend(SingerRepresenter).to_hash }}.to_json, @response.body) end end - + + class ControllerWithDecoratorTest < ResponderTest + class SingerRepresentation < Representable::Decorator + include Roar::Representer::JSON + include ::SingerRepresenter + end + class MusicianController < BaseController + represents :json, :entity => SingerRepresentation + end + + tests MusicianController + + test "responder uses configured decorating representer" do + get do + singer = Singer.new("Bumi") + respond_with singer + end + + assert_equal "{\"name\":\"Bumi\"}", @response.body + end + end + + def get(&block) @controller.instance_eval do @block = block end - + super :execute, :format => 'json' end def put(&block) @controller.instance_eval do @block = block end super :execute, :format => 'json' end - + def singer(name="Bumi") singer = Musician.new(name) singer.extend SingerRepresenter end