From a122d110d08f7d77ba29167f191bdb68c14385f7 Mon Sep 17 00:00:00 2001 From: HuyH+HungT Date: Tue, 8 Oct 2013 11:00:35 +0700 Subject: [PATCH 1/2] [f] 174 - Rebase v2 nextgen_ux UI to master branch (https://www.pivotaltracker.com/story/show/58330174) --- fake/lib/ey_services_fake/mock_backend.rb | 11 +- .../ey_services_fake/mocking_bird_service.rb | 146 +++++++++++------- fake/lib/ey_services_fake/version.rb | 2 +- .../provisioned_service_response.rb | 25 ++- lib/ey_services_api/version.rb | 2 +- spec/provisioned_service_response_spec.rb | 69 +++++++++ 6 files changed, 186 insertions(+), 69 deletions(-) create mode 100644 spec/provisioned_service_response_spec.rb diff --git a/fake/lib/ey_services_fake/mock_backend.rb b/fake/lib/ey_services_fake/mock_backend.rb index 48ac7d3..d71d973 100644 --- a/fake/lib/ey_services_fake/mock_backend.rb +++ b/fake/lib/ey_services_fake/mock_backend.rb @@ -18,6 +18,7 @@ def self.setup!(actors = {}) unless actors[:tresfiestas] actors[:tresfiestas] = tresfiestas_fake.new end + actors[:api_version] ||= 1 new(actors) end @@ -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 @@ -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)) @@ -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) diff --git a/fake/lib/ey_services_fake/mocking_bird_service.rb b/fake/lib/ey_services_fake/mocking_bird_service.rb index 2958787..85718f8 100644 --- a/fake/lib/ey_services_fake/mocking_bird_service.rb +++ b/fake/lib/ey_services_fake/mocking_bird_service.rb @@ -5,65 +5,83 @@ 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 @@ -71,6 +89,8 @@ class << self 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! @@ -78,6 +98,8 @@ def reset! 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 @@ -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) @@ -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 @@ -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) @@ -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 diff --git a/fake/lib/ey_services_fake/version.rb b/fake/lib/ey_services_fake/version.rb index 7c5887a..e4b9e92 100644 --- a/fake/lib/ey_services_fake/version.rb +++ b/fake/lib/ey_services_fake/version.rb @@ -1,3 +1,3 @@ module EyServicesFake - VERSION = "0.3.19" + VERSION = "0.3.20" end diff --git a/lib/ey_services_api/provisioned_service_response.rb b/lib/ey_services_api/provisioned_service_response.rb index 10d94ce..3cef0f0 100644 --- a/lib/ey_services_api/provisioned_service_response.rb +++ b/lib/ey_services_api/provisioned_service_response.rb @@ -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 \ No newline at end of file diff --git a/lib/ey_services_api/version.rb b/lib/ey_services_api/version.rb index ed6bc48..44434ce 100644 --- a/lib/ey_services_api/version.rb +++ b/lib/ey_services_api/version.rb @@ -1,5 +1,5 @@ module EY module ServicesAPI - VERSION = "0.3.19" + VERSION = "0.3.20" end end diff --git a/spec/provisioned_service_response_spec.rb b/spec/provisioned_service_response_spec.rb new file mode 100644 index 0000000..95deb8b --- /dev/null +++ b/spec/provisioned_service_response_spec.rb @@ -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 \ No newline at end of file From 44f5413eb05944ff4d00a576884d76b983107196 Mon Sep 17 00:00:00 2001 From: Jacob Date: Tue, 8 Oct 2013 16:28:49 -0700 Subject: [PATCH 2/2] Fix specs? --- fake/lib/ey_services_fake/tresfiestas_fake.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fake/lib/ey_services_fake/tresfiestas_fake.rb b/fake/lib/ey_services_fake/tresfiestas_fake.rb index d922ea7..8dcc374 100644 --- a/fake/lib/ey_services_fake/tresfiestas_fake.rb +++ b/fake/lib/ey_services_fake/tresfiestas_fake.rb @@ -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, @@ -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