From da6c280a912b7619a7ca0911f37da7a7672a8af1 Mon Sep 17 00:00:00 2001 From: Antonio Terceiro Date: Fri, 28 Dec 2012 21:58:31 -0300 Subject: [PATCH] Fix cart cleaning with path-specific cookie --- plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb | 7 ++++++- plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb | 12 ++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb b/plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb index ff5b6af..949ab8d 100644 --- a/plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb +++ b/plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb @@ -109,6 +109,7 @@ class ShoppingCartPluginController < PublicController enterprise = Enterprise.find(cart[:enterprise_id]) ShoppingCartPlugin::Mailer.deliver_customer_notification(params[:customer], enterprise, self.cart[:items]) ShoppingCartPlugin::Mailer.deliver_supplier_notification(params[:customer], enterprise, self.cart[:items]) + self.cart = nil render :text => { :ok => true, :message => _('Request sent successfully. Check your email.'), @@ -279,7 +280,11 @@ class ShoppingCartPluginController < PublicController after_filter :save_cookie def save_cookie if @cart.nil? - cookies.delete(cookie_key) + cookies[cookie_key] = { + :value => '', + :path => '/plugin/shopping_cart', + :expires => 1.year.ago, + } else cookies[cookie_key] = { :value => Base64.encode64(@cart.to_yaml), diff --git a/plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb b/plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb index b367653..f303c2d 100644 --- a/plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb +++ b/plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb @@ -16,9 +16,10 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase attr_reader :enterprise attr_reader :product - should 'return no cookie for an empty cart' do + should 'force cookie expiration with explicit path for an empty cart' do get :get - assert_nil @response.cookies[:_noosfero_plugin_shopping_cart] + last_year = 1.year.ago.year + assert @response.headers['Set-Cookie'].any? { |c| c =~ /_noosfero_plugin_shopping_cart=; path=\/plugin\/shopping_cart; expires=.*-#{last_year}/} end should 'add a new product to cart' do @@ -180,6 +181,13 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase assert_equal 0, order.products_list[product1.id][:price] end + should 'clean the cart after placing the order' do + product1 = fast_create(Product, :enterprise_id => enterprise.id) + post :add, :id => product1.id + post :send_request, :customer => { :name => "Manuel", :email => "manuel@ceu.com" } + assert !cart?, "cart expected to be empty!" + end + private def json_response -- libgit2 0.21.2