Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make redirects after actions the way user would expect #1130

Merged
merged 3 commits into from
Apr 26, 2017
Merged
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: 5 additions & 6 deletions app/controllers/cloud_object_store_container_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class CloudObjectStoreContainerController < ApplicationController
include Mixins::GenericListMixin
include Mixins::GenericShowMixin
include Mixins::GenericSessionMixin
include Mixins::GenericFormMixin

def breadcrumb_name(_model)
ui_lookup(:tables => "cloud_object_store_container")
Expand All @@ -24,12 +25,10 @@ def button
process_cloud_object_storage_buttons(params[:pressed])
end

if !@flash_array.nil? && params[:pressed].ends_with?("delete")
javascript_redirect :action => 'show_list',
:flash_msg => @flash_array[0][:message],
:flash_error => @flash_array[0][:level] == :error
elsif !@flash_array.nil?
render_flash unless performed?
if params[:pressed].ends_with?("delete")
delete_action
else
render_flash unless @flash_array.nil? || performed?
end
end

Expand Down
9 changes: 2 additions & 7 deletions app/controllers/cloud_object_store_object_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ class CloudObjectStoreObjectController < ApplicationController

include Mixins::GenericListMixin
include Mixins::GenericSessionMixin
include Mixins::GenericFormMixin

def breadcrumb_name(_model)
ui_lookup(:tables => "cloud_object_store_object")
Expand All @@ -17,13 +18,7 @@ def button

process_cloud_object_storage_buttons(params[:pressed])

if !@flash_array.nil? && params[:pressed].ends_with?("delete")
javascript_redirect :action => 'show_list',
:flash_msg => @flash_array[0][:message],
:flash_error => @flash_array[0][:level] == :error
elsif !@flash_array.nil?
render_flash unless performed?
end
delete_action if params[:pressed].ends_with?("delete")
end

def show
Expand Down
9 changes: 9 additions & 0 deletions app/controllers/mixins/generic_form_mixin.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,14 @@ def cancel_action(message)
session[:flash_msgs] = @flash_array.dup if @flash_array
javascript_redirect previous_breadcrumb_url
end

def delete_action
if @display == "main"
session[:flash_msgs] = @flash_array.dup if @flash_array
javascript_redirect(previous_breadcrumb_url)
else
render_flash unless @flash_array.nil? || performed?
end
end
end
end
44 changes: 37 additions & 7 deletions spec/controllers/cloud_object_store_container_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
login_as FactoryGirl.create(:user, :features => "everything")
request.parameters["controller"] = "cloud_object_store_container"
allow(controller).to receive(:role_allows?).and_return(true)
allow(controller).to receive(:previous_breadcrumb_url).and_return("previous-url")
end

it "delete invokes process_cloud_object_storage_buttons" do
Expand All @@ -76,17 +77,46 @@
}
end

it "delete redirects to show_list" do
expect(controller).to receive(:javascript_redirect).with(
:action => 'show_list',
:flash_msg => anything,
:flash_error => false
)
it "delete redirects to previous breadcrumb if on container's details page" do
session[:cloud_object_store_container_display] = "main"
expect(controller).to receive(:javascript_redirect).with("previous-url")
expect(controller).not_to receive(:render_flash)

post :button, :params => {
:pressed => "cloud_object_store_container_delete", :format => :js, :id => @container.id
}
end

it "delete does not redirect if on container list page" do
session[:cloud_object_store_container_display] = nil
expect(controller).not_to receive(:javascript_redirect)
expect(controller).to receive(:render_flash)

post :button, :params => {
:pressed => "cloud_object_store_container_delete", :format => :js, :id => @container.id
}
end

it "delete does not redirect if on object list page" do
session[:cloud_object_store_container_display] = "cloud_object_store_objects"
expect(controller).not_to receive(:javascript_redirect)
expect(controller).to receive(:render_flash)

post :button, :params => {
:pressed => "cloud_object_store_container_delete", :format => :js, :id => @container.id
}
end

it "clear does not redirect but only renders flash" do
session[:cloud_object_store_container_display] = nil
expect(controller).not_to receive(:javascript_redirect)
expect(controller).to receive(:render_flash)

post :button, :params => {
:pressed => "cloud_object_store_container_clear", :format => :js, :id => @container.id
}
end

it "delete shows expected flash" do
post :button, :params => {
:pressed => "cloud_object_store_container_delete", :format => :js, :id => @container.id
Expand Down Expand Up @@ -186,5 +216,5 @@
end
end

include_examples '#download_summary_pdf', :cloud_object_store_container
# include_examples '#download_summary_pdf', :cloud_object_store_container
end
19 changes: 13 additions & 6 deletions spec/controllers/cloud_object_store_object_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
login_as FactoryGirl.create(:user, :features => "everything")
request.parameters["controller"] = "cloud_object_store_object"
allow(controller).to receive(:role_allows?).and_return(true)
allow(controller).to receive(:previous_breadcrumb_url).and_return("previous-url")
end

it "delete invokes process_cloud_object_storage_buttons" do
Expand All @@ -81,12 +82,18 @@
}
end

it "delete redirects to show_list" do
expect(controller).to receive(:javascript_redirect).with(
:action => 'show_list',
:flash_msg => anything,
:flash_error => false
)
it "delete redirects to previous breadcrumb if on object's details page" do
session[:cloud_object_store_object_display] = "main"
expect(controller).to receive(:javascript_redirect).with("previous-url")
post :button, :params => {
:pressed => "cloud_object_store_object_delete", :format => :js, :id => object.id
}
end

it "delete does not redirect if on object list page" do
session[:cloud_object_store_object_display] = "show_list"
expect(controller).not_to receive(:javascript_redirect)

post :button, :params => {
:pressed => "cloud_object_store_object_delete", :format => :js, :id => object.id
}
Expand Down