Skip to content

Commit

Permalink
fix tests with ruby 2.2. there's something wrong with attr_accessor?
Browse files Browse the repository at this point in the history
  • Loading branch information
apotonick committed Oct 20, 2014
1 parent 286f714 commit 03edfa4
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 166 deletions.
2 changes: 1 addition & 1 deletion TODO.markdown
Expand Up @@ -2,7 +2,7 @@

* merge client errors request
* simpler link for JSON-API?

* remove HttpVerbs deprecations

* Hyperlink representers => decrators. test hash representer with decorator (rpr)

Expand Down
3 changes: 3 additions & 0 deletions test/coercion_feature_test.rb
Expand Up @@ -10,6 +10,9 @@ class ImmigrantSong
property :composed_at, :type => DateTime, :default => "May 12th, 2012"

attr_accessor :composed_at
def composed_at=(v) # in ruby 2.2, #label= is not there, all at sudden. what *is* that?
@composed_at = v
end
end

it "coerces into the provided type" do
Expand Down
4 changes: 4 additions & 0 deletions test/http_verbs_test.rb
Expand Up @@ -8,6 +8,10 @@ class HttpVerbsTest < MiniTest::Spec
# keep this class clear of Roar modules.
class Band
attr_accessor :name, :label

def label=(v) # in ruby 2.2, #label= is not there, all at sudden. what *is* that?
@label = v
end
end

let (:band) { OpenStruct.new(:name => "bodyjar").extend(Roar::HttpVerbs, BandRepresenter) }
Expand Down
4 changes: 4 additions & 0 deletions test/json_representer_test.rb
Expand Up @@ -9,6 +9,10 @@ class Order
property :id
property :pending
attr_accessor :id, :pending

def id=(v) # in ruby 2.2, #id= is not there, all at sudden. what *is* that?
@id=v
end
end


Expand Down
190 changes: 25 additions & 165 deletions test/xml_representer_test.rb
@@ -1,185 +1,45 @@
require 'test_helper'

class ItemRepresenter
include AttributesConstructor
include Roar::XML
self.representation_wrap= :item
property :value
attr_accessor :value
end

class PositionRepresenter
include AttributesConstructor
include Roar::XML
self.representation_wrap= :position
property :id
property :item, :class => ItemRepresenter
attr_accessor :id, :item
end


class XMLRepresenterFunctionalTest < MiniTest::Spec
class Order
include AttributesConstructor
attr_accessor :id, :items
end

class GreedyOrder < Order
end

class TestXmlRepresenter
module OrderRepresenter
include Roar::XML
self.representation_wrap= :order

property :id
attr_accessor :id
self.representation_wrap = :order
end

Order = Struct.new(:id, :items)

describe "XMLRepresenter" do
before do
@m = {"id" => "1"}
@o = Order.new(@m)

@r = TestXmlRepresenter.new
@i = ItemRepresenter.new
@i.value = "Beer"
end

describe "#to_xml" do
it "serializes the model" do
assert_xml_equal "<order/>", @r.to_xml

@r.id = 1
assert_xml_equal "<order><id>1</id></order>", @r.to_xml
describe "#to_xml" do
let (:order) { Order.new(1).extend(OrderRepresenter) }

@r.id = 2
assert_xml_equal "<rap><id>2</id></rap>", @r.to_xml(:wrap => :rap)
end
# empty model
it { Order.new.extend(OrderRepresenter).to_xml.must_equal_xml "<order/>" }

it "is aliased by #serialize" do
assert_equal @r.to_xml, @r.serialize
end
# populated model
it { order.to_xml.must_equal_xml "<order><id>1</id></order>" }

it "accepts :include and :exclude" do
assert_equal '<order/>', @r.to_xml(:exclude => [:id])
end
end

describe "#from_xml" do
it "deserializes object" do
@order = Order.new.from_xml("<order><id>1</id></order>")
assert_equal "1", @order.id
end

it "is aliased by #deserialize" do
@order = Order.new.deserialize("<order><id>1</id></order>")
assert_equal "1", @order.id
end

it "accepts :include and :exclude" do
@order = Order.new.deserialize("<order><id>1</id></order>", :exclude => [:id])
assert_equal nil, @order.id
end
end
# with wrap
it { order.to_xml(wrap: :rap).must_equal_xml "<rap><id>1</id></rap>" }

# aliased to #serialize
it { order.to_xml.must_equal order.serialize }

describe "XML.from_xml" do
class Order
include Roar::XML
property :id
property :pending
attr_accessor :id, :pending
end

it "is aliased to #deserialize" do
assert_equal TestXmlRepresenter.new.from_xml("<order/>").id, TestXmlRepresenter.new.deserialize("<order/>").id
end

it "accepts :exclude option" do
order = Order.new.from_xml(%{<order><id>1</id><pending>1</pending></order>}, :exclude => [:id])
assert_equal nil, order.id
assert_equal "1", order.pending
end

it "accepts :include option" do
order = Order.new.from_xml(%{<order><id>1</id><pending>1</pending></order>}, :include => [:id])
assert_equal "1", order.id
assert_equal nil, order.pending
end
end


describe "without options" do
it ".from_xml returns the deserialized model" do
@m = TestXmlRepresenter.new.from_xml("<order><id>1</id></order>")
assert_equal "1", @m.id
end

#it ".from_xml still works with nil" do
# assert TestXmlRepresenter.from_xml(nil)
#end

end


describe "with a typed attribute" do
before do
@r = PositionRepresenter.new("id" => "1")
end

it "#serialize skips empty :item" do
assert_xml_equal "<position><id>1</id></position>", @r.to_xml
end

it "#to_xml delegates to ItemRepresenter#to_xml" do
@r.item = @i
assert_xml_equal "<position><id>1</id><item><value>Beer</value></item></position>", @r.to_xml
end

it ".from_xml typecasts :item" do
@m = PositionRepresenter.new.from_xml("<position><id>1</id><item><value>beer</value></item>\n</position>")

assert_equal "1", @m.id
assert_equal "beer", @m.item.value
end
end


describe "with a typed list" do
before do
@c = Class.new do
include AttributesConstructor
include Roar::XML

self.representation_wrap= :order
property :id
collection :items, :class => ItemRepresenter, :as => :item
attr_accessor :id, :items
end

@r = @c.new("id" => 1)
end

it "#serialize_model skips empty :item" do
assert_xml_equal "<order><id>1</id></order>", @r.to_xml
end

it "#serialize delegates to ItemXmlRepresenter#to_xml in list" do
@r.items = [ItemRepresenter.new("value" => "Bier")]
# accepts options
it { order.to_xml(exclude: [:id]).must_equal_xml "<order/>" }
end

assert_xml_equal "<order><id>1</id><item><value>Bier</value></item></order>",
@r.to_xml
end
describe "#from_xml" do
let (:order) { Order.new.extend(OrderRepresenter) }

it ".from_xml typecasts list" do
@m = @r.from_xml("<order><id>1</id><item><value>beer</value></item>\n</order>")
# parses
it { order.from_xml("<order><id>1</id></order>").id.must_equal "1" }

assert_equal "1", @m.id
assert_equal 1, @m.items.size
assert_equal "beer", @m.items.first.value
end
end
# aliased to #deserialize
it { order.deserialize("<order><id>1</id></order>").id.must_equal "1" }

# accepts options
it { order.from_xml("<order><id>1</id></order>", exclude: [:id]).id.must_equal nil }
end
end

Expand Down

0 comments on commit 03edfa4

Please sign in to comment.