require 'test_helper'
class RepresentTest < MiniTest::Spec
let (:songs) { [song, Song.new("Can't Take Them All")] }
let (:song) { Song.new("Days Go By") }
for_formats(
:hash => [Representable::Hash, out=[{"name" => "Days Go By"}, {"name"=>"Can't Take Them All"}], out],
# :json => [Representable::JSON, out="[{\"name\":\"Days Go By\"},{\"name\":\"Can't Take Them All\"}]", out],
# :xml => [Representable::XML, out="", out]
) do |format, mod, output, input|
# Representer.represents detects collection.
describe "Module#to_/from_#{format}" do
let (:format) { format }
let (:representer) {
Module.new do
include mod
property :name
collection_representer :class => Song # TODOOOOOOOOOOOO: test without Song and fix THIS FUCKINGNoMethodError: undefined method `name=' for {"name"=>"Days Go By"}:Hash ERROR!!!!!!!!!!!!!!!
end
}
it { render(representer.represent(songs)).must_equal_document output }
it { parse(representer.represent([]), input).must_equal songs }
end
# Decorator.represents detects collection.
describe "Decorator#to_/from_#{format}" do
let (:format) { format }
let (:representer) {
Class.new(Representable::Decorator) do
include mod
property :name
collection_representer :class => Song
end
}
it { render(representer.represent(songs)).must_equal_document output }
it("ficken") { parse(representer.represent([]), input).must_equal songs }
end
end
for_formats(
:hash => [Representable::Hash, out={"name" => "Days Go By"}, out],
:json => [Representable::JSON, out="{\"name\":\"Days Go By\"}", out],
# :xml => [Representable::XML, out="", out]
) do |format, mod, output, input|
# Representer.represents detects singular.
describe "Module#to_/from_#{format}" do
let (:format) { format }
let (:representer) {
Module.new do
include mod
property :name
collection_representer :class => Song
end
}
it { render(representer.represent(song)).must_equal_document output }
it { parse(representer.represent(Song.new), input).must_equal song }
end
# Decorator.represents detects singular.
describe "Decorator#to_/from_#{format}" do
let (:format) { format }
let (:representer) {
Class.new(Representable::Decorator) do
include mod
property :name
collection_representer :class => Song
end
}
it { render(representer.represent(song)).must_equal_document output }
it { parse(representer.represent(Song.new), input).must_equal song }
end
end
end