Commit da6c280a912b7619a7ca0911f37da7a7672a8af1

Authored by Antonio Terceiro
1 parent c553ad10

Fix cart cleaning with path-specific cookie

plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb
... ... @@ -109,6 +109,7 @@ class ShoppingCartPluginController < PublicController
109 109 enterprise = Enterprise.find(cart[:enterprise_id])
110 110 ShoppingCartPlugin::Mailer.deliver_customer_notification(params[:customer], enterprise, self.cart[:items])
111 111 ShoppingCartPlugin::Mailer.deliver_supplier_notification(params[:customer], enterprise, self.cart[:items])
  112 + self.cart = nil
112 113 render :text => {
113 114 :ok => true,
114 115 :message => _('Request sent successfully. Check your email.'),
... ... @@ -279,7 +280,11 @@ class ShoppingCartPluginController < PublicController
279 280 after_filter :save_cookie
280 281 def save_cookie
281 282 if @cart.nil?
282   - cookies.delete(cookie_key)
  283 + cookies[cookie_key] = {
  284 + :value => '',
  285 + :path => '/plugin/shopping_cart',
  286 + :expires => 1.year.ago,
  287 + }
283 288 else
284 289 cookies[cookie_key] = {
285 290 :value => Base64.encode64(@cart.to_yaml),
... ...
plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb
... ... @@ -16,9 +16,10 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase
16 16 attr_reader :enterprise
17 17 attr_reader :product
18 18  
19   - should 'return no cookie for an empty cart' do
  19 + should 'force cookie expiration with explicit path for an empty cart' do
20 20 get :get
21   - assert_nil @response.cookies[:_noosfero_plugin_shopping_cart]
  21 + last_year = 1.year.ago.year
  22 + assert @response.headers['Set-Cookie'].any? { |c| c =~ /_noosfero_plugin_shopping_cart=; path=\/plugin\/shopping_cart; expires=.*-#{last_year}/}
22 23 end
23 24  
24 25 should 'add a new product to cart' do
... ... @@ -180,6 +181,13 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase
180 181 assert_equal 0, order.products_list[product1.id][:price]
181 182 end
182 183  
  184 + should 'clean the cart after placing the order' do
  185 + product1 = fast_create(Product, :enterprise_id => enterprise.id)
  186 + post :add, :id => product1.id
  187 + post :send_request, :customer => { :name => "Manuel", :email => "manuel@ceu.com" }
  188 + assert !cart?, "cart expected to be empty!"
  189 + end
  190 +
183 191 private
184 192  
185 193 def json_response
... ...