test/json_representer_test.rb in roar-0.8.0 vs test/json_representer_test.rb in roar-0.8.1

- old
+ new

@@ -1,41 +1,53 @@ require 'test_helper' require "test_xml/mini_test" require "roar/representer/json" -class JsonRepresenterFunctionalTest < MiniTest::Spec - class OrderRepresenter < Roar::Representer::JSON - self.representation_name= :order - representable_property :id +class JsonRepresenterTest < MiniTest::Spec + class Order + include Roar::Representer::JSON + property :id + property :pending end describe "JsonRepresenter" do before do - @r = OrderRepresenter.new + @r = Order.new end describe "#to_json" do it "#serialize returns the serialized model" do @r.id = 1 - assert_equal '{"order":{"id":1}}', @r.serialize + assert_equal '{"order":{"id":1}}', @r.to_json end - - - it ".from_xml returns the deserialized model" do - @m = OrderRepresenter.deserialize('{"order": {"id":1}}') + end + + describe ".from_json" do + it "returns the deserialized model" do + @m = Order.from_json('{"order": {"id":1}}') assert_equal 1, @m.id end - it ".from_xml still works with nil" do - assert OrderRepresenter.deserialize(nil) + it "accepts :except option" do + order = Order.from_json({order: {id: 1, pending: 1}}.to_json, :except => [:id]) + assert_equal nil, order.id + assert_equal 1, order.pending end + it "accepts :include option" do + order = Order.from_json({order: {id: 1, pending: 1}}.to_json, :include => [:id]) + assert_equal 1, order.id + assert_equal nil, order.pending + end + + it "works with a nil document" do + assert Order.from_json(nil) + end end end - end class JsonHyperlinkRepresenterTest describe "API" do before do @@ -58,44 +70,37 @@ end class JsonHypermediaTest describe "Hypermedia API" do before do - @c = Class.new(Roar::Representer::JSON) do + @c = Class.new do + include Roar::Representer::JSON include Roar::Representer::Feature::Hypermedia self.representation_name= :order - representable_property :id + property :id link :self do "http://self" end link :next do "http://next/#{id}" end end @r = @c.new end it "responds to #links" do - assert_equal nil, @r.links + assert_equal [], @r.links end - it "computes links in #from_attributes" do - @r = @c.from_attributes({"id" => 1}) - assert_equal 2, @r.links.size - assert_equal({"rel"=>:self, "href"=>"http://self"}, @r.links.first.to_attributes) - assert_equal({"rel"=>:next, "href"=>"http://next/1"}, @r.links.last.to_attributes) - end - it "extracts links from JSON" do - @r = @c.deserialize({:order => {:links => [{:rel => "self", :href => "http://self"}]}}.to_json) + @r = @c.from_json({:order => {:links => [{:rel => "self", :href => "http://self"}]}}.to_json) assert_equal 1, @r.links.size assert_equal({"rel"=>"self", "href"=>"http://self"}, @r.links.first.to_attributes) end it "renders link: correctly in JSON" do - assert_equal "{\"order\":{\"id\":1,\"links\":[{\"rel\":\"self\",\"href\":\"http://self\"},{\"rel\":\"next\",\"href\":\"http://next/1\"}]}}", @c.from_attributes({"id" => 1}).serialize + assert_equal "{\"order\":{\"id\":1,\"links\":[{\"rel\":\"self\",\"href\":\"http://self\"},{\"rel\":\"next\",\"href\":\"http://next/1\"}]}}", @c.from_attributes(:id => 1).to_json end - end end