test/collection_json_test.rb in roar-1.0.1 vs test/collection_json_test.rb in roar-1.0.2

- old
+ new

@@ -1,130 +1,132 @@ require 'test_helper' require 'roar/json/collection_json' -class CollectionJsonTest < MiniTest::Spec - let(:song) { OpenStruct.new(:title => "scarifice", :length => 43) } +if RUBY_ENGINE != "rbx" + class CollectionJsonTest < MiniTest::Spec + let(:song) { OpenStruct.new(:title => "scarifice", :length => 43) } - representer_for([Roar::JSON::CollectionJSON]) do - version "1.0" - href { "//songs/" } + representer_for([Roar::JSON::CollectionJSON]) do + version "1.0" + href { "//songs/" } - link(:feed) { "//songs/feed" } + link(:feed) { "//songs/feed" } - items(:class => Song) do - href { "//songs/scarifice" } + items(:class => Song) do + href { "//songs/scarifice" } - property :title, :prompt => "Song title" - property :length, :prompt => "Song length" + property :title, :prompt => "Song title" + property :length, :prompt => "Song length" - link(:download) { "//songs/scarifice.mp3" } - link(:stats) { "//songs/scarifice/stats" } - end + link(:download) { "//songs/scarifice.mp3" } + link(:stats) { "//songs/scarifice/stats" } + end - template do - property :title, :prompt => "Song title" - property :length, :prompt => "Song length" - end + template do + property :title, :prompt => "Song title" + property :length, :prompt => "Song length" + end - queries do - link :search do - {:href => "//search", :data => [{:name => "q", :value => ""}]} + queries do + link :search do + {:href => "//search", :data => [{:name => "q", :value => ""}]} + end end end - end - describe "#to_json" do - it "renders document" do - [song].extend(rpr).to_hash.must_equal( - { - "collection"=>{ - "version"=>"1.0", - "href"=>"//songs/", + describe "#to_json" do + it "renders document" do + [song].extend(rpr).to_hash.must_equal( + { + "collection"=>{ + "version"=>"1.0", + "href"=>"//songs/", - "template"=>{ - :data=>[ - {:name=>"title", :value=>nil}, - {:name=>"length", :value=>nil} - ] - }, - - "queries"=>[ - {"rel"=>"search", "href"=>"//search", - "data"=>[ - {:name=>"q", :value=>""} - ] - } - ], - - "items"=>[ - { - "links"=>[ - {"rel"=>"download", "href"=>"//songs/scarifice.mp3"}, - {"rel"=>"stats", "href"=>"//songs/scarifice/stats"} - ], - "href"=>"//songs/scarifice", + "template"=>{ :data=>[ - {:name=>"title", :value=>"scarifice"}, - {:name=>"length", :value=>43} + {:name=>"title", :value=>nil}, + {:name=>"length", :value=>nil} ] - } - ], + }, - "links"=>[ - {"rel"=>"feed", "href"=>"//songs/feed"} - ] - } - })# %{{"collection":{"version":"1.0","href":"//songs/","items":[{"href":"//songs/scarifice","links":[{"rel":"download","href":"//songs/scarifice.mp3"},{"rel":"stats","href":"//songs/scarifice/stats"}],"data":[{"name":"title","value":"scarifice"},{"name":"length","value":43}]}],"template":{"data":[{"name":"title","value":null},{"name":"length","value":null}]},"queries":[{"rel":"search","href":"//search","data":[{"name":"q","value":""}]}],"links":[{"rel":"feed","href":"//songs/feed"}]}}} - end - end + "queries"=>[ + {"rel"=>"search", "href"=>"//search", + "data"=>[ + {:name=>"q", :value=>""} + ] + } + ], - describe "#from_json" do - subject { [].extend(rpr).from_json [song].extend(rpr).to_json } + "items"=>[ + { + "links"=>[ + {"rel"=>"download", "href"=>"//songs/scarifice.mp3"}, + {"rel"=>"stats", "href"=>"//songs/scarifice/stats"} + ], + "href"=>"//songs/scarifice", + :data=>[ + {:name=>"title", :value=>"scarifice"}, + {:name=>"length", :value=>43} + ] + } + ], - it "provides #version" do - subject.version.must_equal "1.0" + "links"=>[ + {"rel"=>"feed", "href"=>"//songs/feed"} + ] + } + })# %{{"collection":{"version":"1.0","href":"//songs/","items":[{"href":"//songs/scarifice","links":[{"rel":"download","href":"//songs/scarifice.mp3"},{"rel":"stats","href":"//songs/scarifice/stats"}],"data":[{"name":"title","value":"scarifice"},{"name":"length","value":43}]}],"template":{"data":[{"name":"title","value":null},{"name":"length","value":null}]},"queries":[{"rel":"search","href":"//search","data":[{"name":"q","value":""}]}],"links":[{"rel":"feed","href":"//songs/feed"}]}}} + end end - it "provides #href" do - subject.href.must_equal link(:href => "//songs/") - end + describe "#from_json" do + subject { [].extend(rpr).from_json [song].extend(rpr).to_json } - it "provides #template" do - # DISCUSS: this might return a Template instance, soon. - subject.template.must_equal([ - {"name"=>"title", "value"=>nil}, - {"name"=>"length", "value"=>nil}]) - end + it "provides #version" do + subject.version.must_equal "1.0" + end - it "provides #queries" do - # DISCUSS: this might return CollectionJSON::Hyperlink instances that support some kind of substitution operation for the :data attribute. - # FIXME: this is currently _not_ parsed! - subject.queries.must_equal([link(:rel => :search, :href=>"//search", :data=>[{:name=>"q", :value=>""}])]) - end + it "provides #href" do + subject.href.must_equal link(:href => "//songs/") + end - it "provides #items" do - subject.items.must_equal([Song.new(:title => "scarifice", :length => "43")]) - song = subject.items.first - song.title.must_equal "scarifice" - song.length.must_equal 43 - song.links.must_equal("download" => link({:rel=>"download", :href=>"//songs/scarifice.mp3"}), "stats" => link({:rel=>"stats", :href=>"//songs/scarifice/stats"})) - song.href.must_equal link(:href => "//songs/scarifice") - end + it "provides #template" do + # DISCUSS: this might return a Template instance, soon. + subject.template.must_equal([ + {"name"=>"title", "value"=>nil}, + {"name"=>"length", "value"=>nil}]) + end - it "provides #links" do - subject.links.must_equal({"feed" => link(:rel => "feed", :href => "//songs/feed")}) + it "provides #queries" do + # DISCUSS: this might return CollectionJSON::Hyperlink instances that support some kind of substitution operation for the :data attribute. + # FIXME: this is currently _not_ parsed! + subject.queries.must_equal([link(:rel => :search, :href=>"//search", :data=>[{:name=>"q", :value=>""}])]) + end + + it "provides #items" do + subject.items.must_equal([Song.new(:title => "scarifice", :length => "43")]) + song = subject.items.first + song.title.must_equal "scarifice" + song.length.must_equal 43 + song.links.must_equal("download" => link({:rel=>"download", :href=>"//songs/scarifice.mp3"}), "stats" => link({:rel=>"stats", :href=>"//songs/scarifice/stats"})) + song.href.must_equal link(:href => "//songs/scarifice") + end + + it "provides #links" do + subject.links.must_equal({"feed" => link(:rel => "feed", :href => "//songs/feed")}) + end end - end - describe "template_representer#from_json" do - it "parses object" do - song = OpenStruct.new.extend(rpr.template_representer).from_hash( - "template"=>{ - "data"=>[ - {"name"=>"title", "value"=>"Black Star"}, - {"name"=>"length", "value"=>"4.53"} - ] - }) - song.title.must_equal "Black Star" + describe "template_representer#from_json" do + it "parses object" do + song = OpenStruct.new.extend(rpr.template_representer).from_hash( + "template"=>{ + "data"=>[ + {"name"=>"title", "value"=>"Black Star"}, + {"name"=>"length", "value"=>"4.53"} + ] + }) + song.title.must_equal "Black Star" + end end end end \ No newline at end of file