Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions fake/lib/ey_services_fake/mock_backend.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ def self.setup!(actors = {})
unless actors[:tresfiestas]
actors[:tresfiestas] = tresfiestas_fake.new
end
actors[:api_version] ||= 1
new(actors)
end

Expand Down Expand Up @@ -69,8 +70,8 @@ def actor(role)
def reset!
@app = nil
@apps = nil
@actors.values.each do |v|
v.reset!
@actors.each do |k, v|
v.reset! unless k == :api_version
end
end

Expand All @@ -84,9 +85,9 @@ def awsm
end

def partner
partner_hash = actor(:tresfiestas).find_partner(sso_user)
partner_hash = actor(:tresfiestas).find_partner(sso_user, actor(:api_version))
unless partner_hash
partner_hash = actor(:tresfiestas).create_partner(sso_user, actor(:service_provider).base_url, app_for(:service_provider))
partner_hash = actor(:tresfiestas).create_partner(sso_user, actor(:service_provider).base_url, app_for(:service_provider), actor(:api_version))
@actors.values.each do |actor|
if actor.respond_to?(:service_provider_setup)
actor.service_provider_setup(partner_hash[:auth_id], partner_hash[:auth_key], actor(:service_provider).base_url, app_for(:service_provider))
Expand All @@ -101,7 +102,7 @@ def service
partner_hash = self.partner
service_hash = actor(:tresfiestas).find_service(partner_hash[:id])
unless service_hash
actor(:service_provider).register_service(partner_hash[:registration_url])
actor(:service_provider).register_service(partner_hash[:registration_url], actor(:api_version))
service_hash = actor(:tresfiestas).find_service(partner_hash[:id])
end
if actor(:tresfiestas).respond_to?(:document_service)
Expand Down
146 changes: 92 additions & 54 deletions fake/lib/ey_services_fake/mocking_bird_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,79 +5,101 @@ class MockingBirdService

def self.implement_the_app(app)
app.class_eval do
enable :raise_errors
disable :dump_errors
disable :show_exceptions
enable :raise_errors
disable :dump_errors
disable :show_exceptions

class << self
attr_accessor :parent
end
def parent
self.class.parent
end
class << self
attr_accessor :parent
end
def parent
self.class.parent
end

delete '/api/1/some_provisioned_service' do
content_type :json
if parent.service_deprovisioning_handler
instance_eval(&parent.service_deprovisioning_handler)
else
{}.to_json
delete '/api/1/some_provisioned_service' do
content_type :json
if parent.service_deprovisioning_handler
instance_eval(&parent.service_deprovisioning_handler)
else
{}.to_json
end
end
end

delete '/api/1/account/:account_id' do |account_id|
content_type :json
if parent.service_account_cancel_handler
instance_eval(&parent.service_account_cancel_handler)
else
{}.to_json
delete '/api/1/account/:account_id' do |account_id|
content_type :json
if parent.service_account_cancel_handler
instance_eval(&parent.service_account_cancel_handler)
else
{}.to_json
end
end
end

post '/api/1/service_accounts_callback' do
content_type :json
if parent.service_account_creation_handler
instance_eval(&parent.service_account_creation_handler)
else
service_account = EY::ServicesAPI::ServiceAccountCreation.from_request(request.body.read)
response_params = parent.service_account_creation_params(123)
EY::ServicesAPI::ServiceAccountResponse.new(response_params).to_hash.to_json
post '/api/1/service_accounts_callback' do
content_type :json
if parent.service_account_creation_handler
instance_eval(&parent.service_account_creation_handler)
else
service_account = EY::ServicesAPI::ServiceAccountCreation.from_request(request.body.read)
response_params = parent.service_account_creation_params(123)
EY::ServicesAPI::ServiceAccountResponse.new(response_params).to_hash.to_json
end
end
end

post '/api/1/account/:account_id/provisioned_services_callback' do |account_id|
content_type :json
if parent.service_provisioning_handler
instance_eval(&parent.service_provisioning_handler)
else
provisioned_service = EY::ServicesAPI::ProvisionedServiceCreation.from_request(request.body.read)
standard_response_params = parent.service_provisioned_params
EY::ServicesAPI::ProvisionedServiceResponse.new(parent.service_provisioned_params).to_hash.to_json
post '/api/1/account/:account_id/provisioned_services_callback' do |account_id|
content_type :json
if parent.service_provisioning_handler
instance_eval(&parent.service_provisioning_handler)
else
provisioned_service = EY::ServicesAPI::ProvisionedServiceCreation.from_request(request.body.read)
standard_response_params = parent.service_provisioned_params
EY::ServicesAPI::ProvisionedServiceResponse.new(parent.service_provisioned_params).to_hash.to_json
end
end
end

get '/sso/account/:account_id' do |account_id|
parent.account_sso_hook(params)
"SSO Hello Service Account"
end
post '/api/2/resources_callback' do
content_type :json
if parent.service_provisioning_handler
instance_eval(&parent.service_provisioning_handler)
else
EY::ServicesAPI::ProvisionedServiceResponse.new(parent.v2_service_provisioning_params).to_hash.to_json
end
end

get '/sso/some_provisioned_service' do
"SSO Hello Provisioned Service"
end
delete '/api/2/resources_callback' do
content_type :json
if parent.service_deprovisioning_handler
instance_eval(&parent.service_deprovisioning_handler)
else
{}.to_json
end
end

get '/sso/account/:account_id' do |account_id|
parent.account_sso_hook(params)
"SSO Hello Service Account"
end

get '/sso/some_provisioned_service' do
"SSO Hello Provisioned Service"
end
end
end
class << self
attr_accessor :service_account_creation_handler
attr_accessor :service_provisioning_handler
attr_accessor :service_deprovisioning_handler
attr_accessor :service_account_cancel_handler
attr_accessor :v2_service_provisioning_handler
attr_accessor :v2_service_deprovisioning_handler
end

def reset!
self.class.service_account_creation_handler = nil
self.class.service_provisioning_handler = nil
self.class.service_deprovisioning_handler = nil
self.class.service_account_cancel_handler = nil
self.class.v2_service_provisioning_handler = nil
self.class.v2_service_deprovisioning_handler = nil
end

def make_app
Expand Down Expand Up @@ -109,16 +131,18 @@ def self.base_url
def registration_params
self.class.registration_params
end
def self.registration_params
{
def self.registration_params(api_version = 1)
params = {
:name => "Mocking Bird",
:label => "mocking_bird",
:description => "a mock service",
:service_accounts_url => "#{base_url}api/1/service_accounts_callback",
:home_url => "#{base_url}",
:terms_and_conditions_url => "#{base_url}terms",
:vars => ["some_var", "other_var"]
}
params.merge!(:service_accounts_url => "#{base_url}api/1/service_accounts_callback")
params.merge!(:resources_url => "#{base_url}api/2/resources_callback", :level => "environment") if api_version == 2
params
end

def service_account_creation_params(account_id)
Expand All @@ -130,7 +154,7 @@ def self.service_account_creation_params(account_id)
:url => "#{base_url}api/1/account/#{account_id}",
:configuration_url => "#{base_url}sso/account/#{account_id}",
:configuration_required => false,
:message => EY::ServicesAPI::Message.new(:message_type => "status", :subject => "some messages"),
:message => EY::ServicesAPI::Message.new(:message_type => "status", :subject => "some messages")
}
end

Expand All @@ -151,8 +175,8 @@ def self.account_sso_hook(params)
#no-op
end

def register_service(registration_url)
EY::ServicesAPI.connection.register_service(registration_url, self.class.registration_params)
def register_service(registration_url, api_version = 1)
EY::ServicesAPI.connection.register_service(registration_url, self.class.registration_params(api_version))
end

def send_message(message_url, message_type, message_subject, message_body)
Expand All @@ -166,5 +190,19 @@ def send_invoice(invoices_url, total_amount_cent, line_item_description)
EY::ServicesAPI.connection.send_invoice(invoices_url, invoice)
end

def v2_service_provisioning_params
self.class.v2_service_provisioning_params
end

def self.v2_service_provisioning_params
account_id = 25
{
:vars => {"some_var" => "value", "other_var" => "blah"},
:url => "#{base_url}api/2/account/#{account_id}",
:configuration_url => "#{base_url}sso/account/#{account_id}",
:api_version => 2
}
end

end
end
4 changes: 2 additions & 2 deletions fake/lib/ey_services_fake/tresfiestas_fake.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def create_awsm(awsm_base_url, awsm_app)
find_awsm
end

def find_partner(sso_user)
def find_partner(sso_user, api_version = "ignored")
partner_object = Partner.first
partner_object && {
:id => partner_object.id,
Expand All @@ -47,7 +47,7 @@ def find_partner(sso_user)
}
end

def create_partner(sso_user, partner_base_url, partner_app)
def create_partner(sso_user, partner_base_url, partner_app, api_version = "ignored")
Partner.create(:auth_id => "123edf", :auth_key => "abc456", :name => "Some-Partner")
app.partner_connection = EY::ApiHMAC::AuthedConnection.new("123edf", "abc456")
app.partner_connection.backend = partner_app
Expand Down
2 changes: 1 addition & 1 deletion fake/lib/ey_services_fake/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module EyServicesFake
VERSION = "0.3.19"
VERSION = "0.3.20"
end
25 changes: 17 additions & 8 deletions lib/ey_services_api/provisioned_service_response.rb
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
module EY
module ServicesAPI
class ProvisionedServiceResponse < APIStruct.new(:configuration_required, :configuration_url, :message, :vars, :url)
class ProvisionedServiceResponse < APIStruct.new(:configuration_required, :configuration_url, :message, :vars, :url, :api_version)

def to_hash
{
:provisioned_service => {
if api_version == 2
{
:resource => {
:url => self.url,
:configuration_required => self.configuration_required,
:configuration_url => self.configuration_url,
:vars => self.vars,
},
:message => self.message && self.message.to_hash,
}
}
}
else
{
:provisioned_service => {
:url => self.url,
:configuration_required => self.configuration_required,
:configuration_url => self.configuration_url,
:vars => self.vars,
},
:message => self.message && self.message.to_hash,
}
end
end

end
end
end
2 changes: 1 addition & 1 deletion lib/ey_services_api/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module EY
module ServicesAPI
VERSION = "0.3.19"
VERSION = "0.3.20"
end
end
69 changes: 69 additions & 0 deletions spec/provisioned_service_response_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
require 'rspec'

describe EY::ServicesAPI::ProvisionedServiceResponse do

describe "#to_hash" do
let(:url) { "some url" }
let(:vars) { [ 'var1', 'var2' ] }
let(:configuration_url) { "some config url" }

context "v1" do
let(:configuration_required) { true }
let(:message) { { body: "Some text" } }
let(:message_obj) { double(:to_hash => message) }
let(:params) {
{
url: url,
configuration_required: configuration_required,
configuration_url: configuration_url,
vars: vars,
message: message
}
}
let(:expected_result) {
{
provisioned_service: {
url: url,
configuration_required: configuration_required,
configuration_url: configuration_url,
vars: vars
},
message: message
}
}

it 'should return a hash with the correct keys' do
EY::ServicesAPI::ProvisionedServiceResponse.new(params).to_hash.should eq expected_result

EY::ServicesAPI::ProvisionedServiceResponse.new(params.merge(api_version: 1)).to_hash.should eq expected_result
end
end

context "v2" do
let(:url) { "some url" }
let(:vars) { [ 'var1', 'var2' ] }
let(:configuration_url) { "some config url" }
let(:params) {
{
url: url,
configuration_url: configuration_url,
vars: vars,
api_version: 2
}
}
let(:expected_result) {
{
resource: {
url: url,
configuration_url: configuration_url,
vars: vars
}
}
}

it 'should return a hash with the correct keys' do
EY::ServicesAPI::ProvisionedServiceResponse.new(params).to_hash.should eq expected_result
end
end
end
end