From: Jan Provazník <jan.provaznik(a)gmail.com>
'available' flag is now set also on 'test connect' and successful
'update' action
this patch also fixes bug with missing provider_types if new/edit form is
rendered from update/create actions
---
src/app/controllers/providers_controller.rb | 5 +++--
src/app/models/provider.rb | 21 ++++++++++-----------
src/spec/controllers/provider_controller_spec.rb | 15 +++++++++++++++
3 files changed, 28 insertions(+), 13 deletions(-)
diff --git a/src/app/controllers/providers_controller.rb
b/src/app/controllers/providers_controller.rb
index 0819b99..9de75dd 100644
--- a/src/app/controllers/providers_controller.rb
+++ b/src/app/controllers/providers_controller.rb
@@ -17,7 +17,7 @@
class ProvidersController < ApplicationController
before_filter :require_user
before_filter :load_providers, :only => [:index, :show, :new, :edit, :create,
:update]
- before_filter :load_providers_types, :only => [:new, :edit]
+ before_filter :load_providers_types, :only => [:new, :edit, :update, :create]
def index
@params = params
@@ -129,6 +129,7 @@ class ProvidersController < ApplicationController
end
if @provider.save
+ @provider.update_availability
flash[:notice] = t"providers.flash.notice.updated"
redirect_to edit_provider_path(@provider)
else
@@ -166,7 +167,7 @@ class ProvidersController < ApplicationController
def test_connection(provider)
@provider.errors.clear
- if @provider.connect
+ if @provider.update_availability
flash.now[:notice] = t"providers.flash.notice.connected"
else
flash.now[:warning] = t"providers.flash.warning.connect_failed"
diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb
index 9d5877c..2033a04 100644
--- a/src/app/models/provider.rb
+++ b/src/app/models/provider.rb
@@ -140,22 +140,21 @@ class Provider < ActiveRecord::Base
provider_accounts.inject([]) {|all, pa| all += pa.instances.stoppable_inaccessible}
end
+ def update_availability
+ self.available = valid_framework?
+ if self.available_changed? and !new_record?
+ update_attribute(:available, self.available)
+ logger.warn "#{name} provider's availability changed to
#{self.available}"
+ end
+ self.available
+ end
+
def populate_realms
reload
- self.available = valid_framework?
- if self.available_changed?
- if self.available
- logger.warn "provider #{name} is now available"
- save!
- else
- logger.warn "provider #{name} is not available"
- update_attribute(:available, false)
- end
- end
# if the provider is not running, mark as unavailable and don't refresh its
# realms
- return unless self.available
+ return unless update_availability
conductor_acct_realms = {}
conductor_acct_realm_ids = {}
diff --git a/src/spec/controllers/provider_controller_spec.rb
b/src/spec/controllers/provider_controller_spec.rb
index f7fac96..3098523 100644
--- a/src/spec/controllers/provider_controller_spec.rb
+++ b/src/spec/controllers/provider_controller_spec.rb
@@ -35,4 +35,19 @@ describe ProvidersController do
it { assigns[:realm_names].size.should == @provider.realms.size }
it { response.should render_template(:partial => "providers/_realms") }
end
+
+ describe "check availability" do
+ context "when provider is not accessible" do
+ before do
+ @provider.update_attribute(:url, "invalid_url")
+ end
+
+ it "should update availability status on test connection" do
+ @provider.available.should_not be_false
+ get :edit, :id => @provider.id, :test_provider => true
+ @provider.reload
+ @provider.available.should be_false
+ end
+ end
+ end
end
--
1.7.7.6