Rewrite Request expectations as macros for readability
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user