spec/hyperdrive/resource_spec.rb in hyperdrive-0.0.5 vs spec/hyperdrive/resource_spec.rb in hyperdrive-0.0.6
- old
+ new
@@ -1,67 +1,129 @@
require 'spec_helper'
describe Hyperdrive::Resource do
before do
- @resource = Hyperdrive::Resource.new(:thing)
+ @resource = Hyperdrive::Resource.new(:thing, { vendor: 'hyperdrive', media_types: ['json'] })
+ @resource.register_param(:name, 'Thing Name')
+ @resource.register_filter(:parent_id, 'Parent ID', required: true)
+ @resource.register_request_handler(:get, Proc.new { |env| 'v1' })
+ @resource.register_request_handler(:get, Proc.new { |env| 'v2' }, 'v2')
+ @media_types = ["application/vnd.hyperdrive.things.v2+json",
+ "application/vnd.hyperdrive.things.v1+json",
+ "application/vnd.hyperdrive.things+json",
+ "application/vnd.hyperdrive+json"]
end
+ it "has an ID" do
+ @resource.id.must_equal "hyperdrive:things"
+ end
+
+ it "has a namespace" do
+ @resource.namespace.must_equal 'things'
+ end
+
+ it "has an endpoint" do
+ @resource.endpoint.must_equal '/things'
+ end
+
it "has a name" do
@resource.name = 'Thing'
@resource.name.must_equal 'Thing'
end
it "has a description" do
- @resource.desc = 'Description of Thing Resource'
- @resource.desc.must_equal 'Description of Thing Resource'
+ @resource.description = 'Thing Description'
+ @resource.description.must_equal 'Thing Description'
end
- it "has an endpoint" do
- @resource.endpoint.must_equal '/things'
+ it "auto-registers the :id param" do
+ @resource.params[:id].description.must_equal 'Identifier'
end
- it "auto-registers the :id param" do
- @resource.allowed_params[:id][:desc].must_equal 'Resource Identifier'
- @resource.allowed_params[:id][:required].must_equal %w(PUT PATCH DELETE)
+ it "registers a param" do
+ @resource.params[:name].description.must_equal 'Thing Name'
end
- it "registers an allowed param" do
- @resource.register_param(:name, "Thing's Name")
- @resource.allowed_params[:name][:desc].must_equal "Thing's Name"
- @resource.allowed_params[:name][:required].must_equal true
+ it "returns true if the param is required for the given HTTP Method" do
+ @resource.required_param?(:name, 'POST').must_equal true
end
+ it "returns false if the param is not required for the given HTTP Method" do
+ @resource.required_param?(:name, 'DELETE').must_equal false
+ end
+
it "auto-registers the :id filter" do
- @resource.filters[:id][:desc].must_equal 'Resource Identifier'
- @resource.filters[:id][:required].must_equal false
+ @resource.filters[:id].description.must_equal 'Resource Identifier'
end
it "registers a filter" do
- @resource.register_filter(:parent_id, 'Parent ID of Thing', required: true)
- @resource.filters[:parent_id][:desc].must_equal 'Parent ID of Thing'
- @resource.filters[:parent_id][:required].must_equal true
+ @resource.filters[:parent_id].description.must_equal 'Parent ID'
end
- it "defines a request handler" do
- @resource.define_request_handler(:get, Proc.new { return 'ok' })
- @resource.request_handlers[:get].call.must_equal 'ok'
+ it "returns true if the filter is required for the given HTTP Method" do
+ @resource.required_filter?(:parent_id, 'GET').must_equal true
end
+ it "returns false if the filter is not required for the given HTTP Method" do
+ @resource.required_filter?(:parent_id, 'OPTIONS').must_equal false
+ end
+
+ it "returns true if the param (or filter) is required" do
+ @resource.required?(:name, 'POST').must_equal true
+ end
+
+ it "returns true if the filter (or param) is required" do
+ @resource.required?(:parent_id, 'GET').must_equal true
+ end
+
+ it "returns false if the param (or filter) is not required" do
+ @resource.required?(:name, 'GET').must_equal false
+ end
+
+ it "returns false if the filter (or param) is not required" do
+ @resource.required?(:parent_id, 'DELETE').must_equal false
+ end
+
+ it "registers a request handler" do
+ @resource.request_handlers[:get]['v1'].must_be :===, Proc
+ end
+
+ it "auto-registers HEAD request handler when GET handler is registered" do
+ @resource.request_handlers[:head]['v1'].must_be :===, Proc
+ end
+
it "returns the specified request handler" do
- @resource.define_request_handler(:get, Proc.new { return 'ok' })
- @resource.request_handler('GET').call.must_equal 'ok'
+ @resource.request_handler('GET').must_be :===, Proc
end
it "returns true if the request can be handled" do
- @resource.define_request_handler(:get, Proc.new { return 'ok' })
@resource.request_method_allowed?('GET').must_equal true
end
it "returns false if the request can not be handled" do
- @resource.request_method_allowed?('GET').must_equal false
+ @resource.request_method_allowed?('POST').must_equal false
end
it "returns the request methods that can handled" do
- @resource.define_request_handler(:get, Proc.new { return 'ok' })
@resource.allowed_methods.must_equal ['OPTIONS','GET','HEAD']
+ end
+
+ it "returns the request handler for the specified version" do
+ @resource.request_handler('GET', 'v2').must_be :===, Proc
+ end
+
+ it "returns the acceptable content types" do
+ @resource.acceptable_content_types('GET').must_equal @media_types
+ end
+
+ it "returns the available versions for this resource" do
+ @resource.available_versions('GET').must_equal ['v2','v1']
+ end
+
+ it "returns the latest available version for this resource" do
+ @resource.latest_version('GET').must_equal 'v2'
+ end
+
+ it "returns a hash representation of the resource" do
+ @resource.to_hash.must_be_kind_of Hash
end
end