Commit b2e59b620688129c3a6649c34816221be8f04896
1 parent
ddf8ec9d
Exists in
master
and in
21 other branches
shopping_cart: fix tests
Showing
15 changed files
with
331 additions
and
450 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb
@@ -8,39 +8,39 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -8,39 +8,39 @@ class ShoppingCartPluginController < OrdersPluginController | ||
8 | def get | 8 | def get |
9 | config = | 9 | config = |
10 | if cart.nil? | 10 | if cart.nil? |
11 | - { :profile_id => params[:profile_id], | ||
12 | - :has_products => false, | ||
13 | - :visible => false, | ||
14 | - :products => []} | 11 | + { profile_id: params[:profile_id], |
12 | + has_products: false, | ||
13 | + visible: false, | ||
14 | + products: []} | ||
15 | else | 15 | else |
16 | { | 16 | { |
17 | - :profile_id => cart[:profile_id], | ||
18 | - :profile_short_name => cart_profile.short_name, | ||
19 | - :has_products => (cart[:items].keys.size > 0), | ||
20 | - :visible => visible?, | ||
21 | - :products => products, | 17 | + profile_id: cart[:profile_id], |
18 | + profile_short_name: cart_profile.short_name, | ||
19 | + has_products: (cart[:items].keys.size > 0), | ||
20 | + visible: visible?, | ||
21 | + products: products, | ||
22 | } | 22 | } |
23 | end | 23 | end |
24 | config[:has_previous_orders] = if cart_profile then previous_orders.first.present? else false end | 24 | config[:has_previous_orders] = if cart_profile then previous_orders.first.present? else false end |
25 | - render :text => config.to_json | 25 | + render text: config.to_json |
26 | end | 26 | end |
27 | 27 | ||
28 | def add | 28 | def add |
29 | product = find_product(params[:id]) | 29 | product = find_product(params[:id]) |
30 | if product && (profile = validate_same_profile(product)) | 30 | if product && (profile = validate_same_profile(product)) |
31 | - self.cart = { :profile_id => profile.id, :items => {} } if self.cart.nil? | 31 | + self.cart = { profile_id: profile.id, items: {} } if self.cart.nil? |
32 | self.cart[:items][product.id] = 0 if self.cart[:items][product.id].nil? | 32 | self.cart[:items][product.id] = 0 if self.cart[:items][product.id].nil? |
33 | self.cart[:items][product.id] += 1 | 33 | self.cart[:items][product.id] += 1 |
34 | - render :text => { | ||
35 | - :ok => true, | ||
36 | - :error => {:code => 0}, | ||
37 | - :products => [{ | ||
38 | - :id => product.id, | ||
39 | - :name => product.name, | ||
40 | - :price => get_price(product, profile.environment), | ||
41 | - :description => product.description, | ||
42 | - :picture => product.default_image(:minor), | ||
43 | - :quantity => self.cart[:items][product.id] | 34 | + render text: { |
35 | + ok: true, | ||
36 | + error: {code: 0}, | ||
37 | + products: [{ | ||
38 | + id: product.id, | ||
39 | + name: product.name, | ||
40 | + price: get_price(product, profile.environment), | ||
41 | + description: product.description, | ||
42 | + picture: product.default_image(:minor), | ||
43 | + quantity: self.cart[:items][product.id] | ||
44 | }] | 44 | }] |
45 | }.to_json | 45 | }.to_json |
46 | end | 46 | end |
@@ -51,20 +51,20 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -51,20 +51,20 @@ class ShoppingCartPluginController < OrdersPluginController | ||
51 | if validate_cart_presence && validate_cart_has_product(id) | 51 | if validate_cart_presence && validate_cart_has_product(id) |
52 | self.cart[:items].delete(id) | 52 | self.cart[:items].delete(id) |
53 | self.cart = nil if self.cart[:items].empty? | 53 | self.cart = nil if self.cart[:items].empty? |
54 | - render :text => { | ||
55 | - :ok => true, | ||
56 | - :error => {:code => 0}, | ||
57 | - :product_id => id | 54 | + render text: { |
55 | + ok: true, | ||
56 | + error: {code: 0}, | ||
57 | + product_id: id | ||
58 | }.to_json | 58 | }.to_json |
59 | end | 59 | end |
60 | end | 60 | end |
61 | 61 | ||
62 | def list | 62 | def list |
63 | if validate_cart_presence | 63 | if validate_cart_presence |
64 | - render :text => { | ||
65 | - :ok => true, | ||
66 | - :error => {:code => 0}, | ||
67 | - :products => products | 64 | + render text: { |
65 | + ok: true, | ||
66 | + error: {code: 0}, | ||
67 | + products: products | ||
68 | }.to_json | 68 | }.to_json |
69 | end | 69 | end |
70 | end | 70 | end |
@@ -75,20 +75,20 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -75,20 +75,20 @@ class ShoppingCartPluginController < OrdersPluginController | ||
75 | if validate_cart_presence && validate_cart_has_product(id) && validate_item_quantity(quantity) | 75 | if validate_cart_presence && validate_cart_has_product(id) && validate_item_quantity(quantity) |
76 | product = Product.find(id) | 76 | product = Product.find(id) |
77 | self.cart[:items][product.id] = quantity | 77 | self.cart[:items][product.id] = quantity |
78 | - render :text => { | ||
79 | - :ok => true, | ||
80 | - :error => {:code => 0}, | ||
81 | - :product_id => id, | ||
82 | - :quantity => quantity | 78 | + render text: { |
79 | + ok: true, | ||
80 | + error: {code: 0}, | ||
81 | + product_id: id, | ||
82 | + quantity: quantity | ||
83 | }.to_json | 83 | }.to_json |
84 | end | 84 | end |
85 | end | 85 | end |
86 | 86 | ||
87 | def clean | 87 | def clean |
88 | self.cart = nil | 88 | self.cart = nil |
89 | - render :text => { | ||
90 | - :ok => true, | ||
91 | - :error => {:code => 0} | 89 | + render text: { |
90 | + ok: true, | ||
91 | + error: {code: 0} | ||
92 | }.to_json | 92 | }.to_json |
93 | end | 93 | end |
94 | 94 | ||
@@ -121,7 +121,7 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -121,7 +121,7 @@ class ShoppingCartPluginController < OrdersPluginController | ||
121 | @profile = cart_profile | 121 | @profile = cart_profile |
122 | @order = profile.sales.build consumer: user | 122 | @order = profile.sales.build consumer: user |
123 | 123 | ||
124 | - @order.supplier_delivery = profile.delivery_methods.find session[:cart][:last_delivery_option_id] rescue nil | 124 | + @order.supplier_delivery = profile.delivery_methods.where(id: session[:cart][:last_delivery_option_id]).first |
125 | if repeat_order_id = self.cart[:repeat_order_id] | 125 | if repeat_order_id = self.cart[:repeat_order_id] |
126 | repeat_order = cart_profile.orders.where(id: repeat_order_id).first | 126 | repeat_order = cart_profile.orders.where(id: repeat_order_id).first |
127 | @order.consumer_delivery_data = repeat_order.consumer_delivery_data if repeat_order | 127 | @order.consumer_delivery_data = repeat_order.consumer_delivery_data if repeat_order |
@@ -146,23 +146,23 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -146,23 +146,23 @@ class ShoppingCartPluginController < OrdersPluginController | ||
146 | end | 146 | end |
147 | 147 | ||
148 | def visibility | 148 | def visibility |
149 | - render :text => visible?.to_json | 149 | + render text: visible?.to_json |
150 | end | 150 | end |
151 | 151 | ||
152 | def show | 152 | def show |
153 | begin | 153 | begin |
154 | self.cart[:visibility] = true | 154 | self.cart[:visibility] = true |
155 | - render :text => { | ||
156 | - :ok => true, | ||
157 | - :message => _('Basket displayed.'), | ||
158 | - :error => {:code => 0} | 155 | + render text: { |
156 | + ok: true, | ||
157 | + message: _('Basket displayed.'), | ||
158 | + error: {code: 0} | ||
159 | }.to_json | 159 | }.to_json |
160 | rescue Exception => exception | 160 | rescue Exception => exception |
161 | - render :text => { | ||
162 | - :ok => false, | ||
163 | - :error => { | ||
164 | - :code => 7, | ||
165 | - :message => exception.message | 161 | + render text: { |
162 | + ok: false, | ||
163 | + error: { | ||
164 | + code: 7, | ||
165 | + message: exception.message | ||
166 | } | 166 | } |
167 | }.to_json | 167 | }.to_json |
168 | end | 168 | end |
@@ -171,17 +171,17 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -171,17 +171,17 @@ class ShoppingCartPluginController < OrdersPluginController | ||
171 | def hide | 171 | def hide |
172 | begin | 172 | begin |
173 | self.cart[:visibility] = false | 173 | self.cart[:visibility] = false |
174 | - render :text => { | ||
175 | - :ok => true, | ||
176 | - :message => _('Basket hidden.'), | ||
177 | - :error => {:code => 0} | 174 | + render text: { |
175 | + ok: true, | ||
176 | + message: _('Basket hidden.'), | ||
177 | + error: {code: 0} | ||
178 | }.to_json | 178 | }.to_json |
179 | rescue Exception => exception | 179 | rescue Exception => exception |
180 | - render :text => { | ||
181 | - :ok => false, | ||
182 | - :error => { | ||
183 | - :code => 8, | ||
184 | - :message => exception.message | 180 | + render text: { |
181 | + ok: false, | ||
182 | + error: { | ||
183 | + code: 8, | ||
184 | + message: exception.message | ||
185 | } | 185 | } |
186 | }.to_json | 186 | }.to_json |
187 | end | 187 | end |
@@ -189,7 +189,7 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -189,7 +189,7 @@ class ShoppingCartPluginController < OrdersPluginController | ||
189 | 189 | ||
190 | def update_supplier_delivery | 190 | def update_supplier_delivery |
191 | @profile = cart_profile | 191 | @profile = cart_profile |
192 | - supplier_delivery = @profile.delivery_methods.find params[:order][:supplier_delivery_id] | 192 | + supplier_delivery = @profile.delivery_methods.where(id: params[:order][:supplier_delivery_id]).first |
193 | order = build_order self.cart[:items], supplier_delivery | 193 | order = build_order self.cart[:items], supplier_delivery |
194 | total_price = order.total_price | 194 | total_price = order.total_price |
195 | render json: { | 195 | render json: { |
@@ -210,11 +210,11 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -210,11 +210,11 @@ class ShoppingCartPluginController < OrdersPluginController | ||
210 | 210 | ||
211 | def validate_same_profile(product) | 211 | def validate_same_profile(product) |
212 | if self.cart && self.cart[:profile_id] && product.profile_id != self.cart[:profile_id] | 212 | if self.cart && self.cart[:profile_id] && product.profile_id != self.cart[:profile_id] |
213 | - render :text => { | ||
214 | - :ok => false, | ||
215 | - :error => { | ||
216 | - :code => 1, | ||
217 | - :message => _("Your basket contains items from '%{profile_name}'. Please empty the basket or checkout before adding items from here.") % {profile_name: cart_profile.short_name} | 213 | + render text: { |
214 | + ok: false, | ||
215 | + error: { | ||
216 | + code: 1, | ||
217 | + message: _("Your basket contains items from '%{profile_name}'. Please empty the basket or checkout before adding items from here.") % {profile_name: cart_profile.short_name} | ||
218 | } | 218 | } |
219 | }.to_json | 219 | }.to_json |
220 | return nil | 220 | return nil |
@@ -224,11 +224,11 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -224,11 +224,11 @@ class ShoppingCartPluginController < OrdersPluginController | ||
224 | 224 | ||
225 | def validate_cart_presence | 225 | def validate_cart_presence |
226 | if self.cart.nil? | 226 | if self.cart.nil? |
227 | - render :text => { | ||
228 | - :ok => false, | ||
229 | - :error => { | ||
230 | - :code => 2, | ||
231 | - :message => _("There is no basket.") | 227 | + render text: { |
228 | + ok: false, | ||
229 | + error: { | ||
230 | + code: 2, | ||
231 | + message: _("There is no basket.") | ||
232 | } | 232 | } |
233 | }.to_json | 233 | }.to_json |
234 | return false | 234 | return false |
@@ -240,11 +240,11 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -240,11 +240,11 @@ class ShoppingCartPluginController < OrdersPluginController | ||
240 | begin | 240 | begin |
241 | product = Product.find(id) | 241 | product = Product.find(id) |
242 | rescue ActiveRecord::RecordNotFound | 242 | rescue ActiveRecord::RecordNotFound |
243 | - render :text => { | ||
244 | - :ok => false, | ||
245 | - :error => { | ||
246 | - :code => 3, | ||
247 | - :message => _("This enterprise doesn't have this product.") | 243 | + render text: { |
244 | + ok: false, | ||
245 | + error: { | ||
246 | + code: 3, | ||
247 | + message: _("This enterprise doesn't have this product.") | ||
248 | } | 248 | } |
249 | }.to_json | 249 | }.to_json |
250 | return nil | 250 | return nil |
@@ -254,11 +254,11 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -254,11 +254,11 @@ class ShoppingCartPluginController < OrdersPluginController | ||
254 | 254 | ||
255 | def validate_cart_has_product(id) | 255 | def validate_cart_has_product(id) |
256 | if !self.cart[:items].has_key?(id) | 256 | if !self.cart[:items].has_key?(id) |
257 | - render :text => { | ||
258 | - :ok => false, | ||
259 | - :error => { | ||
260 | - :code => 4, | ||
261 | - :message => _("The basket doesn't have this product.") | 257 | + render text: { |
258 | + ok: false, | ||
259 | + error: { | ||
260 | + code: 4, | ||
261 | + message: _("The basket doesn't have this product.") | ||
262 | } | 262 | } |
263 | }.to_json | 263 | }.to_json |
264 | return false | 264 | return false |
@@ -268,11 +268,11 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -268,11 +268,11 @@ class ShoppingCartPluginController < OrdersPluginController | ||
268 | 268 | ||
269 | def validate_item_quantity(quantity) | 269 | def validate_item_quantity(quantity) |
270 | if quantity.to_i < 1 | 270 | if quantity.to_i < 1 |
271 | - render :text => { | ||
272 | - :ok => false, | ||
273 | - :error => { | ||
274 | - :code => 5, | ||
275 | - :message => _("Invalid quantity.") | 271 | + render text: { |
272 | + ok: false, | ||
273 | + error: { | ||
274 | + code: 5, | ||
275 | + message: _("Invalid quantity.") | ||
276 | } | 276 | } |
277 | }.to_json | 277 | }.to_json |
278 | return false | 278 | return false |
@@ -284,12 +284,12 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -284,12 +284,12 @@ class ShoppingCartPluginController < OrdersPluginController | ||
284 | products_list = {}; items.each do |id, quantity| | 284 | products_list = {}; items.each do |id, quantity| |
285 | product = Product.find(id) | 285 | product = Product.find(id) |
286 | price = product.price || 0 | 286 | price = product.price || 0 |
287 | - products_list[id] = {:quantity => quantity, :price => price, :name => product.name} | 287 | + products_list[id] = {quantity: quantity, price: price, name: product.name} |
288 | end | 288 | end |
289 | 289 | ||
290 | order = OrdersPlugin::Sale.new | 290 | order = OrdersPlugin::Sale.new |
291 | order.profile = environment.profiles.find(cart[:profile_id]) | 291 | order.profile = environment.profiles.find(cart[:profile_id]) |
292 | - order.supplier_delivery = profile.delivery_methods.find params[:order][:supplier_delivery_id] | 292 | + order.supplier_delivery = profile.delivery_methods.where(id: params[:order][:supplier_delivery_id]).first |
293 | order.session_id = session_id unless user | 293 | order.session_id = session_id unless user |
294 | order.consumer = user | 294 | order.consumer = user |
295 | order.source = 'shopping_cart_plugin' | 295 | order.source = 'shopping_cart_plugin' |
@@ -330,11 +330,11 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -330,11 +330,11 @@ class ShoppingCartPluginController < OrdersPluginController | ||
330 | after_filter :save_cookie | 330 | after_filter :save_cookie |
331 | def save_cookie | 331 | def save_cookie |
332 | if @cart.nil? | 332 | if @cart.nil? |
333 | - cookies.delete(cookie_key, :path => '/plugin/shopping_cart') | 333 | + cookies.delete(cookie_key, path: '/plugin/shopping_cart') |
334 | else | 334 | else |
335 | cookies[cookie_key] = { | 335 | cookies[cookie_key] = { |
336 | - :value => Base64.encode64(@cart.to_yaml), | ||
337 | - :path => "/plugin/shopping_cart" | 336 | + value: Base64.encode64(@cart.to_yaml), |
337 | + path: "/plugin/shopping_cart" | ||
338 | } | 338 | } |
339 | end | 339 | end |
340 | end | 340 | end |
@@ -351,20 +351,20 @@ class ShoppingCartPluginController < OrdersPluginController | @@ -351,20 +351,20 @@ class ShoppingCartPluginController < OrdersPluginController | ||
351 | self.cart[:items].collect do |id, quantity| | 351 | self.cart[:items].collect do |id, quantity| |
352 | product = Product.find_by_id(id) | 352 | product = Product.find_by_id(id) |
353 | if product | 353 | if product |
354 | - { :id => product.id, | ||
355 | - :name => product.name, | ||
356 | - :price => get_price(product, product.profile.environment), | ||
357 | - :description => product.description, | ||
358 | - :picture => product.default_image(:minor), | ||
359 | - :quantity => quantity | 354 | + { id: product.id, |
355 | + name: product.name, | ||
356 | + price: get_price(product, product.profile.environment), | ||
357 | + description: product.description, | ||
358 | + picture: product.default_image(:minor), | ||
359 | + quantity: quantity | ||
360 | } | 360 | } |
361 | else | 361 | else |
362 | - { :id => id, | ||
363 | - :name => _('Undefined product'), | ||
364 | - :price => 0, | ||
365 | - :description => _('Wrong product id'), | ||
366 | - :picture => '', | ||
367 | - :quantity => quantity | 362 | + { id: id, |
363 | + name: _('Undefined product'), | ||
364 | + price: 0, | ||
365 | + description: _('Wrong product id'), | ||
366 | + picture: '', | ||
367 | + quantity: quantity | ||
368 | } | 368 | } |
369 | end | 369 | end |
370 | end | 370 | end |
plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb
@@ -5,13 +5,8 @@ class ShoppingCartPluginMyprofileController < MyProfileController | @@ -5,13 +5,8 @@ class ShoppingCartPluginMyprofileController < MyProfileController | ||
5 | def edit | 5 | def edit |
6 | params[:settings] = treat_cart_options(params[:settings]) | 6 | params[:settings] = treat_cart_options(params[:settings]) |
7 | @settings = profile.shopping_cart_settings params[:settings] || {} | 7 | @settings = profile.shopping_cart_settings params[:settings] || {} |
8 | - respond_to do |format| | ||
9 | - format.js do | ||
10 | - if request.post? | ||
11 | - @success = @settings.save! | ||
12 | - end | ||
13 | - end | ||
14 | - format.html | 8 | + if request.post? |
9 | + @success = @settings.save! | ||
15 | end | 10 | end |
16 | end | 11 | end |
17 | 12 |
plugins/shopping_cart/delivery_admin.feature
@@ -1,81 +0,0 @@ | @@ -1,81 +0,0 @@ | ||
1 | -Feature: delivery administration | ||
2 | - As an enterprise's administrator | ||
3 | - I want to create delivery methods | ||
4 | - In order to allow my customer to choose which delivery they want | ||
5 | - | ||
6 | - Background: | ||
7 | - Given "ShoppingCart" plugin is enabled | ||
8 | - And "Delivery" plugin is enabled | ||
9 | - And the following users | ||
10 | - | login | name | | ||
11 | - | moe | Moe | | ||
12 | - And the following enterprise | ||
13 | - | identifier | name | owner | | ||
14 | - | moes-tavern | Moes Tavern | moe | | ||
15 | - And the shopping basket is enabled on "Moes Tavern" | ||
16 | - And "Moe" is admin of "Moes Tavern" | ||
17 | - And I am logged in as "moe" | ||
18 | - And I go to moes-tavern's control panel | ||
19 | - | ||
20 | - @selenium | ||
21 | - Scenario: enable delivery | ||
22 | - Given I follow "Shopping basket" | ||
23 | - When I check "Enable shopping basket" | ||
24 | - Then I should see "Deliveries or pickups" | ||
25 | - | ||
26 | - @selenium | ||
27 | - Scenario: disable delivery | ||
28 | - Given I follow "Shopping basket" | ||
29 | - When I uncheck "Enable shopping basket" | ||
30 | - Then I should not see "Deliveries or pickups" | ||
31 | - | ||
32 | - @selenium | ||
33 | - Scenario: create new deliver | ||
34 | - Given I follow "Shopping basket" | ||
35 | - And I check "Enable shopping basket" | ||
36 | - And I follow "New delivery or pickup" | ||
37 | - And I select "Deliver" from "Type" | ||
38 | - And I fill in "Name" with "Bike" | ||
39 | - And I fill in "Description" with "Beers delivered with my old bike." | ||
40 | - And I fill in "Fixed cost" with "8.00" | ||
41 | - And I fill in "Order's minimum price for free delivery" with "35.50" | ||
42 | - When I press "Add" | ||
43 | - Then I should see "Bike" within ".delivery-method" | ||
44 | - | ||
45 | - @selenium | ||
46 | - Scenario: create new pickup | ||
47 | - Given I follow "Shopping basket" | ||
48 | - And I check "Enable shopping basket" | ||
49 | - And I follow "New delivery or pickup" | ||
50 | - And I select "Pickup" from "Type" | ||
51 | - And I fill in "Name" with "Bar" | ||
52 | - And I fill in "Description" with "Come to my bar and pick it yourself." | ||
53 | - And I fill in "Fixed cost" with "0.00" | ||
54 | - When I press "Add" | ||
55 | - Then I should see "Bar" | ||
56 | - | ||
57 | - @selenium | ||
58 | - Scenario: remove delivery | ||
59 | - Given I follow "Shopping basket" | ||
60 | - And I check "Enable shopping basket" | ||
61 | - And I follow "New delivery or pickup" | ||
62 | - And I fill in "Name" with "Bike" | ||
63 | - When I press "Add" | ||
64 | - Then I should see "Bike" | ||
65 | - And I follow "Remove" within ".delivery-method" | ||
66 | - When I confirm the browser dialog | ||
67 | - Then I should see "Bike" | ||
68 | - | ||
69 | - @selenium | ||
70 | - Scenario: edit delivery | ||
71 | - Given I follow "Shopping basket" | ||
72 | - And I check "Enable shopping basket" | ||
73 | - And I follow "New delivery or pickup" | ||
74 | - And I fill in "Name" with "Bike" | ||
75 | - When I press "Add" | ||
76 | - Then I should see "Bike" | ||
77 | - And I follow "Edit" within ".delivery-method" | ||
78 | - And I fill in "Name" with "Car" | ||
79 | - When I press "Save" | ||
80 | - Then I should not see "Bike" | ||
81 | - Then I should see "Car" |
plugins/shopping_cart/delivery_client.feature
@@ -1,77 +0,0 @@ | @@ -1,77 +0,0 @@ | ||
1 | -Feature: delivery client | ||
2 | - As an enterprise's client | ||
3 | - I want to choose the delivery method | ||
4 | - In order to receive my procucts properly | ||
5 | - | ||
6 | - Background: | ||
7 | - Given "ShoppingCart" plugin is enabled | ||
8 | - And "Delivery" plugin is enabled | ||
9 | - And the following users | ||
10 | - | login | name | email | | ||
11 | - | moe | Moe | moe@springfield.com | | ||
12 | - | homer | Homer | homer@springfield.com | | ||
13 | - And the following enterprise | ||
14 | - | identifier | name | owner | | ||
15 | - | moes-tavern | Moes Tavern | moe | | ||
16 | - And the shopping basket is enabled on "Moes Tavern" | ||
17 | - And the following product_categories | ||
18 | - | name | | ||
19 | - | Beer | | ||
20 | - | Snacks | | ||
21 | - And the following products | ||
22 | - | owner | category | name | price | | ||
23 | - | moes-tavern | beer | Duff | 3.00 | | ||
24 | - | moes-tavern | snacks | French fries | 7.00 | | ||
25 | - And "moes-tavern" has the following delivery methods | ||
26 | - | delivery_type | name | description | fixed_cost | free_over_price | | ||
27 | - | deliver | Bike | My good old bike. | 8.00 | 10.00 | | ||
28 | - | pickup | Bar | Come to my bar and drink it! | 0.00 | 0.00 | | ||
29 | - And feature "products_for_enterprises" is enabled on environment | ||
30 | - And I am logged in as "homer" | ||
31 | - And I go to moes-tavern's products page | ||
32 | - | ||
33 | - @selenium | ||
34 | - Scenario: choose deliver method for purchase | ||
35 | - Given I follow "Add to basket" | ||
36 | - And I follow "Add to basket" | ||
37 | - And I should see "Show basket" | ||
38 | - And I follow "Show basket" | ||
39 | - And I follow "Shopping checkout" | ||
40 | - And I fill in "Contact phone" with "123456789" | ||
41 | - When I select "Bike ($8.00)" from "Option" | ||
42 | - Then I should see "My good old bike." within ".instructions" | ||
43 | - And I should see "Address" | ||
44 | - And I should see "Bike" within "#delivery-name" | ||
45 | - And I should see "8.00" within "#delivery-price" | ||
46 | - | ||
47 | - @selenium | ||
48 | - Scenario: choose pickup method for purchase | ||
49 | - Given I follow "Add to basket" | ||
50 | - And I follow "Add to basket" | ||
51 | - And I should see "Show basket" | ||
52 | - And I follow "Show basket" | ||
53 | - And I follow "Shopping checkout" | ||
54 | - And I fill in "Contact phone" with "123456789" | ||
55 | - When I select "Bar" from "Option" | ||
56 | - Then I should see "Come to my bar and drink it!" within ".instructions" | ||
57 | - And I should not see "Address" | ||
58 | - And I should see "Bar" within "#delivery-name" | ||
59 | - And I should see "0.00" within "#delivery-price" | ||
60 | - | ||
61 | - @selenium | ||
62 | - Scenario: gets free delivery due to free over price | ||
63 | - Given I follow "Add to basket" | ||
64 | - And I follow "Add to basket" | ||
65 | - And I follow "Add to basket" | ||
66 | - And I follow "Add to basket" | ||
67 | - And I follow "Add to basket" | ||
68 | - And I follow "Add to basket" | ||
69 | - And I should see "Show basket" | ||
70 | - And I follow "Show basket" | ||
71 | - And I follow "Shopping checkout" | ||
72 | - And I fill in "Contact phone" with "123456789" | ||
73 | - When I select "Bike ($8.00)" from "Option" | ||
74 | - Then I should see "My good old bike." within ".instructions" | ||
75 | - And I should see "Address" | ||
76 | - And I should see "Bike" within "#delivery-name" | ||
77 | - And I should see "0.00" within "#delivery-price" |
@@ -0,0 +1,81 @@ | @@ -0,0 +1,81 @@ | ||
1 | +Feature: delivery administration | ||
2 | + As an enterprise's administrator | ||
3 | + I want to create delivery methods | ||
4 | + In order to allow my customer to choose which delivery they want | ||
5 | + | ||
6 | + Background: | ||
7 | + Given "ShoppingCart" plugin is enabled | ||
8 | + And "Delivery" plugin is enabled | ||
9 | + And the following users | ||
10 | + | login | name | | ||
11 | + | moe | Moe | | ||
12 | + And the following enterprise | ||
13 | + | identifier | name | owner | | ||
14 | + | moes-tavern | Moes Tavern | moe | | ||
15 | + And the shopping basket is enabled on "Moes Tavern" | ||
16 | + And "Moe" is admin of "Moes Tavern" | ||
17 | + And I am logged in as "moe" | ||
18 | + And I go to moes-tavern's control panel | ||
19 | + | ||
20 | + @selenium | ||
21 | + Scenario: enable delivery | ||
22 | + Given I follow "Shopping basket" | ||
23 | + When I check "Enable shopping basket" | ||
24 | + Then I should see "Deliveries or pickups" | ||
25 | + | ||
26 | + @selenium | ||
27 | + Scenario: disable delivery | ||
28 | + Given I follow "Shopping basket" | ||
29 | + When I uncheck "Enable shopping basket" | ||
30 | + Then I should not see "Deliveries or pickups" | ||
31 | + | ||
32 | + @selenium | ||
33 | + Scenario: create new deliver | ||
34 | + Given I follow "Shopping basket" | ||
35 | + And I check "Enable shopping basket" | ||
36 | + And I follow "New delivery or pickup" | ||
37 | + And I select "Deliver" from "Type" | ||
38 | + And I fill in "Name" with "Bike" | ||
39 | + And I fill in "Description" with "Beers delivered with my old bike." | ||
40 | + And I fill in "Fixed cost" with "8.00" | ||
41 | + And I fill in "Order's minimum price for free delivery" with "35.50" | ||
42 | + When I press "Add" | ||
43 | + Then I should see "Bike" within ".delivery-method" | ||
44 | + | ||
45 | + @selenium | ||
46 | + Scenario: create new pickup | ||
47 | + Given I follow "Shopping basket" | ||
48 | + And I check "Enable shopping basket" | ||
49 | + And I follow "New delivery or pickup" | ||
50 | + And I select "Pickup" from "Type" | ||
51 | + And I fill in "Name" with "Bar" | ||
52 | + And I fill in "Description" with "Come to my bar and pick it yourself." | ||
53 | + And I fill in "Fixed cost" with "0.00" | ||
54 | + When I press "Add" | ||
55 | + Then I should see "Bar" | ||
56 | + | ||
57 | + @selenium | ||
58 | + Scenario: remove delivery | ||
59 | + Given I follow "Shopping basket" | ||
60 | + And I check "Enable shopping basket" | ||
61 | + And I follow "New delivery or pickup" | ||
62 | + And I fill in "Name" with "Bike" | ||
63 | + When I press "Add" | ||
64 | + Then I should see "Bike" | ||
65 | + And I follow "Remove" within ".delivery-method" | ||
66 | + When I confirm the browser dialog | ||
67 | + Then I should see "Bike" | ||
68 | + | ||
69 | + @selenium | ||
70 | + Scenario: edit delivery | ||
71 | + Given I follow "Shopping basket" | ||
72 | + And I check "Enable shopping basket" | ||
73 | + And I follow "New delivery or pickup" | ||
74 | + And I fill in "Name" with "Bike" | ||
75 | + When I press "Add" | ||
76 | + Then I should see "Bike" | ||
77 | + And I follow "Edit" within ".delivery-method" | ||
78 | + And I fill in "Name" with "Car" | ||
79 | + When I press "Save" | ||
80 | + Then I should not see "Bike" | ||
81 | + Then I should see "Car" |
@@ -0,0 +1,77 @@ | @@ -0,0 +1,77 @@ | ||
1 | +Feature: delivery client | ||
2 | + As an enterprise's client | ||
3 | + I want to choose the delivery method | ||
4 | + In order to receive my procucts properly | ||
5 | + | ||
6 | + Background: | ||
7 | + Given "ShoppingCart" plugin is enabled | ||
8 | + And "Delivery" plugin is enabled | ||
9 | + And the following users | ||
10 | + | login | name | email | | ||
11 | + | moe | Moe | moe@springfield.com | | ||
12 | + | homer | Homer | homer@springfield.com | | ||
13 | + And the following enterprise | ||
14 | + | identifier | name | owner | | ||
15 | + | moes-tavern | Moes Tavern | moe | | ||
16 | + And the shopping basket is enabled on "Moes Tavern" | ||
17 | + And the following product_categories | ||
18 | + | name | | ||
19 | + | Beer | | ||
20 | + | Snacks | | ||
21 | + And the following products | ||
22 | + | owner | category | name | price | | ||
23 | + | moes-tavern | beer | Duff | 3.00 | | ||
24 | + | moes-tavern | snacks | French fries | 7.00 | | ||
25 | + And "moes-tavern" has the following delivery methods | ||
26 | + | delivery_type | name | description | fixed_cost | free_over_price | | ||
27 | + | deliver | Bike | My good old bike. | 8.00 | 10.00 | | ||
28 | + | pickup | Bar | Come to my bar and drink it! | 0.00 | 0.00 | | ||
29 | + And feature "products_for_enterprises" is enabled on environment | ||
30 | + And I am logged in as "homer" | ||
31 | + And I go to moes-tavern's products page | ||
32 | + | ||
33 | + @selenium | ||
34 | + Scenario: choose deliver method for purchase | ||
35 | + Given I follow "Add to basket" | ||
36 | + And I follow "Add to basket" | ||
37 | + And I should see "Show basket" | ||
38 | + And I follow "Show basket" | ||
39 | + And I follow "Shopping checkout" | ||
40 | + And I fill in "Contact phone" with "123456789" | ||
41 | + When I select "Bike ($8.00)" from "Option" | ||
42 | + Then I should see "My good old bike." within ".instructions" | ||
43 | + And I should see "Address" | ||
44 | + And I should see "Bike" within "#delivery-name" | ||
45 | + And I should see "8.00" within "#delivery-price" | ||
46 | + | ||
47 | + @selenium | ||
48 | + Scenario: choose pickup method for purchase | ||
49 | + Given I follow "Add to basket" | ||
50 | + And I follow "Add to basket" | ||
51 | + And I should see "Show basket" | ||
52 | + And I follow "Show basket" | ||
53 | + And I follow "Shopping checkout" | ||
54 | + And I fill in "Contact phone" with "123456789" | ||
55 | + When I select "Bar" from "Option" | ||
56 | + Then I should see "Come to my bar and drink it!" within ".instructions" | ||
57 | + And I should not see "Address" | ||
58 | + And I should see "Bar" within "#delivery-name" | ||
59 | + And I should see "0.00" within "#delivery-price" | ||
60 | + | ||
61 | + @selenium | ||
62 | + Scenario: gets free delivery due to free over price | ||
63 | + Given I follow "Add to basket" | ||
64 | + And I follow "Add to basket" | ||
65 | + And I follow "Add to basket" | ||
66 | + And I follow "Add to basket" | ||
67 | + And I follow "Add to basket" | ||
68 | + And I follow "Add to basket" | ||
69 | + And I should see "Show basket" | ||
70 | + And I follow "Show basket" | ||
71 | + And I follow "Shopping checkout" | ||
72 | + And I fill in "Contact phone" with "123456789" | ||
73 | + When I select "Bike ($8.00)" from "Option" | ||
74 | + Then I should see "My good old bike." within ".instructions" | ||
75 | + And I should see "Address" | ||
76 | + And I should see "Bike" within "#delivery-name" | ||
77 | + And I should see "0.00" within "#delivery-price" |
plugins/shopping_cart/features/step_definitions/orders_steps.rb
1 | -Given /^"([^""]*)" has the following delivery methods$/ do |name, table| | ||
2 | - enterprise = Enterprise.find_by_name(name) || Enterprise[name] | ||
3 | - table.hashes.map{|item| item.dup}.each do |item| | ||
4 | - delivery_method = enterprise.delivery_methods.build | ||
5 | - delivery_method.update_attributes(item) | ||
6 | - end | ||
7 | -end | ||
8 | - | ||
9 | Given /^the following purchase from "([^""]*)" on "([^""]*)" that is "([^""]*)"$/ do |consumer_identifier, enterprise_identifier, status, table| | 1 | Given /^the following purchase from "([^""]*)" on "([^""]*)" that is "([^""]*)"$/ do |consumer_identifier, enterprise_identifier, status, table| |
10 | consumer = Person.find_by_name(consumer_identifier) || Person[consumer_identifier] | 2 | consumer = Person.find_by_name(consumer_identifier) || Person[consumer_identifier] |
11 | enterprise = Enterprise.find_by_name(enterprise_identifier) || Enterprise[enterprise_identifier] | 3 | enterprise = Enterprise.find_by_name(enterprise_identifier) || Enterprise[enterprise_identifier] |
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
@@ -59,7 +59,7 @@ module ShoppingCartPlugin::CartHelper | @@ -59,7 +59,7 @@ module ShoppingCartPlugin::CartHelper | ||
59 | @order | 59 | @order |
60 | end | 60 | end |
61 | 61 | ||
62 | - def items_table(items, profile, delivery_method = nil, by_mail = false) | 62 | + def items_table(items, delivery_method = nil, by_mail = false) |
63 | # partial key needed in mailer context | 63 | # partial key needed in mailer context |
64 | render partial: 'shopping_cart_plugin/items', locals: {order: build_order(items, delivery_method), by_mail: by_mail} | 64 | render partial: 'shopping_cart_plugin/items', locals: {order: build_order(items, delivery_method), by_mail: by_mail} |
65 | end | 65 | end |
plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb
1 | -require File.dirname(__FILE__) + '/../../../../test/test_helper' | ||
2 | -require File.dirname(__FILE__) + '/../../controllers/shopping_cart_plugin_controller' | 1 | +require 'test_helper' |
2 | +require_relative '../../controllers/shopping_cart_plugin_controller' | ||
3 | 3 | ||
4 | # Re-raise errors caught by the controller. | 4 | # Re-raise errors caught by the controller. |
5 | class ShoppingCartPluginController; def rescue_action(e) raise e end; end | 5 | class ShoppingCartPluginController; def rescue_action(e) raise e end; end |
@@ -12,7 +12,7 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -12,7 +12,7 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
12 | @response = ActionController::TestResponse.new | 12 | @response = ActionController::TestResponse.new |
13 | @profile = fast_create(Enterprise) | 13 | @profile = fast_create(Enterprise) |
14 | @profile.contact_email = 'enterprise@noosfero.org';@profile.save | 14 | @profile.contact_email = 'enterprise@noosfero.org';@profile.save |
15 | - @product = fast_create(Product, :profile_id => @profile.id) | 15 | + @product = fast_create(Product, profile_id: @profile.id) |
16 | end | 16 | end |
17 | attr_reader :profile | 17 | attr_reader :profile |
18 | attr_reader :product | 18 | attr_reader :product |
@@ -23,22 +23,22 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -23,22 +23,22 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
23 | end | 23 | end |
24 | 24 | ||
25 | should 'add a new product to cart' do | 25 | should 'add a new product to cart' do |
26 | - get :add, :id => product.id | 26 | + get :add, id: product.id |
27 | 27 | ||
28 | assert product_in_cart?(product) | 28 | assert product_in_cart?(product) |
29 | assert_equal 1, product_quantity(product) | 29 | assert_equal 1, product_quantity(product) |
30 | end | 30 | end |
31 | 31 | ||
32 | should 'grow quantity through add' do | 32 | should 'grow quantity through add' do |
33 | - get :add, :id => product.id | 33 | + get :add, id: product.id |
34 | assert_equal 1, product_quantity(product) | 34 | assert_equal 1, product_quantity(product) |
35 | 35 | ||
36 | - get :add, :id => product.id | 36 | + get :add, id: product.id |
37 | assert_equal 2, product_quantity(product) | 37 | assert_equal 2, product_quantity(product) |
38 | end | 38 | end |
39 | 39 | ||
40 | should 'not add product to cart if it does not exists' do | 40 | should 'not add product to cart if it does not exists' do |
41 | - assert_nothing_raised { get :add, :id => 9999 } | 41 | + assert_nothing_raised { get :add, id: 9999 } |
42 | 42 | ||
43 | refute product_in_cart?(product) | 43 | refute product_in_cart?(product) |
44 | refute response_ok? | 44 | refute response_ok? |
@@ -46,10 +46,10 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -46,10 +46,10 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
46 | end | 46 | end |
47 | 47 | ||
48 | should 'remove cart if the product being removed is the last one' do | 48 | should 'remove cart if the product being removed is the last one' do |
49 | - get :add, :id => product.id | 49 | + get :add, id: product.id |
50 | assert cart? | 50 | assert cart? |
51 | 51 | ||
52 | - get :remove, :id => product.id | 52 | + get :remove, id: product.id |
53 | refute cart? | 53 | refute cart? |
54 | end | 54 | end |
55 | 55 | ||
@@ -57,25 +57,25 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -57,25 +57,25 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
57 | instantiate_cart | 57 | instantiate_cart |
58 | refute cart? | 58 | refute cart? |
59 | 59 | ||
60 | - assert_nothing_raised { get :remove, :id => 9999 } | 60 | + assert_nothing_raised { get :remove, id: 9999 } |
61 | refute response_ok? | 61 | refute response_ok? |
62 | assert_equal 2, reponse_error_code | 62 | assert_equal 2, reponse_error_code |
63 | end | 63 | end |
64 | 64 | ||
65 | should 'just remove product if there are other products on cart' do | 65 | should 'just remove product if there are other products on cart' do |
66 | - another_product = fast_create(Product, :profile_id => profile.id) | ||
67 | - get :add, :id => product.id | ||
68 | - get :add, :id => another_product.id | 66 | + another_product = fast_create(Product, profile_id: profile.id) |
67 | + get :add, id: product.id | ||
68 | + get :add, id: another_product.id | ||
69 | 69 | ||
70 | - get :remove, :id => product.id | 70 | + get :remove, id: product.id |
71 | assert cart? | 71 | assert cart? |
72 | refute product_in_cart?(product) | 72 | refute product_in_cart?(product) |
73 | end | 73 | end |
74 | 74 | ||
75 | should 'not try to remove a product that is not in the cart' do | 75 | should 'not try to remove a product that is not in the cart' do |
76 | - get :add, :id => product.id | 76 | + get :add, id: product.id |
77 | assert cart? | 77 | assert cart? |
78 | - assert_nothing_raised { get :remove, :id => 9999 } | 78 | + assert_nothing_raised { get :remove, id: 9999 } |
79 | 79 | ||
80 | refute response_ok? | 80 | refute response_ok? |
81 | assert_equal 4, reponse_error_code | 81 | assert_equal 4, reponse_error_code |
@@ -91,17 +91,17 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -91,17 +91,17 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
91 | end | 91 | end |
92 | 92 | ||
93 | should 'list products without errors' do | 93 | should 'list products without errors' do |
94 | - get :add, :id => product.id | 94 | + get :add, id: product.id |
95 | 95 | ||
96 | assert_nothing_raised { get :list } | 96 | assert_nothing_raised { get :list } |
97 | assert response_ok? | 97 | assert response_ok? |
98 | end | 98 | end |
99 | 99 | ||
100 | should 'update the quantity of a product' do | 100 | should 'update the quantity of a product' do |
101 | - get :add, :id => product.id | 101 | + get :add, id: product.id |
102 | assert_equal 1, product_quantity(product) | 102 | assert_equal 1, product_quantity(product) |
103 | 103 | ||
104 | - get :update_quantity, :id => product.id, :quantity => 3 | 104 | + get :update_quantity, id: product.id, quantity: 3 |
105 | assert_equal 3, product_quantity(product) | 105 | assert_equal 3, product_quantity(product) |
106 | end | 106 | end |
107 | 107 | ||
@@ -109,36 +109,36 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -109,36 +109,36 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
109 | instantiate_cart | 109 | instantiate_cart |
110 | refute cart? | 110 | refute cart? |
111 | 111 | ||
112 | - assert_nothing_raised { get :update_quantity, :id => 9999, :quantity => 3 } | 112 | + assert_nothing_raised { get :update_quantity, id: 9999, quantity: 3 } |
113 | refute response_ok? | 113 | refute response_ok? |
114 | assert_equal 2, reponse_error_code | 114 | assert_equal 2, reponse_error_code |
115 | end | 115 | end |
116 | 116 | ||
117 | should 'not try to update the quantity of a product that is not in the cart' do | 117 | should 'not try to update the quantity of a product that is not in the cart' do |
118 | - get :add, :id => product.id | 118 | + get :add, id: product.id |
119 | assert cart? | 119 | assert cart? |
120 | - assert_nothing_raised { get :update_quantity, :id => 9999, :quantity => 3 } | 120 | + assert_nothing_raised { get :update_quantity, id: 9999, quantity: 3 } |
121 | 121 | ||
122 | refute response_ok? | 122 | refute response_ok? |
123 | assert_equal 4, reponse_error_code | 123 | assert_equal 4, reponse_error_code |
124 | end | 124 | end |
125 | 125 | ||
126 | should 'not update the quantity of a product with a invalid value' do | 126 | should 'not update the quantity of a product with a invalid value' do |
127 | - get :add, :id => product.id | 127 | + get :add, id: product.id |
128 | 128 | ||
129 | - assert_nothing_raised { get :update_quantity, :id => product.id, :quantity => -1} | 129 | + assert_nothing_raised { get :update_quantity, id: product.id, quantity: -1} |
130 | refute response_ok? | 130 | refute response_ok? |
131 | assert_equal 5, reponse_error_code | 131 | assert_equal 5, reponse_error_code |
132 | 132 | ||
133 | - assert_nothing_raised { get :update_quantity, :id => product.id, :quantity => 'asdf'} | 133 | + assert_nothing_raised { get :update_quantity, id: product.id, quantity: 'asdf'} |
134 | refute response_ok? | 134 | refute response_ok? |
135 | assert_equal 5, reponse_error_code | 135 | assert_equal 5, reponse_error_code |
136 | end | 136 | end |
137 | 137 | ||
138 | should 'clean the cart' do | 138 | should 'clean the cart' do |
139 | - another_product = fast_create(Product, :profile_id => profile.id) | ||
140 | - get :add, :id => product.id | ||
141 | - get :add, :id => another_product.id | 139 | + another_product = fast_create(Product, profile_id: profile.id) |
140 | + get :add, id: product.id | ||
141 | + get :add, id: another_product.id | ||
142 | 142 | ||
143 | assert_nothing_raised { get :clean } | 143 | assert_nothing_raised { get :clean } |
144 | refute cart? | 144 | refute cart? |
@@ -151,12 +151,11 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -151,12 +151,11 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
151 | end | 151 | end |
152 | 152 | ||
153 | should 'register order on send request' do | 153 | should 'register order on send request' do |
154 | - product1 = fast_create(Product, :profile_id => profile.id, :price => 1.99) | ||
155 | - product2 = fast_create(Product, :profile_id => profile.id, :price => 2.23) | ||
156 | - @controller.stubs(:cart).returns({ :profile_id => profile.id, :items => {product1.id => 1, product2.id => 2}}) | 154 | + product1 = fast_create(Product, profile_id: profile.id, price: 1.99) |
155 | + product2 = fast_create(Product, profile_id: profile.id, price: 2.23) | ||
156 | + @controller.stubs(:cart).returns({ profile_id: profile.id, items: {product1.id => 1, product2.id => 2}}) | ||
157 | assert_difference 'OrdersPlugin::Order.count', 1 do | 157 | assert_difference 'OrdersPlugin::Order.count', 1 do |
158 | - post :send_request, | ||
159 | - :customer => {:name => "Manuel", :email => "manuel@ceu.com"} | 158 | + xhr :post, :send_request, order: {consumer_data: {name: "Manuel", email: "manuel@ceu.com"}} |
160 | end | 159 | end |
161 | 160 | ||
162 | order = OrdersPlugin::Order.last | 161 | order = OrdersPlugin::Order.last |
@@ -165,15 +164,14 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -165,15 +164,14 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
165 | assert_equal 1, order.products_list[product1.id][:quantity] | 164 | assert_equal 1, order.products_list[product1.id][:quantity] |
166 | assert_equal 2.23, order.products_list[product2.id][:price] | 165 | assert_equal 2.23, order.products_list[product2.id][:price] |
167 | assert_equal 2, order.products_list[product2.id][:quantity] | 166 | assert_equal 2, order.products_list[product2.id][:quantity] |
168 | - assert_equal 'confirmed', order.status | 167 | + assert_equal 'ordered', order.status |
169 | end | 168 | end |
170 | 169 | ||
171 | should 'register order on send request and not crash if product is not defined' do | 170 | should 'register order on send request and not crash if product is not defined' do |
172 | - product1 = fast_create(Product, :profile_id => profile.id) | ||
173 | - @controller.stubs(:cart).returns({ :profile_id => profile.id, :items => {product1.id => 1}}) | 171 | + product1 = fast_create(Product, profile_id: profile.id) |
172 | + @controller.stubs(:cart).returns({ profile_id: profile.id, items: {product1.id => 1}}) | ||
174 | assert_difference 'OrdersPlugin::Order.count', 1 do | 173 | assert_difference 'OrdersPlugin::Order.count', 1 do |
175 | - post :send_request, | ||
176 | - :customer => {:name => "Manuel", :email => "manuel@ceu.com"} | 174 | + xhr :post, :send_request, order: {consumer_data: {name: "Manuel", email: "manuel@ceu.com"}} |
177 | end | 175 | end |
178 | 176 | ||
179 | order = OrdersPlugin::Order.last | 177 | order = OrdersPlugin::Order.last |
@@ -182,16 +180,15 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -182,16 +180,15 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
182 | end | 180 | end |
183 | 181 | ||
184 | should 'clean the cart after placing the order' do | 182 | should 'clean the cart after placing the order' do |
185 | - product1 = fast_create(Product, :profile_id => profile.id) | ||
186 | - post :add, :id => product1.id | ||
187 | - post :send_request, :customer => { :name => "Manuel", :email => "manuel@ceu.com" } | 183 | + product1 = fast_create(Product, profile_id: profile.id) |
184 | + post :add, id: product1.id | ||
185 | + xhr :post, :send_request, order: {consumer_data: {name: "Manuel", email: "manuel@ceu.com"}} | ||
188 | refute cart?, "cart expected to be empty!" | 186 | refute cart?, "cart expected to be empty!" |
189 | end | 187 | end |
190 | 188 | ||
191 | should 'not allow buy without any cart' do | 189 | should 'not allow buy without any cart' do |
192 | get :buy | 190 | get :buy |
193 | - refute json_response[:ok] | ||
194 | - assert_equal 2, json_response['error']['code'] | 191 | + assert_response :redirect |
195 | end | 192 | end |
196 | 193 | ||
197 | private | 194 | private |
@@ -225,8 +222,8 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -225,8 +222,8 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
225 | # temporary hack...if I don't do this the session stays as an Array instead | 222 | # temporary hack...if I don't do this the session stays as an Array instead |
226 | # of a TestSession | 223 | # of a TestSession |
227 | def instantiate_cart | 224 | def instantiate_cart |
228 | - get :add, :id => product.id | ||
229 | - get :remove, :id => product.id | 225 | + get :add, id: product.id |
226 | + get :remove, id: product.id | ||
230 | end | 227 | end |
231 | 228 | ||
232 | end | 229 | end |
plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb
1 | -require File.dirname(__FILE__) + '/../../../../test/test_helper' | 1 | +require 'test_helper' |
2 | 2 | ||
3 | class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | 3 | class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase |
4 | 4 | ||
5 | - TIME_FORMAT = '%Y-%m-%d' | ||
6 | - | ||
7 | def setup | 5 | def setup |
8 | @profile = fast_create(Enterprise) | 6 | @profile = fast_create(Enterprise) |
9 | @admin = create_user('admin').person | 7 | @admin = create_user('admin').person |
@@ -13,115 +11,23 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | @@ -13,115 +11,23 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
13 | attr_reader :profile | 11 | attr_reader :profile |
14 | 12 | ||
15 | should 'be able to enable shopping cart' do | 13 | should 'be able to enable shopping cart' do |
16 | - settings.enabled = false | ||
17 | - settings.save! | ||
18 | - post :edit, :profile => profile.identifier, :settings => {:enabled => '1'} | ||
19 | - | ||
20 | - assert settings.enabled | ||
21 | - end | ||
22 | - | ||
23 | - should 'be able to disable shopping cart' do | ||
24 | - settings.enabled = true | ||
25 | - settings.save! | ||
26 | - post :edit, :profile => profile.identifier, :settings => {:enabled => '0'} | ||
27 | - | ||
28 | - refute settings.enabled | ||
29 | - end | 14 | + profile.shopping_cart_settings.enabled = false |
15 | + profile.shopping_cart_settings.save! | ||
30 | 16 | ||
31 | - should 'be able to enable shopping cart delivery' do | ||
32 | - settings.delivery = false | ||
33 | - settings.save! | ||
34 | - post :edit, :profile => profile.identifier, :settings => {:delivery => '1'} | 17 | + post :edit, profile: profile.identifier, settings: {enabled: '1'} |
18 | + profile.reload | ||
35 | 19 | ||
36 | - assert settings.delivery | 20 | + assert profile.shopping_cart_settings.enabled |
37 | end | 21 | end |
38 | 22 | ||
39 | - should 'be able to disable shopping cart delivery' do | ||
40 | - settings.delivery = true | ||
41 | - settings.save! | ||
42 | - post :edit, :profile => profile.identifier, :settings => {:delivery => '0'} | ||
43 | - | ||
44 | - refute settings.delivery | ||
45 | - end | ||
46 | - | ||
47 | - should 'be able to choose the delivery price' do | ||
48 | - price = 4.35 | ||
49 | - post :edit, :profile => profile.identifier, :settings => {:delivery_price => price} | ||
50 | - | ||
51 | - assert settings.delivery_price == price.to_s | ||
52 | - end | ||
53 | - | ||
54 | - # FIXME | ||
55 | - should 'be able to choose delivery_options' do | ||
56 | - delivery_options = {:options => ['car', 'bike'], :prices => ['20', '5']} | ||
57 | - post :edit, :profile => profile.identifier, :settings => {:delivery_options => delivery_options} | ||
58 | - | ||
59 | - assert_equal '20', settings.delivery_options['car'] | ||
60 | - assert_equal '5', settings.delivery_options['bike'] | ||
61 | - end | ||
62 | - | ||
63 | - should 'filter the reports correctly' do | ||
64 | - another_profile = fast_create(Enterprise) | ||
65 | - po1 = OrdersPlugin::Sale.create! :profile => profile, :status => 'confirmed' | ||
66 | - po2 = OrdersPlugin::Sale.create! :profile => profile, :status => 'shipped' | ||
67 | - po3 = OrdersPlugin::Sale.create! :profile => profile, :status => 'confirmed' | ||
68 | - po3.created_at = 1.year.ago | ||
69 | - po3.save! | ||
70 | - po4 = OrdersPlugin::Sale.create! :profile => another_profile, :status => 'confirmed' | ||
71 | - | ||
72 | - post :reports, | ||
73 | - :profile => profile.identifier, | ||
74 | - :from => (Time.now - 1.day).strftime(TIME_FORMAT), | ||
75 | - :to => (Time.now + 1.day).strftime(TIME_FORMAT), | ||
76 | - :filter_status => 'confirmed' | ||
77 | - | ||
78 | - assert_includes assigns(:orders), po1 | ||
79 | - assert_not_includes assigns(:orders), po2 | ||
80 | - assert_not_includes assigns(:orders), po3 | ||
81 | - assert_not_includes assigns(:orders), po4 | ||
82 | - end | ||
83 | - | ||
84 | - should 'group filtered orders products and quantities' do | ||
85 | - p1 = fast_create(Product, :profile_id => profile.id, :price => 1, :name => 'p1') | ||
86 | - p2 = fast_create(Product, :profile_id => profile.id, :price => 2, :name => 'p2') | ||
87 | - p3 = fast_create(Product, :profile_id => profile.id, :price => 3) | ||
88 | - po1_products = {p1.id => {:quantity => 1, :price => p1.price, :name => p1.name}, p2.id => {:quantity => 2, :price => p2.price, :name => p2.name }} | ||
89 | - po2_products = {p2.id => {:quantity => 1, :price => p2.price, :name => p2.name }, p3.id => {:quantity => 2, :price => p3.price, :name => p3.name}} | ||
90 | - po1 = OrdersPlugin::Sale.create! :profile => profile, :products_list => po1_products, :status => 'confirmed' | ||
91 | - po2 = OrdersPlugin::Sale.create! :profile => profile, :products_list => po2_products, :status => 'confirmed' | ||
92 | - | ||
93 | - post :reports, | ||
94 | - :profile => profile.identifier, | ||
95 | - :from => (Time.now - 1.day).strftime(TIME_FORMAT), | ||
96 | - :to => (Time.now + 1.day).strftime(TIME_FORMAT), | ||
97 | - :filter_status => 'confirmed' | ||
98 | - | ||
99 | - lineitem1 = ShoppingCartPlugin::LineItem.new(p1.id, p1.name) | ||
100 | - lineitem1.quantity = 1 | ||
101 | - lineitem2 = ShoppingCartPlugin::LineItem.new(p2.id, p2.name) | ||
102 | - lineitem2.quantity = 3 | ||
103 | - lineitem3 = ShoppingCartPlugin::LineItem.new(p3.id, p3.name) | ||
104 | - lineitem3.quantity = 2 | ||
105 | - hash = {p1.id => lineitem1, p2.id => lineitem2, p3.id => lineitem3} | ||
106 | - | ||
107 | - assert_equal hash, assigns(:products) | ||
108 | - end | 23 | + should 'be able to disable shopping cart' do |
24 | + profile.shopping_cart_settings.enabled = true | ||
25 | + profile.shopping_cart_settings.save! | ||
109 | 26 | ||
110 | - should 'be able to update the order status' do | ||
111 | - po = OrdersPlugin::Sale.create!(:profile => profile, :status => 'confirmed') | 27 | + post :edit, profile: profile.identifier, settings: {enabled: '0'} |
28 | + profile.reload | ||
112 | 29 | ||
113 | - post :update_order_status, | ||
114 | - :profile => profile.identifier, | ||
115 | - :order_id => po.id, | ||
116 | - :order_status => 'confirmed' | ||
117 | - po.reload | ||
118 | - assert_equal 'confirmed', po.status | 30 | + refute profile.shopping_cart_settings.enabled |
119 | end | 31 | end |
120 | 32 | ||
121 | - private | ||
122 | - | ||
123 | - def settings | ||
124 | - @profile.reload | ||
125 | - profile.shopping_cart_settings | ||
126 | - end | ||
127 | end | 33 | end |
plugins/shopping_cart/test/unit/shopping_cart_plugin/cart_helper_test.rb
1 | -require File.dirname(__FILE__) + '/../../../../../test/test_helper' | 1 | +require 'test_helper' |
2 | 2 | ||
3 | class ShoppingCartPlugin::CartHelperTest < ActiveSupport::TestCase | 3 | class ShoppingCartPlugin::CartHelperTest < ActiveSupport::TestCase |
4 | 4 | ||
@@ -41,19 +41,4 @@ class ShoppingCartPlugin::CartHelperTest < ActiveSupport::TestCase | @@ -41,19 +41,4 @@ class ShoppingCartPlugin::CartHelperTest < ActiveSupport::TestCase | ||
41 | assert_equal "#{environment.currency_unit}13#{environment.currency_separator}70", float_to_currency_cart(value,environment) | 41 | assert_equal "#{environment.currency_unit}13#{environment.currency_separator}70", float_to_currency_cart(value,environment) |
42 | end | 42 | end |
43 | 43 | ||
44 | - should 'return a table of items' do | ||
45 | - enterprise = Enterprise.new(name: "Test Enterprise", identifier: "test-enterprise") | ||
46 | - enterprise.environment = Environment.default | ||
47 | - enterprise.save! | ||
48 | - | ||
49 | - product_category = fast_create(ProductCategory, :name => 'Products') | ||
50 | - product = fast_create(Product, :name => 'test product1', :product_category_id => product_category.id, :profile_id => enterprise.id) | ||
51 | - setting = Noosfero::Plugin::Settings.new(enterprise, ShoppingCartPlugin) | ||
52 | - setting.delivery = true | ||
53 | - setting.save! | ||
54 | - | ||
55 | - assert_match 'table id="cart-items-table"', items_table([product], enterprise) | ||
56 | - assert_match '<td>test product1</td>', items_table([product], enterprise) | ||
57 | - end | ||
58 | - | ||
59 | end | 44 | end |
plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb
@@ -39,7 +39,7 @@ | @@ -39,7 +39,7 @@ | ||
39 | <fieldset> | 39 | <fieldset> |
40 | <legend><%=s_('Your Order')%></legend> | 40 | <legend><%=s_('Your Order')%></legend> |
41 | <% supplier_delivery = @order.supplier_delivery || profile.delivery_methods.first %> | 41 | <% supplier_delivery = @order.supplier_delivery || profile.delivery_methods.first %> |
42 | - <%= items_table @cart[:items], @profile, supplier_delivery %> | 42 | + <%= items_table @cart[:items], supplier_delivery %> |
43 | </fieldset> | 43 | </fieldset> |
44 | </div> | 44 | </div> |
45 | 45 |
plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb
@@ -18,9 +18,11 @@ | @@ -18,9 +18,11 @@ | ||
18 | <li><b><%= c_('Email') %>: </b><%= @order.consumer_data[:email] %></li> | 18 | <li><b><%= c_('Email') %>: </b><%= @order.consumer_data[:email] %></li> |
19 | <li><b><%= _('Phone number') %>: </b><%= @order.consumer_data[:contact_phone] %></li> | 19 | <li><b><%= _('Phone number') %>: </b><%= @order.consumer_data[:contact_phone] %></li> |
20 | 20 | ||
21 | - <li><b><%= _("Payment's method") %>: </b><%= _ OrdersPlugin::Order::PaymentMethods[@order.payment_data[:method].to_sym].call %></li> | ||
22 | - <% if @order.payment_data[:method] == 'money' %> | ||
23 | - <li><b><%= s_('shopping_cart|Change') %>: </b><%= @order.payment_data[:change] %></li> | 21 | + <% if @order.payment_data[:method] %> |
22 | + <li><b><%= _("Payment's method") %>: </b><%= _ OrdersPlugin::Order::PaymentMethods[@order.payment_data[:method].to_sym].call %></li> | ||
23 | + <% if @order.payment_data[:method] == 'money' %> | ||
24 | + <li><b><%= s_('shopping_cart|Change') %>: </b><%= @order.payment_data[:change] %></li> | ||
25 | + <% end %> | ||
24 | <% end %> | 26 | <% end %> |
25 | 27 | ||
26 | <li><b><%= _('Delivery or pickup') %>:</b></li> | 28 | <li><b><%= _('Delivery or pickup') %>:</b></li> |
@@ -59,7 +61,7 @@ | @@ -59,7 +61,7 @@ | ||
59 | </ul> | 61 | </ul> |
60 | 62 | ||
61 | <p><%=_('Here are the products you bought:')%></p> | 63 | <p><%=_('Here are the products you bought:')%></p> |
62 | - <%= items_table(@items, @order.profile, @order.supplier_delivery, true) %> | 64 | + <%= items_table(@items, @order.supplier_delivery, true) %> |
63 | <p> | 65 | <p> |
64 | --<br/> | 66 | --<br/> |
65 | <%=_('Thanks for buying with us!')%><br/> | 67 | <%=_('Thanks for buying with us!')%><br/> |
plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb
@@ -16,9 +16,11 @@ | @@ -16,9 +16,11 @@ | ||
16 | <li><b><%= c_('Email') %>: </b><%= @order.consumer_data[:email] %></li> | 16 | <li><b><%= c_('Email') %>: </b><%= @order.consumer_data[:email] %></li> |
17 | <li><b><%= _('Phone number') %>: </b><%= @order.consumer_data[:contact_phone] %></li> | 17 | <li><b><%= _('Phone number') %>: </b><%= @order.consumer_data[:contact_phone] %></li> |
18 | 18 | ||
19 | - <li><b><%= _('Payment') %>: </b><%= OrdersPlugin::Order::PaymentMethods[@order.payment_data[:method].to_sym].call %></li> | ||
20 | - <% if @order.payment_data[:method] == 'money' %> | ||
21 | - <li><b><%= s_('shopping_cart|Change') %>: </b><%= @order.payment_data[:change] %></li> | 19 | + <% if @order.payment_data[:method] %> |
20 | + <li><b><%= _('Payment') %>: </b><%= OrdersPlugin::Order::PaymentMethods[@order.payment_data[:method].to_sym].call %></li> | ||
21 | + <% if @order.payment_data[:method] == 'money' %> | ||
22 | + <li><b><%= s_('shopping_cart|Change') %>: </b><%= @order.payment_data[:change] %></li> | ||
23 | + <% end %> | ||
22 | <% end %> | 24 | <% end %> |
23 | 25 | ||
24 | <% if !@order.consumer_delivery_data[:address].blank? || !@order.consumer_delivery_data[:city].blank? || !@order.consumer_delivery_data[:zip_code].blank? || !@order.consumer_delivery_data[:district].blank? || !@order.consumer_delivery_data[:address_reference].blank? %> | 26 | <% if !@order.consumer_delivery_data[:address].blank? || !@order.consumer_delivery_data[:city].blank? || !@order.consumer_delivery_data[:zip_code].blank? || !@order.consumer_delivery_data[:district].blank? || !@order.consumer_delivery_data[:address_reference].blank? %> |
@@ -51,7 +53,7 @@ | @@ -51,7 +53,7 @@ | ||
51 | </ul> | 53 | </ul> |
52 | 54 | ||
53 | <p><%=_('And here are the items bought by this customer:')%></p> | 55 | <p><%=_('And here are the items bought by this customer:')%></p> |
54 | - <%= items_table(@items, @order.profile, @order.supplier_delivery, true) %> | 56 | + <%= items_table(@items, @order.supplier_delivery, true) %> |
55 | <p> | 57 | <p> |
56 | --<br/> | 58 | --<br/> |
57 | <%=_('If there are any problems with this email contact the admin of %s.') % @environment.name %> | 59 | <%=_('If there are any problems with this email contact the admin of %s.') % @environment.name %> |
test/fixtures/environments.yml
@@ -3,6 +3,7 @@ colivre_net: | @@ -3,6 +3,7 @@ colivre_net: | ||
3 | id: 1 | 3 | id: 1 |
4 | name: 'Colivre.net' | 4 | name: 'Colivre.net' |
5 | contact_email: 'colivre@localhost.localdomain' | 5 | contact_email: 'colivre@localhost.localdomain' |
6 | + noreply_email: 'noreply@localhost.localdomain' | ||
6 | is_default: true | 7 | is_default: true |
7 | theme: 'noosfero' | 8 | theme: 'noosfero' |
8 | anhetegua_net: | 9 | anhetegua_net: |
@@ -10,3 +11,4 @@ anhetegua_net: | @@ -10,3 +11,4 @@ anhetegua_net: | ||
10 | name: 'Anheteguá' | 11 | name: 'Anheteguá' |
11 | is_default: false | 12 | is_default: false |
12 | contact_email: 'anhetegua@localhost.localdomain' | 13 | contact_email: 'anhetegua@localhost.localdomain' |
14 | + noreply_email: 'noreply@localhost.localdomain' |