From db9ac68d4a76ac678e51f79db87b82a9f92752c2 Mon Sep 17 00:00:00 2001 From: Mark Maglana Date: Thu, 29 Aug 2013 11:52:22 -0700 Subject: [PATCH] Rewrite Request expectations as macros for readability --- .../compute/v2/public/list_images_test.rb | 99 +++++------ .../identity/v2/admin/create_tenant_test.rb | 114 +++++++------ .../identity/v2/public/create_token_test.rb | 154 +++++++++--------- test/support/test_base_class.rb | 50 +++--- 4 files changed, 223 insertions(+), 194 deletions(-) diff --git a/test/aviator/openstack/compute/v2/public/list_images_test.rb b/test/aviator/openstack/compute/v2/public/list_images_test.rb index 78bdf8f..4138e96 100644 --- a/test/aviator/openstack/compute/v2/public/list_images_test.rb +++ b/test/aviator/openstack/compute/v2/public/list_images_test.rb @@ -38,22 +38,44 @@ class Aviator::Test 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 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 - klass.api_version.must_equal :v2 + request = create_request(session_data) + + request.headers.must_equal headers end - - - it 'has the correct http method' do + + + validate :http_method do klass.http_method.must_equal :get end - it 'has the correct list of optional parameters' do + validate :optional_params do klass.optional_params.must_equal [ :details, :server, @@ -67,12 +89,12 @@ class Aviator::Test end - it 'has the correct list of required parameters' do + validate :required_params do klass.required_params.must_equal [] end - it 'has the correct url' do + validate :url do session_data = new_session_data service_spec = session_data[:access][:serviceCatalog].find{|s| s[:type] == 'compute' } url = "#{ service_spec[:endpoints][0][:publicURL] }/images" @@ -99,26 +121,9 @@ class Aviator::Test request.url.must_equal url 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( provider: 'openstack', service: 'compute', @@ -131,28 +136,9 @@ class Aviator::Test response.body.wont_be_nil response.headers.wont_be_nil 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( provider: 'openstack', service: 'compute', @@ -169,6 +155,25 @@ class Aviator::Test response.headers.wont_be_nil 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 \ No newline at end of file diff --git a/test/aviator/openstack/identity/v2/admin/create_tenant_test.rb b/test/aviator/openstack/identity/v2/admin/create_tenant_test.rb index f087236..8dc60d1 100644 --- a/test/aviator/openstack/identity/v2/admin/create_tenant_test.rb +++ b/test/aviator/openstack/identity/v2/admin/create_tenant_test.rb @@ -42,47 +42,17 @@ class Aviator::Test end - it 'has the correct endpoint type' do - klass.endpoint_type.must_equal :admin + validate :api_version do + klass.api_version.must_equal :v2 end - it 'has the correct api version' do - klass.api_version.must_equal :v2 + validate :anonymous? do + klass.anonymous?.must_equal false end - it 'has the correct http method' 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 + validate :body do params = { name: 'Project', description: 'My Project', @@ -103,7 +73,61 @@ class Aviator::Test 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( provider: 'openstack', service: 'identity', @@ -122,24 +146,6 @@ class Aviator::Test 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 \ No newline at end of file diff --git a/test/aviator/openstack/identity/v2/public/create_token_test.rb b/test/aviator/openstack/identity/v2/public/create_token_test.rb index 60092be..8e3461d 100644 --- a/test/aviator/openstack/identity/v2/public/create_token_test.rb +++ b/test/aviator/openstack/identity/v2/public/create_token_test.rb @@ -24,45 +24,17 @@ class Aviator::Test end - it 'has the correct endpoint type' do - klass.endpoint_type.must_equal :public + validate :anonymous? do + klass.anonymous?.must_equal true end - it 'has the correct api version' do - klass.api_version.must_equal :v2 + validate :api_version do + klass.api_version.must_equal :v2 end - it 'has the correct http method' 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 + validate :body do p = { auth: { passwordCredentials: { @@ -76,66 +48,100 @@ class Aviator::Test end - it 'leads to a valid response when provided with valid params' 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 + validate :endpoint_type do + klass.endpoint_type.must_equal :public end - it 'leads to a valid response when 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 + validate :headers do + create_request.headers?.must_equal false 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( provider: 'openstack', service: 'identity', default_session_data: RequestHelper.admin_bootstrap_session_data ) - + response = service.request :create_token do |params| params[:username] = 'somebogususer' params[:password] = 'doesitreallymatter?' end - + response.status.must_equal 401 response.body.wont_be_nil response.headers.wont_be_nil 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 \ No newline at end of file diff --git a/test/support/test_base_class.rb b/test/support/test_base_class.rb index e258010..527c6dd 100644 --- a/test/support/test_base_class.rb +++ b/test/support/test_base_class.rb @@ -1,27 +1,39 @@ module Aviator class Test < MiniTest::Spec - def cassette_name - path = self.class.to_s - .gsub(/^aviator\//, '') - .gsub(/^Aviator::Test::/, '') - .gsub(/::#/, '/i_') - .gsub(/::::/, '/c_') - .gsub(/::/, '/') - .underscore - - basename = __name__.gsub(/test_\d+_/, '') - - "#{ path }/#{ basename }" - end + def self.validate(name, &block) + it "returns the correct value for #{ name.to_s }", &block + end + + + def self.validate_response(scenario, &block) + it "leads to a valid response when #{ scenario.to_s }", &block + end + - before do - ::VCR.insert_cassette cassette_name - end + def cassette_name + path = self.class.to_s + .gsub(/^aviator\//, '') + .gsub(/^Aviator::Test::/, '') + .gsub(/::#/, '/i_') + .gsub(/::::/, '/c_') + .gsub(/::/, '/') + .underscore + + basename = __name__.gsub(/test_\d+_/, '') + + "#{ path }/#{ basename }" + end + - after do - ::VCR.eject_cassette - end + before do + ::VCR.insert_cassette cassette_name + end + + + after do + ::VCR.eject_cassette + end end end \ No newline at end of file