Rewrite Request expectations as macros for readability

This commit is contained in:
Mark Maglana
2013-08-29 11:52:22 -07:00
parent 2cf31c98db
commit db9ac68d4a
4 changed files with 223 additions and 194 deletions

View File

@@ -38,22 +38,44 @@ class Aviator::Test
end end
it 'has the correct endpoint type' do validate :anonymous? do
klass.anonymous?.must_equal false
end
validate :api_version do
klass.api_version.must_equal :v2
end
validate :body do
klass.body?.must_equal false
create_request.body?.must_equal false
end
validate :endpoint_type do
klass.endpoint_type.must_equal :public klass.endpoint_type.must_equal :public
end end
validate :headers do
session_data = new_session_data
headers = { 'X-Auth-Token' => session_data[:access][:token][:id] }
it 'has the correct api version' do request = create_request(session_data)
klass.api_version.must_equal :v2
request.headers.must_equal headers
end end
it 'has the correct http method' do validate :http_method do
klass.http_method.must_equal :get klass.http_method.must_equal :get
end end
it 'has the correct list of optional parameters' do validate :optional_params do
klass.optional_params.must_equal [ klass.optional_params.must_equal [
:details, :details,
:server, :server,
@@ -67,12 +89,12 @@ class Aviator::Test
end end
it 'has the correct list of required parameters' do validate :required_params do
klass.required_params.must_equal [] klass.required_params.must_equal []
end end
it 'has the correct url' do validate :url do
session_data = new_session_data session_data = new_session_data
service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' } service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' }
url = "#{ service_spec[:endpoints][0][:publicURL] }/images" url = "#{ service_spec[:endpoints][0][:publicURL] }/images"
@@ -99,26 +121,9 @@ class Aviator::Test
request.url.must_equal url request.url.must_equal url
end end
it 'has the correct headers' do
session_data = new_session_data
headers = { 'X-Auth-Token' => session_data[:access][:token][:id] }
request = create_request(session_data)
request.headers.must_equal headers
end
it 'has the correct body' do
klass.body?.must_equal false
create_request.body?.must_equal false
end
it 'leads to a valid response when no parameters are provided' do validate_response 'no parameters are provided' do
service = Aviator::Service.new( service = Aviator::Service.new(
provider: 'openstack', provider: 'openstack',
service: 'compute', service: 'compute',
@@ -131,28 +136,9 @@ class Aviator::Test
response.body.wont_be_nil response.body.wont_be_nil
response.headers.wont_be_nil response.headers.wont_be_nil
end end
it 'leads to a valid response when parameters are provided' do
service = Aviator::Service.new(
provider: 'openstack',
service: 'compute',
default_session_data: new_session_data
)
response = service.request :list_images do |params|
params[:details] = true
params[:name] = "cirros-0.3.1-x86_64-uec-ramdisk"
end
response.status.must_equal 200
response.body.wont_be_nil
response.body[:images].length.must_equal 1
response.headers.wont_be_nil
end
it 'leads to a valid response when provided with invalid params' do validate_response 'parameters are invalid' do
service = Aviator::Service.new( service = Aviator::Service.new(
provider: 'openstack', provider: 'openstack',
service: 'compute', service: 'compute',
@@ -169,6 +155,25 @@ class Aviator::Test
response.headers.wont_be_nil response.headers.wont_be_nil
end end
validate_response 'parameters are valid' do
service = Aviator::Service.new(
provider: 'openstack',
service: 'compute',
default_session_data: new_session_data
)
response = service.request :list_images do |params|
params[:details] = true
params[:name] = "cirros-0.3.1-x86_64-uec-ramdisk"
end
response.status.must_equal 200
response.body.wont_be_nil
response.body[:images].length.must_equal 1
response.headers.wont_be_nil
end
end end
end end

View File

@@ -42,47 +42,17 @@ class Aviator::Test
end end
it 'has the correct endpoint type' do validate :api_version do
klass.endpoint_type.must_equal :admin klass.api_version.must_equal :v2
end end
it 'has the correct api version' do validate :anonymous? do
klass.api_version.must_equal :v2 klass.anonymous?.must_equal false
end end
it 'has the correct http method' do validate :body do
klass.http_method.must_equal :post
end
it 'has the correct list of required parameters' do
klass.required_params.must_equal [:name, :description, :enabled]
end
it 'has the correct url' do
session_data = helper.admin_session_data
service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == 'identity' }
url = "#{ service_spec[:endpoints][0][:adminURL] }/tenants"
request = create_request
request.url.must_equal url
end
it 'has the correct headers' do
headers = { 'X-Auth-Token' => helper.admin_session_data[:access][:token][:id] }
request = create_request
request.headers.must_equal headers
end
it 'has the correct body' do
params = { params = {
name: 'Project', name: 'Project',
description: 'My Project', description: 'My Project',
@@ -103,7 +73,61 @@ class Aviator::Test
end end
it 'leads to a valid response when provided with valid params' do validate :endpoint_type do
klass.endpoint_type.must_equal :admin
end
validate :headers do
headers = { 'X-Auth-Token' => helper.admin_session_data[:access][:token][:id] }
request = create_request
request.headers.must_equal headers
end
validate :http_method do
klass.http_method.must_equal :post
end
validate :required_params do
klass.required_params.must_equal [:name, :description, :enabled]
end
validate :url do
session_data = helper.admin_session_data
service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == 'identity' }
url = "#{ service_spec[:endpoints][0][:adminURL] }/tenants"
request = create_request
request.url.must_equal url
end
validate_response 'params are invalid' do
service = Aviator::Service.new(
provider: 'openstack',
service: 'identity',
default_session_data: new_session_data
)
response = service.request :create_tenant do |params|
params[:name] = ""
params[:description] = ""
params[:enabled] = true
end
response.status.must_equal 400
response.body.wont_be_nil
response.headers.wont_be_nil
end
validate_response 'params are valid' do
service = Aviator::Service.new( service = Aviator::Service.new(
provider: 'openstack', provider: 'openstack',
service: 'identity', service: 'identity',
@@ -122,24 +146,6 @@ class Aviator::Test
end end
it 'leads to a valid response when provided with invalid params' do
service = Aviator::Service.new(
provider: 'openstack',
service: 'identity',
default_session_data: new_session_data
)
response = service.request :create_tenant do |params|
params[:name] = ""
params[:description] = ""
params[:enabled] = true
end
response.status.must_equal 400
response.body.wont_be_nil
response.headers.wont_be_nil
end
end end
end end

View File

@@ -24,45 +24,17 @@ class Aviator::Test
end end
it 'has the correct endpoint type' do validate :anonymous? do
klass.endpoint_type.must_equal :public klass.anonymous?.must_equal true
end end
it 'has the correct api version' do validate :api_version do
klass.api_version.must_equal :v2 klass.api_version.must_equal :v2
end end
it 'has the correct http method' do validate :body do
klass.http_method.must_equal :post
end
it 'has the correct list of required parameters' do
klass.required_params.must_equal []
end
it 'has the correct list of optional parameters' do
klass.optional_params.must_equal [:username, :password, :tokenId, :tenantName, :tenantId]
end
it 'has the correct url' do
session_data = helper.admin_bootstrap_session_data
url = "#{ session_data[:auth_service][:host_uri] }/v2.0/tokens"
create_request.url.must_equal url
end
it 'has the correct headers' do
create_request.headers?.must_equal false
end
it 'has the correct body' do
p = { p = {
auth: { auth: {
passwordCredentials: { passwordCredentials: {
@@ -76,66 +48,100 @@ class Aviator::Test
end end
it 'leads to a valid response when provided with valid params' do validate :endpoint_type do
service = Aviator::Service.new( klass.endpoint_type.must_equal :public
provider: 'openstack',
service: 'identity',
default_session_data: RequestHelper.admin_bootstrap_session_data
)
response = service.request :create_token do |params|
params[:username] = Environment.openstack_admin[:auth_credentials][:username]
params[:password] = Environment.openstack_admin[:auth_credentials][:password]
end
response.status.must_equal 200
response.body.wont_be_nil
response.headers.wont_be_nil
end end
it 'leads to a valid response when provided with a token' do validate :headers do
service = Aviator::Service.new( create_request.headers?.must_equal false
provider: 'openstack',
service: 'identity',
default_session_data: RequestHelper.admin_bootstrap_session_data
)
response = service.request :create_token do |params|
params[:username] = Environment.openstack_admin[:auth_credentials][:username]
params[:password] = Environment.openstack_admin[:auth_credentials][:password]
end
token = response.body[:access][:token][:id]
response = service.request :create_token do |params|
params[:tokenId] = token
params[:tenantName] = Environment.openstack_admin[:auth_credentials][:tenantName]
end
response.status.must_equal 200
response.body.wont_be_nil
response.headers.wont_be_nil
end end
it 'leads to a valid response when provided with invalid params' do validate :http_method do
klass.http_method.must_equal :post
end
validate :optional_params do
klass.optional_params.must_equal [:username, :password, :tokenId, :tenantName, :tenantId]
end
validate :required_params do
klass.required_params.must_equal []
end
validate :url do
session_data = helper.admin_bootstrap_session_data
url = "#{ session_data[:auth_service][:host_uri] }/v2.0/tokens"
create_request.url.must_equal url
end
validate_response 'parameters are invalid' do
service = Aviator::Service.new( service = Aviator::Service.new(
provider: 'openstack', provider: 'openstack',
service: 'identity', service: 'identity',
default_session_data: RequestHelper.admin_bootstrap_session_data default_session_data: RequestHelper.admin_bootstrap_session_data
) )
response = service.request :create_token do |params| response = service.request :create_token do |params|
params[:username] = 'somebogususer' params[:username] = 'somebogususer'
params[:password] = 'doesitreallymatter?' params[:password] = 'doesitreallymatter?'
end end
response.status.must_equal 401 response.status.must_equal 401
response.body.wont_be_nil response.body.wont_be_nil
response.headers.wont_be_nil response.headers.wont_be_nil
end end
validate_response 'parameters are valid' do
service = Aviator::Service.new(
provider: 'openstack',
service: 'identity',
default_session_data: RequestHelper.admin_bootstrap_session_data
)
response = service.request :create_token do |params|
params[:username] = Environment.openstack_admin[:auth_credentials][:username]
params[:password] = Environment.openstack_admin[:auth_credentials][:password]
end
response.status.must_equal 200
response.body.wont_be_nil
response.headers.wont_be_nil
end
validate_response 'provided with a token' do
service = Aviator::Service.new(
provider: 'openstack',
service: 'identity',
default_session_data: RequestHelper.admin_bootstrap_session_data
)
response = service.request :create_token do |params|
params[:username] = Environment.openstack_admin[:auth_credentials][:username]
params[:password] = Environment.openstack_admin[:auth_credentials][:password]
end
token = response.body[:access][:token][:id]
response = service.request :create_token do |params|
params[:tokenId] = token
params[:tenantName] = Environment.openstack_admin[:auth_credentials][:tenantName]
end
response.status.must_equal 200
response.body.wont_be_nil
response.headers.wont_be_nil
end
end end
end end

View File

@@ -1,27 +1,39 @@
module Aviator module Aviator
class Test < MiniTest::Spec class Test < MiniTest::Spec
def cassette_name def self.validate(name, &block)
path = self.class.to_s it "returns the correct value for #{ name.to_s }", &block
.gsub(/^aviator\//, '') end
.gsub(/^Aviator::Test::/, '')
.gsub(/::#/, '/i_')
.gsub(/::::/, '/c_') def self.validate_response(scenario, &block)
.gsub(/::/, '/') it "leads to a valid response when #{ scenario.to_s }", &block
.underscore end
basename = __name__.gsub(/test_\d+_/, '')
"#{ path }/#{ basename }"
end
before do def cassette_name
::VCR.insert_cassette cassette_name path = self.class.to_s
end .gsub(/^aviator\//, '')
.gsub(/^Aviator::Test::/, '')
.gsub(/::#/, '/i_')
.gsub(/::::/, '/c_')
.gsub(/::/, '/')
.underscore
basename = __name__.gsub(/test_\d+_/, '')
"#{ path }/#{ basename }"
end
after do before do
::VCR.eject_cassette ::VCR.insert_cassette cassette_name
end end
after do
::VCR.eject_cassette
end
end end
end end