Commit 61dfd21faf76766294bc167ffeb5ef06f191c2b5
1 parent
a341e67e
Exists in
master
and in
29 other branches
Moving controller out of the profile scope
Showing
4 changed files
with
502 additions
and
501 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb
0 → 100644
| ... | ... | @@ -0,0 +1,289 @@ |
| 1 | +require 'base64' | |
| 2 | + | |
| 3 | +class ShoppingCartPluginController < ProfileController | |
| 4 | + | |
| 5 | + include ShoppingCartPlugin::CartHelper | |
| 6 | + | |
| 7 | + append_view_path File.join(File.dirname(__FILE__) + '/../views') | |
| 8 | + before_filter :login_required, :only => [] | |
| 9 | + | |
| 10 | + before_filter :login_required, :only => [] | |
| 11 | + | |
| 12 | + def get | |
| 13 | + has_products = !cart.nil? && (cart[:items].keys.size > 0) || false | |
| 14 | + config = { 'enterprise' => profile.identifier, 'hasProducts' => has_products } | |
| 15 | + render :text => config.to_json | |
| 16 | + end | |
| 17 | + | |
| 18 | + def add | |
| 19 | + self.cart = { :enterprise_id => profile.id, :items => {} } if self.cart.nil? | |
| 20 | + if validate_same_enterprise && product = validate_enterprise_has_product(params[:id]) | |
| 21 | + self.cart[:items][product.id] = 0 if self.cart[:items][product.id].nil? | |
| 22 | + self.cart[:items][product.id] += 1 | |
| 23 | + render :text => { | |
| 24 | + :ok => true, | |
| 25 | + :error => {:code => 0}, | |
| 26 | + :products => [{ | |
| 27 | + :id => product.id, | |
| 28 | + :name => product.name, | |
| 29 | + :price => get_price(product, profile.environment), | |
| 30 | + :description => product.description, | |
| 31 | + :picture => product.default_image(:minor), | |
| 32 | + :quantity => self.cart[:items][product.id] | |
| 33 | + }] | |
| 34 | + }.to_json | |
| 35 | + end | |
| 36 | + end | |
| 37 | + | |
| 38 | + def remove | |
| 39 | + id = params[:id].to_i | |
| 40 | + if validate_cart_presence && validate_cart_has_product(id) | |
| 41 | + self.cart[:items].delete(id) | |
| 42 | + self.cart = nil if self.cart[:items].empty? | |
| 43 | + render :text => { | |
| 44 | + :ok => true, | |
| 45 | + :error => {:code => 0}, | |
| 46 | + :product_id => id | |
| 47 | + }.to_json | |
| 48 | + end | |
| 49 | + end | |
| 50 | + | |
| 51 | + def list | |
| 52 | + if validate_cart_presence | |
| 53 | + products = self.cart[:items].collect do |id, quantity| | |
| 54 | + product = Product.find(id) | |
| 55 | + { :id => product.id, | |
| 56 | + :name => product.name, | |
| 57 | + :price => get_price(product, profile.environment), | |
| 58 | + :description => product.description, | |
| 59 | + :picture => product.default_image(:minor), | |
| 60 | + :quantity => quantity | |
| 61 | + } | |
| 62 | + end | |
| 63 | + render :text => { | |
| 64 | + :ok => true, | |
| 65 | + :error => {:code => 0}, | |
| 66 | + :enterprise => Enterprise.find(self.cart[:enterprise_id]).identifier, | |
| 67 | + :products => products | |
| 68 | + }.to_json | |
| 69 | + end | |
| 70 | + end | |
| 71 | + | |
| 72 | + def update_quantity | |
| 73 | + quantity = params[:quantity].to_i | |
| 74 | + id = params[:id].to_i | |
| 75 | + if validate_cart_presence && validate_cart_has_product(id) && validate_item_quantity(quantity) | |
| 76 | + product = Product.find(id) | |
| 77 | + self.cart[:items][product.id] = quantity | |
| 78 | + render :text => { | |
| 79 | + :ok => true, | |
| 80 | + :error => {:code => 0}, | |
| 81 | + :product_id => id, | |
| 82 | + :quantity => quantity | |
| 83 | + }.to_json | |
| 84 | + end | |
| 85 | + end | |
| 86 | + | |
| 87 | + def clean | |
| 88 | + self.cart = nil | |
| 89 | + render :text => { | |
| 90 | + :ok => true, | |
| 91 | + :error => {:code => 0} | |
| 92 | + }.to_json | |
| 93 | + end | |
| 94 | + | |
| 95 | + def buy | |
| 96 | + @environment = profile.environment | |
| 97 | + @cart = cart | |
| 98 | + render :layout => false | |
| 99 | + end | |
| 100 | + | |
| 101 | + def send_request | |
| 102 | + register_order(params[:customer], self.cart[:items]) | |
| 103 | + begin | |
| 104 | + ShoppingCartPlugin::Mailer.deliver_customer_notification(params[:customer], profile, self.cart[:items]) | |
| 105 | + ShoppingCartPlugin::Mailer.deliver_supplier_notification(params[:customer], profile, self.cart[:items]) | |
| 106 | + render :text => { | |
| 107 | + :ok => true, | |
| 108 | + :message => _('Request sent successfully. Check your email.'), | |
| 109 | + :error => {:code => 0} | |
| 110 | + }.to_json | |
| 111 | + rescue Exception => exception | |
| 112 | + render :text => { | |
| 113 | + :ok => false, | |
| 114 | + :error => { | |
| 115 | + :code => 6, | |
| 116 | + :message => exception.message | |
| 117 | + } | |
| 118 | + }.to_json | |
| 119 | + end | |
| 120 | + end | |
| 121 | + | |
| 122 | + def visibility | |
| 123 | + render :text => self.cart.has_key?(:visibility) ? self.cart[:visibility].to_json : true.to_json | |
| 124 | + end | |
| 125 | + | |
| 126 | + def show | |
| 127 | + begin | |
| 128 | + self.cart[:visibility] = true | |
| 129 | + render :text => { | |
| 130 | + :ok => true, | |
| 131 | + :message => _('Basket displayed.'), | |
| 132 | + :error => {:code => 0} | |
| 133 | + }.to_json | |
| 134 | + rescue Exception => exception | |
| 135 | + render :text => { | |
| 136 | + :ok => false, | |
| 137 | + :error => { | |
| 138 | + :code => 7, | |
| 139 | + :message => exception.message | |
| 140 | + } | |
| 141 | + }.to_json | |
| 142 | + end | |
| 143 | + end | |
| 144 | + | |
| 145 | + def hide | |
| 146 | + begin | |
| 147 | + self.cart[:visibility] = false | |
| 148 | + render :text => { | |
| 149 | + :ok => true, | |
| 150 | + :message => _('Basket hidden.'), | |
| 151 | + :error => {:code => 0} | |
| 152 | + }.to_json | |
| 153 | + rescue Exception => exception | |
| 154 | + render :text => { | |
| 155 | + :ok => false, | |
| 156 | + :error => { | |
| 157 | + :code => 8, | |
| 158 | + :message => exception.message | |
| 159 | + } | |
| 160 | + }.to_json | |
| 161 | + end | |
| 162 | + end | |
| 163 | + | |
| 164 | + private | |
| 165 | + | |
| 166 | + def validate_same_enterprise | |
| 167 | + if profile.id != self.cart[:enterprise_id] | |
| 168 | + render :text => { | |
| 169 | + :ok => false, | |
| 170 | + :error => { | |
| 171 | + :code => 1, | |
| 172 | + :message => _("Can't join items from different enterprises.") | |
| 173 | + } | |
| 174 | + }.to_json | |
| 175 | + return false | |
| 176 | + end | |
| 177 | + true | |
| 178 | + end | |
| 179 | + | |
| 180 | + def validate_cart_presence | |
| 181 | + if self.cart.nil? | |
| 182 | + render :text => { | |
| 183 | + :ok => false, | |
| 184 | + :error => { | |
| 185 | + :code => 2, | |
| 186 | + :message => _("There is no basket.") | |
| 187 | + } | |
| 188 | + }.to_json | |
| 189 | + return false | |
| 190 | + end | |
| 191 | + true | |
| 192 | + end | |
| 193 | + | |
| 194 | + def validate_enterprise_has_product(id) | |
| 195 | + begin | |
| 196 | + product = profile.products.find(id) | |
| 197 | + rescue | |
| 198 | + render :text => { | |
| 199 | + :ok => false, | |
| 200 | + :error => { | |
| 201 | + :code => 3, | |
| 202 | + :message => _("This enterprise doesn't have this product.") | |
| 203 | + } | |
| 204 | + }.to_json | |
| 205 | + return nil | |
| 206 | + end | |
| 207 | + product | |
| 208 | + end | |
| 209 | + | |
| 210 | + def validate_cart_has_product(id) | |
| 211 | + if !self.cart[:items].has_key?(id) | |
| 212 | + render :text => { | |
| 213 | + :ok => false, | |
| 214 | + :error => { | |
| 215 | + :code => 4, | |
| 216 | + :message => _("The basket doesn't have this product.") | |
| 217 | + } | |
| 218 | + }.to_json | |
| 219 | + return false | |
| 220 | + end | |
| 221 | + true | |
| 222 | + end | |
| 223 | + | |
| 224 | + def validate_item_quantity(quantity) | |
| 225 | + if quantity.to_i < 1 | |
| 226 | + render :text => { | |
| 227 | + :ok => false, | |
| 228 | + :error => { | |
| 229 | + :code => 5, | |
| 230 | + :message => _("Invalid quantity.") | |
| 231 | + } | |
| 232 | + }.to_json | |
| 233 | + return false | |
| 234 | + end | |
| 235 | + true | |
| 236 | + end | |
| 237 | + | |
| 238 | + def register_order(custumer, items) | |
| 239 | + new_items = {} | |
| 240 | + items.each do |id, quantity| | |
| 241 | + product = Product.find(id) | |
| 242 | + price = product.price || 0 | |
| 243 | + new_items[id] = {:quantity => quantity, :price => price, :name => product.name} | |
| 244 | + end | |
| 245 | + ShoppingCartPlugin::PurchaseOrder.create!( | |
| 246 | + :seller => profile, | |
| 247 | + :customer => user, | |
| 248 | + :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED, | |
| 249 | + :products_list => new_items, | |
| 250 | + :customer_name => params[:customer][:name], | |
| 251 | + :customer_email => params[:customer][:email], | |
| 252 | + :customer_contact_phone => params[:customer][:contact_phone], | |
| 253 | + :customer_address => params[:customer][:address], | |
| 254 | + :customer_city => params[:customer][:city], | |
| 255 | + :customer_zip_code => params[:customer][:zip_code] | |
| 256 | + ) | |
| 257 | + end | |
| 258 | + | |
| 259 | + protected | |
| 260 | + | |
| 261 | + def cart | |
| 262 | + @cart ||= | |
| 263 | + begin | |
| 264 | + cookies[cookie_key] && YAML.load(Base64.decode64(cookies[cookie_key])) || nil | |
| 265 | + end | |
| 266 | + @cart | |
| 267 | + end | |
| 268 | + | |
| 269 | + def cart=(data) | |
| 270 | + @cart = data | |
| 271 | + end | |
| 272 | + | |
| 273 | + after_filter :save_cookie | |
| 274 | + def save_cookie | |
| 275 | + if @cart.nil? && cookies[cookie_key] | |
| 276 | + cookies.delete(cookie_key) | |
| 277 | + else | |
| 278 | + cookies[cookie_key] = { | |
| 279 | + :value => Base64.encode64(@cart.to_yaml), | |
| 280 | + :path => "/profile/#{profile.identifier}/plugin/shopping_cart" | |
| 281 | + } | |
| 282 | + end | |
| 283 | + end | |
| 284 | + | |
| 285 | + def cookie_key | |
| 286 | + :_noosfero_session_shopping_cart | |
| 287 | + end | |
| 288 | + | |
| 289 | +end | ... | ... |
plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb
| ... | ... | @@ -1,288 +0,0 @@ |
| 1 | -require 'base64' | |
| 2 | - | |
| 3 | -include ShoppingCartPlugin::CartHelper | |
| 4 | - | |
| 5 | -class ShoppingCartPluginProfileController < ProfileController | |
| 6 | - append_view_path File.join(File.dirname(__FILE__) + '/../views') | |
| 7 | - before_filter :login_required, :only => [] | |
| 8 | - | |
| 9 | - before_filter :login_required, :only => [] | |
| 10 | - | |
| 11 | - def get | |
| 12 | - has_products = !cart.nil? && (cart[:items].keys.size > 0) || false | |
| 13 | - config = { 'enterprise' => profile.identifier, 'hasProducts' => has_products } | |
| 14 | - render :text => config.to_json | |
| 15 | - end | |
| 16 | - | |
| 17 | - def add | |
| 18 | - self.cart = { :enterprise_id => profile.id, :items => {} } if self.cart.nil? | |
| 19 | - if validate_same_enterprise && product = validate_enterprise_has_product(params[:id]) | |
| 20 | - self.cart[:items][product.id] = 0 if self.cart[:items][product.id].nil? | |
| 21 | - self.cart[:items][product.id] += 1 | |
| 22 | - render :text => { | |
| 23 | - :ok => true, | |
| 24 | - :error => {:code => 0}, | |
| 25 | - :products => [{ | |
| 26 | - :id => product.id, | |
| 27 | - :name => product.name, | |
| 28 | - :price => get_price(product, profile.environment), | |
| 29 | - :description => product.description, | |
| 30 | - :picture => product.default_image(:minor), | |
| 31 | - :quantity => self.cart[:items][product.id] | |
| 32 | - }] | |
| 33 | - }.to_json | |
| 34 | - end | |
| 35 | - end | |
| 36 | - | |
| 37 | - def remove | |
| 38 | - id = params[:id].to_i | |
| 39 | - if validate_cart_presence && validate_cart_has_product(id) | |
| 40 | - self.cart[:items].delete(id) | |
| 41 | - self.cart = nil if self.cart[:items].empty? | |
| 42 | - render :text => { | |
| 43 | - :ok => true, | |
| 44 | - :error => {:code => 0}, | |
| 45 | - :product_id => id | |
| 46 | - }.to_json | |
| 47 | - end | |
| 48 | - end | |
| 49 | - | |
| 50 | - def list | |
| 51 | - if validate_cart_presence | |
| 52 | - products = self.cart[:items].collect do |id, quantity| | |
| 53 | - product = Product.find(id) | |
| 54 | - { :id => product.id, | |
| 55 | - :name => product.name, | |
| 56 | - :price => get_price(product, profile.environment), | |
| 57 | - :description => product.description, | |
| 58 | - :picture => product.default_image(:minor), | |
| 59 | - :quantity => quantity | |
| 60 | - } | |
| 61 | - end | |
| 62 | - render :text => { | |
| 63 | - :ok => true, | |
| 64 | - :error => {:code => 0}, | |
| 65 | - :enterprise => Enterprise.find(self.cart[:enterprise_id]).identifier, | |
| 66 | - :products => products | |
| 67 | - }.to_json | |
| 68 | - end | |
| 69 | - end | |
| 70 | - | |
| 71 | - def update_quantity | |
| 72 | - quantity = params[:quantity].to_i | |
| 73 | - id = params[:id].to_i | |
| 74 | - if validate_cart_presence && validate_cart_has_product(id) && validate_item_quantity(quantity) | |
| 75 | - product = Product.find(id) | |
| 76 | - self.cart[:items][product.id] = quantity | |
| 77 | - render :text => { | |
| 78 | - :ok => true, | |
| 79 | - :error => {:code => 0}, | |
| 80 | - :product_id => id, | |
| 81 | - :quantity => quantity | |
| 82 | - }.to_json | |
| 83 | - end | |
| 84 | - end | |
| 85 | - | |
| 86 | - def clean | |
| 87 | - self.cart = nil | |
| 88 | - render :text => { | |
| 89 | - :ok => true, | |
| 90 | - :error => {:code => 0} | |
| 91 | - }.to_json | |
| 92 | - end | |
| 93 | - | |
| 94 | - def buy | |
| 95 | - @environment = profile.environment | |
| 96 | - @cart = cart | |
| 97 | - render :layout => false | |
| 98 | - end | |
| 99 | - | |
| 100 | - def send_request | |
| 101 | - register_order(params[:customer], self.cart[:items]) | |
| 102 | - begin | |
| 103 | - ShoppingCartPlugin::Mailer.deliver_customer_notification(params[:customer], profile, self.cart[:items]) | |
| 104 | - ShoppingCartPlugin::Mailer.deliver_supplier_notification(params[:customer], profile, self.cart[:items]) | |
| 105 | - render :text => { | |
| 106 | - :ok => true, | |
| 107 | - :message => _('Request sent successfully. Check your email.'), | |
| 108 | - :error => {:code => 0} | |
| 109 | - }.to_json | |
| 110 | - rescue Exception => exception | |
| 111 | - render :text => { | |
| 112 | - :ok => false, | |
| 113 | - :error => { | |
| 114 | - :code => 6, | |
| 115 | - :message => exception.message | |
| 116 | - } | |
| 117 | - }.to_json | |
| 118 | - end | |
| 119 | - end | |
| 120 | - | |
| 121 | - def visibility | |
| 122 | - render :text => self.cart.has_key?(:visibility) ? self.cart[:visibility].to_json : true.to_json | |
| 123 | - end | |
| 124 | - | |
| 125 | - def show | |
| 126 | - begin | |
| 127 | - self.cart[:visibility] = true | |
| 128 | - render :text => { | |
| 129 | - :ok => true, | |
| 130 | - :message => _('Basket displayed.'), | |
| 131 | - :error => {:code => 0} | |
| 132 | - }.to_json | |
| 133 | - rescue Exception => exception | |
| 134 | - render :text => { | |
| 135 | - :ok => false, | |
| 136 | - :error => { | |
| 137 | - :code => 7, | |
| 138 | - :message => exception.message | |
| 139 | - } | |
| 140 | - }.to_json | |
| 141 | - end | |
| 142 | - end | |
| 143 | - | |
| 144 | - def hide | |
| 145 | - begin | |
| 146 | - self.cart[:visibility] = false | |
| 147 | - render :text => { | |
| 148 | - :ok => true, | |
| 149 | - :message => _('Basket hidden.'), | |
| 150 | - :error => {:code => 0} | |
| 151 | - }.to_json | |
| 152 | - rescue Exception => exception | |
| 153 | - render :text => { | |
| 154 | - :ok => false, | |
| 155 | - :error => { | |
| 156 | - :code => 8, | |
| 157 | - :message => exception.message | |
| 158 | - } | |
| 159 | - }.to_json | |
| 160 | - end | |
| 161 | - end | |
| 162 | - | |
| 163 | - private | |
| 164 | - | |
| 165 | - def validate_same_enterprise | |
| 166 | - if profile.id != self.cart[:enterprise_id] | |
| 167 | - render :text => { | |
| 168 | - :ok => false, | |
| 169 | - :error => { | |
| 170 | - :code => 1, | |
| 171 | - :message => _("Can't join items from different enterprises.") | |
| 172 | - } | |
| 173 | - }.to_json | |
| 174 | - return false | |
| 175 | - end | |
| 176 | - true | |
| 177 | - end | |
| 178 | - | |
| 179 | - def validate_cart_presence | |
| 180 | - if self.cart.nil? | |
| 181 | - render :text => { | |
| 182 | - :ok => false, | |
| 183 | - :error => { | |
| 184 | - :code => 2, | |
| 185 | - :message => _("There is no basket.") | |
| 186 | - } | |
| 187 | - }.to_json | |
| 188 | - return false | |
| 189 | - end | |
| 190 | - true | |
| 191 | - end | |
| 192 | - | |
| 193 | - def validate_enterprise_has_product(id) | |
| 194 | - begin | |
| 195 | - product = profile.products.find(id) | |
| 196 | - rescue | |
| 197 | - render :text => { | |
| 198 | - :ok => false, | |
| 199 | - :error => { | |
| 200 | - :code => 3, | |
| 201 | - :message => _("This enterprise doesn't have this product.") | |
| 202 | - } | |
| 203 | - }.to_json | |
| 204 | - return nil | |
| 205 | - end | |
| 206 | - product | |
| 207 | - end | |
| 208 | - | |
| 209 | - def validate_cart_has_product(id) | |
| 210 | - if !self.cart[:items].has_key?(id) | |
| 211 | - render :text => { | |
| 212 | - :ok => false, | |
| 213 | - :error => { | |
| 214 | - :code => 4, | |
| 215 | - :message => _("The basket doesn't have this product.") | |
| 216 | - } | |
| 217 | - }.to_json | |
| 218 | - return false | |
| 219 | - end | |
| 220 | - true | |
| 221 | - end | |
| 222 | - | |
| 223 | - def validate_item_quantity(quantity) | |
| 224 | - if quantity.to_i < 1 | |
| 225 | - render :text => { | |
| 226 | - :ok => false, | |
| 227 | - :error => { | |
| 228 | - :code => 5, | |
| 229 | - :message => _("Invalid quantity.") | |
| 230 | - } | |
| 231 | - }.to_json | |
| 232 | - return false | |
| 233 | - end | |
| 234 | - true | |
| 235 | - end | |
| 236 | - | |
| 237 | - def register_order(custumer, items) | |
| 238 | - new_items = {} | |
| 239 | - items.each do |id, quantity| | |
| 240 | - product = Product.find(id) | |
| 241 | - price = product.price || 0 | |
| 242 | - new_items[id] = {:quantity => quantity, :price => price, :name => product.name} | |
| 243 | - end | |
| 244 | - ShoppingCartPlugin::PurchaseOrder.create!( | |
| 245 | - :seller => profile, | |
| 246 | - :customer => user, | |
| 247 | - :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED, | |
| 248 | - :products_list => new_items, | |
| 249 | - :customer_name => params[:customer][:name], | |
| 250 | - :customer_email => params[:customer][:email], | |
| 251 | - :customer_contact_phone => params[:customer][:contact_phone], | |
| 252 | - :customer_address => params[:customer][:address], | |
| 253 | - :customer_city => params[:customer][:city], | |
| 254 | - :customer_zip_code => params[:customer][:zip_code] | |
| 255 | - ) | |
| 256 | - end | |
| 257 | - | |
| 258 | - protected | |
| 259 | - | |
| 260 | - def cart | |
| 261 | - @cart ||= | |
| 262 | - begin | |
| 263 | - cookies[cookie_key] && YAML.load(Base64.decode64(cookies[cookie_key])) || nil | |
| 264 | - end | |
| 265 | - @cart | |
| 266 | - end | |
| 267 | - | |
| 268 | - def cart=(data) | |
| 269 | - @cart = data | |
| 270 | - end | |
| 271 | - | |
| 272 | - after_filter :save_cookie | |
| 273 | - def save_cookie | |
| 274 | - if @cart.nil? && cookies[cookie_key] | |
| 275 | - cookies.delete(cookie_key) | |
| 276 | - else | |
| 277 | - cookies[cookie_key] = { | |
| 278 | - :value => Base64.encode64(@cart.to_yaml), | |
| 279 | - :path => "/profile/#{profile.identifier}/plugin/shopping_cart" | |
| 280 | - } | |
| 281 | - end | |
| 282 | - end | |
| 283 | - | |
| 284 | - def cookie_key | |
| 285 | - :_noosfero_session_shopping_cart | |
| 286 | - end | |
| 287 | - | |
| 288 | -end |
plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb
0 → 100644
| ... | ... | @@ -0,0 +1,213 @@ |
| 1 | +require File.dirname(__FILE__) + '/../../../../test/test_helper' | |
| 2 | +require File.dirname(__FILE__) + '/../../controllers/shopping_cart_plugin_profile_controller' | |
| 3 | + | |
| 4 | +# Re-raise errors caught by the controller. | |
| 5 | +class ShoppingCartPluginController; def rescue_action(e) raise e end; end | |
| 6 | + | |
| 7 | +class ShoppingCartPluginControllerTest < ActionController::TestCase | |
| 8 | + | |
| 9 | + def setup | |
| 10 | + @controller = ShoppingCartPluginController.new | |
| 11 | + @request = ActionController::TestRequest.new | |
| 12 | + @response = ActionController::TestResponse.new | |
| 13 | + @enterprise = fast_create(Enterprise) | |
| 14 | + @product = fast_create(Product, :enterprise_id => @enterprise.id) | |
| 15 | + end | |
| 16 | + attr_reader :enterprise | |
| 17 | + attr_reader :product | |
| 18 | + | |
| 19 | + should 'add a new product to cart' do | |
| 20 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 21 | + | |
| 22 | + assert product_in_cart?(product) | |
| 23 | + assert_equal 1, product_quantity(product) | |
| 24 | + end | |
| 25 | + | |
| 26 | + should 'grow quantity through add' do | |
| 27 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 28 | + assert_equal 1, product_quantity(product) | |
| 29 | + | |
| 30 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 31 | + assert_equal 2, product_quantity(product) | |
| 32 | + end | |
| 33 | + | |
| 34 | + should 'not add product to cart if it does not exists' do | |
| 35 | + assert_nothing_raised { get :add, :profile => enterprise.identifier, :id => 9999 } | |
| 36 | + | |
| 37 | + assert !product_in_cart?(product) | |
| 38 | + assert !response_ok? | |
| 39 | + assert 3, reponse_error_code | |
| 40 | + end | |
| 41 | + | |
| 42 | + should 'remove cart if the product being removed is the last one' do | |
| 43 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 44 | + assert cart? | |
| 45 | + | |
| 46 | + get :remove, :profile => enterprise.identifier, :id => product.id | |
| 47 | + assert !cart? | |
| 48 | + end | |
| 49 | + | |
| 50 | + should 'not try to remove a product if there is no cart' do | |
| 51 | + instantiate_cart | |
| 52 | + assert !cart? | |
| 53 | + | |
| 54 | + assert_nothing_raised { get :remove, :profile => enterprise.identifier, :id => 9999 } | |
| 55 | + assert !response_ok? | |
| 56 | + assert_equal 2, reponse_error_code | |
| 57 | + end | |
| 58 | + | |
| 59 | + should 'just remove product if there are other products on cart' do | |
| 60 | + another_product = fast_create(Product, :enterprise_id => enterprise.id) | |
| 61 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 62 | + get :add, :profile => enterprise.identifier, :id => another_product.id | |
| 63 | + | |
| 64 | + get :remove, :profile => enterprise.identifier, :id => product.id | |
| 65 | + assert cart? | |
| 66 | + assert !product_in_cart?(product) | |
| 67 | + end | |
| 68 | + | |
| 69 | + should 'not try to remove a product that is not in the cart' do | |
| 70 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 71 | + assert cart? | |
| 72 | + assert_nothing_raised { get :remove, :profile => enterprise.identifier, :id => 9999 } | |
| 73 | + | |
| 74 | + assert !response_ok? | |
| 75 | + assert_equal 4, reponse_error_code | |
| 76 | + end | |
| 77 | + | |
| 78 | + should 'not try to list the cart if there is no cart' do | |
| 79 | + instantiate_cart | |
| 80 | + assert !cart? | |
| 81 | + | |
| 82 | + assert_nothing_raised { get :list, :profile => enterprise.identifier } | |
| 83 | + assert !response_ok? | |
| 84 | + assert_equal 2, reponse_error_code | |
| 85 | + end | |
| 86 | + | |
| 87 | + should 'list products without errors' do | |
| 88 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 89 | + | |
| 90 | + assert_nothing_raised { get :list, :profile => enterprise.identifier } | |
| 91 | + assert response_ok? | |
| 92 | + end | |
| 93 | + | |
| 94 | + should 'update the quantity of a product' do | |
| 95 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 96 | + assert 1, product_quantity(product) | |
| 97 | + | |
| 98 | + get :update_quantity, :profile => enterprise.identifier, :id => product.id, :quantity => 3 | |
| 99 | + assert 3, product_quantity(product) | |
| 100 | + end | |
| 101 | + | |
| 102 | + should 'not try to update quantity the quantity of a product if there is no cart' do | |
| 103 | + instantiate_cart | |
| 104 | + assert !cart? | |
| 105 | + | |
| 106 | + assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => 9999, :quantity => 3 } | |
| 107 | + assert !response_ok? | |
| 108 | + assert_equal 2, reponse_error_code | |
| 109 | + end | |
| 110 | + | |
| 111 | + should 'not try to update the quantity of a product that is not in the cart' do | |
| 112 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 113 | + assert cart? | |
| 114 | + assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => 9999, :quantity => 3 } | |
| 115 | + | |
| 116 | + assert !response_ok? | |
| 117 | + assert_equal 4, reponse_error_code | |
| 118 | + end | |
| 119 | + | |
| 120 | + should 'not update the quantity of a product with a invalid value' do | |
| 121 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 122 | + | |
| 123 | + assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => product.id, :quantity => -1} | |
| 124 | + assert !response_ok? | |
| 125 | + assert_equal 5, reponse_error_code | |
| 126 | + | |
| 127 | + assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => product.id, :quantity => 'asdf'} | |
| 128 | + assert !response_ok? | |
| 129 | + assert_equal 5, reponse_error_code | |
| 130 | + end | |
| 131 | + | |
| 132 | + should 'clean the cart' do | |
| 133 | + another_product = fast_create(Product, :enterprise_id => enterprise.id) | |
| 134 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 135 | + get :add, :profile => enterprise.identifier, :id => another_product.id | |
| 136 | + | |
| 137 | + assert_nothing_raised { get :clean, :profile => enterprise.identifier } | |
| 138 | + assert !cart? | |
| 139 | + end | |
| 140 | + | |
| 141 | + should 'not crash if there is no cart' do | |
| 142 | + instantiate_cart | |
| 143 | + assert !cart? | |
| 144 | + assert_nothing_raised { get :clean, :profile => enterprise.identifier } | |
| 145 | + end | |
| 146 | + | |
| 147 | + should 'register order on send request' do | |
| 148 | + product1 = fast_create(Product, :enterprise_id => enterprise.id, :price => 1.99) | |
| 149 | + product2 = fast_create(Product, :enterprise_id => enterprise.id, :price => 2.23) | |
| 150 | + @controller.stubs(:cart).returns({:items => {product1.id => 1, product2.id => 2}}) | |
| 151 | + assert_difference ShoppingCartPlugin::PurchaseOrder, :count, 1 do | |
| 152 | + post :send_request, | |
| 153 | + :customer => {:name => "Manuel", :email => "manuel@ceu.com"}, | |
| 154 | + :profile => enterprise.identifier | |
| 155 | + end | |
| 156 | + | |
| 157 | + order = ShoppingCartPlugin::PurchaseOrder.last | |
| 158 | + | |
| 159 | + assert_equal 1.99, order.products_list[product1.id][:price] | |
| 160 | + assert_equal 1, order.products_list[product1.id][:quantity] | |
| 161 | + assert_equal 2.23, order.products_list[product2.id][:price] | |
| 162 | + assert_equal 2, order.products_list[product2.id][:quantity] | |
| 163 | + assert_equal ShoppingCartPlugin::PurchaseOrder::Status::OPENED, order.status | |
| 164 | + end | |
| 165 | + | |
| 166 | + should 'register order on send request and not crash if product is not defined' do | |
| 167 | + product1 = fast_create(Product, :enterprise_id => enterprise.id) | |
| 168 | + @controller.stubs(:cart).returns({:items => {product1.id => 1}}) | |
| 169 | + assert_difference ShoppingCartPlugin::PurchaseOrder, :count, 1 do | |
| 170 | + post :send_request, | |
| 171 | + :customer => {:name => "Manuel", :email => "manuel@ceu.com"}, | |
| 172 | + :profile => enterprise.identifier | |
| 173 | + end | |
| 174 | + | |
| 175 | + order = ShoppingCartPlugin::PurchaseOrder.last | |
| 176 | + | |
| 177 | + assert_equal 0, order.products_list[product1.id][:price] | |
| 178 | + end | |
| 179 | + | |
| 180 | + private | |
| 181 | + | |
| 182 | + def json_response | |
| 183 | + ActiveSupport::JSON.decode @response.body | |
| 184 | + end | |
| 185 | + | |
| 186 | + def cart? | |
| 187 | + @controller.send(:cart).nil? | |
| 188 | + end | |
| 189 | + | |
| 190 | + def product_in_cart?(product) | |
| 191 | + @controller.send(:cart)[:items].has_key?(product.id) | |
| 192 | + end | |
| 193 | + | |
| 194 | + def product_quantity(product) | |
| 195 | + @controller.send(:cart)[:items][product.id] | |
| 196 | + end | |
| 197 | + | |
| 198 | + def response_ok? | |
| 199 | + json_response['ok'] | |
| 200 | + end | |
| 201 | + | |
| 202 | + def reponse_error_code | |
| 203 | + json_response['error']['code'] | |
| 204 | + end | |
| 205 | + | |
| 206 | + # temporary hack...if I don't do this the session stays as an Array instead | |
| 207 | + # of a TestSession | |
| 208 | + def instantiate_cart | |
| 209 | + get :add, :profile => enterprise.identifier, :id => product.id | |
| 210 | + get :remove, :profile => enterprise.identifier, :id => product.id | |
| 211 | + end | |
| 212 | + | |
| 213 | +end | ... | ... |
plugins/shopping_cart/test/functional/shopping_cart_plugin_profile_controller_test.rb
| ... | ... | @@ -1,213 +0,0 @@ |
| 1 | -require File.dirname(__FILE__) + '/../../../../test/test_helper' | |
| 2 | -require File.dirname(__FILE__) + '/../../controllers/shopping_cart_plugin_profile_controller' | |
| 3 | - | |
| 4 | -# Re-raise errors caught by the controller. | |
| 5 | -class ShoppingCartPluginProfileController; def rescue_action(e) raise e end; end | |
| 6 | - | |
| 7 | -class ShoppingCartPluginProfileControllerTest < ActionController::TestCase | |
| 8 | - | |
| 9 | - def setup | |
| 10 | - @controller = ShoppingCartPluginProfileController.new | |
| 11 | - @request = ActionController::TestRequest.new | |
| 12 | - @response = ActionController::TestResponse.new | |
| 13 | - @enterprise = fast_create(Enterprise) | |
| 14 | - @product = fast_create(Product, :enterprise_id => @enterprise.id) | |
| 15 | - end | |
| 16 | - attr_reader :enterprise | |
| 17 | - attr_reader :product | |
| 18 | - | |
| 19 | - should 'add a new product to cart' do | |
| 20 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 21 | - | |
| 22 | - assert product_in_cart?(product) | |
| 23 | - assert_equal 1, product_quantity(product) | |
| 24 | - end | |
| 25 | - | |
| 26 | - should 'grow quantity through add' do | |
| 27 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 28 | - assert_equal 1, product_quantity(product) | |
| 29 | - | |
| 30 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 31 | - assert_equal 2, product_quantity(product) | |
| 32 | - end | |
| 33 | - | |
| 34 | - should 'not add product to cart if it does not exists' do | |
| 35 | - assert_nothing_raised { get :add, :profile => enterprise.identifier, :id => 9999 } | |
| 36 | - | |
| 37 | - assert !product_in_cart?(product) | |
| 38 | - assert !response_ok? | |
| 39 | - assert 3, reponse_error_code | |
| 40 | - end | |
| 41 | - | |
| 42 | - should 'remove cart if the product being removed is the last one' do | |
| 43 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 44 | - assert cart? | |
| 45 | - | |
| 46 | - get :remove, :profile => enterprise.identifier, :id => product.id | |
| 47 | - assert !cart? | |
| 48 | - end | |
| 49 | - | |
| 50 | - should 'not try to remove a product if there is no cart' do | |
| 51 | - instantiate_cart | |
| 52 | - assert !cart? | |
| 53 | - | |
| 54 | - assert_nothing_raised { get :remove, :profile => enterprise.identifier, :id => 9999 } | |
| 55 | - assert !response_ok? | |
| 56 | - assert_equal 2, reponse_error_code | |
| 57 | - end | |
| 58 | - | |
| 59 | - should 'just remove product if there are other products on cart' do | |
| 60 | - another_product = fast_create(Product, :enterprise_id => enterprise.id) | |
| 61 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 62 | - get :add, :profile => enterprise.identifier, :id => another_product.id | |
| 63 | - | |
| 64 | - get :remove, :profile => enterprise.identifier, :id => product.id | |
| 65 | - assert cart? | |
| 66 | - assert !product_in_cart?(product) | |
| 67 | - end | |
| 68 | - | |
| 69 | - should 'not try to remove a product that is not in the cart' do | |
| 70 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 71 | - assert cart? | |
| 72 | - assert_nothing_raised { get :remove, :profile => enterprise.identifier, :id => 9999 } | |
| 73 | - | |
| 74 | - assert !response_ok? | |
| 75 | - assert_equal 4, reponse_error_code | |
| 76 | - end | |
| 77 | - | |
| 78 | - should 'not try to list the cart if there is no cart' do | |
| 79 | - instantiate_cart | |
| 80 | - assert !cart? | |
| 81 | - | |
| 82 | - assert_nothing_raised { get :list, :profile => enterprise.identifier } | |
| 83 | - assert !response_ok? | |
| 84 | - assert_equal 2, reponse_error_code | |
| 85 | - end | |
| 86 | - | |
| 87 | - should 'list products without errors' do | |
| 88 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 89 | - | |
| 90 | - assert_nothing_raised { get :list, :profile => enterprise.identifier } | |
| 91 | - assert response_ok? | |
| 92 | - end | |
| 93 | - | |
| 94 | - should 'update the quantity of a product' do | |
| 95 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 96 | - assert 1, product_quantity(product) | |
| 97 | - | |
| 98 | - get :update_quantity, :profile => enterprise.identifier, :id => product.id, :quantity => 3 | |
| 99 | - assert 3, product_quantity(product) | |
| 100 | - end | |
| 101 | - | |
| 102 | - should 'not try to update quantity the quantity of a product if there is no cart' do | |
| 103 | - instantiate_cart | |
| 104 | - assert !cart? | |
| 105 | - | |
| 106 | - assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => 9999, :quantity => 3 } | |
| 107 | - assert !response_ok? | |
| 108 | - assert_equal 2, reponse_error_code | |
| 109 | - end | |
| 110 | - | |
| 111 | - should 'not try to update the quantity of a product that is not in the cart' do | |
| 112 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 113 | - assert cart? | |
| 114 | - assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => 9999, :quantity => 3 } | |
| 115 | - | |
| 116 | - assert !response_ok? | |
| 117 | - assert_equal 4, reponse_error_code | |
| 118 | - end | |
| 119 | - | |
| 120 | - should 'not update the quantity of a product with a invalid value' do | |
| 121 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 122 | - | |
| 123 | - assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => product.id, :quantity => -1} | |
| 124 | - assert !response_ok? | |
| 125 | - assert_equal 5, reponse_error_code | |
| 126 | - | |
| 127 | - assert_nothing_raised { get :update_quantity, :profile => enterprise.identifier, :id => product.id, :quantity => 'asdf'} | |
| 128 | - assert !response_ok? | |
| 129 | - assert_equal 5, reponse_error_code | |
| 130 | - end | |
| 131 | - | |
| 132 | - should 'clean the cart' do | |
| 133 | - another_product = fast_create(Product, :enterprise_id => enterprise.id) | |
| 134 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 135 | - get :add, :profile => enterprise.identifier, :id => another_product.id | |
| 136 | - | |
| 137 | - assert_nothing_raised { get :clean, :profile => enterprise.identifier } | |
| 138 | - assert !cart? | |
| 139 | - end | |
| 140 | - | |
| 141 | - should 'not crash if there is no cart' do | |
| 142 | - instantiate_cart | |
| 143 | - assert !cart? | |
| 144 | - assert_nothing_raised { get :clean, :profile => enterprise.identifier } | |
| 145 | - end | |
| 146 | - | |
| 147 | - should 'register order on send request' do | |
| 148 | - product1 = fast_create(Product, :enterprise_id => enterprise.id, :price => 1.99) | |
| 149 | - product2 = fast_create(Product, :enterprise_id => enterprise.id, :price => 2.23) | |
| 150 | - @controller.stubs(:cart).returns({:items => {product1.id => 1, product2.id => 2}}) | |
| 151 | - assert_difference ShoppingCartPlugin::PurchaseOrder, :count, 1 do | |
| 152 | - post :send_request, | |
| 153 | - :customer => {:name => "Manuel", :email => "manuel@ceu.com"}, | |
| 154 | - :profile => enterprise.identifier | |
| 155 | - end | |
| 156 | - | |
| 157 | - order = ShoppingCartPlugin::PurchaseOrder.last | |
| 158 | - | |
| 159 | - assert_equal 1.99, order.products_list[product1.id][:price] | |
| 160 | - assert_equal 1, order.products_list[product1.id][:quantity] | |
| 161 | - assert_equal 2.23, order.products_list[product2.id][:price] | |
| 162 | - assert_equal 2, order.products_list[product2.id][:quantity] | |
| 163 | - assert_equal ShoppingCartPlugin::PurchaseOrder::Status::OPENED, order.status | |
| 164 | - end | |
| 165 | - | |
| 166 | - should 'register order on send request and not crash if product is not defined' do | |
| 167 | - product1 = fast_create(Product, :enterprise_id => enterprise.id) | |
| 168 | - @controller.stubs(:cart).returns({:items => {product1.id => 1}}) | |
| 169 | - assert_difference ShoppingCartPlugin::PurchaseOrder, :count, 1 do | |
| 170 | - post :send_request, | |
| 171 | - :customer => {:name => "Manuel", :email => "manuel@ceu.com"}, | |
| 172 | - :profile => enterprise.identifier | |
| 173 | - end | |
| 174 | - | |
| 175 | - order = ShoppingCartPlugin::PurchaseOrder.last | |
| 176 | - | |
| 177 | - assert_equal 0, order.products_list[product1.id][:price] | |
| 178 | - end | |
| 179 | - | |
| 180 | - private | |
| 181 | - | |
| 182 | - def json_response | |
| 183 | - ActiveSupport::JSON.decode @response.body | |
| 184 | - end | |
| 185 | - | |
| 186 | - def cart? | |
| 187 | - @controller.send(:cart).nil? | |
| 188 | - end | |
| 189 | - | |
| 190 | - def product_in_cart?(product) | |
| 191 | - @controller.send(:cart)[:items].has_key?(product.id) | |
| 192 | - end | |
| 193 | - | |
| 194 | - def product_quantity(product) | |
| 195 | - @controller.send(:cart)[:items][product.id] | |
| 196 | - end | |
| 197 | - | |
| 198 | - def response_ok? | |
| 199 | - json_response['ok'] | |
| 200 | - end | |
| 201 | - | |
| 202 | - def reponse_error_code | |
| 203 | - json_response['error']['code'] | |
| 204 | - end | |
| 205 | - | |
| 206 | - # temporary hack...if I don't do this the session stays as an Array instead | |
| 207 | - # of a TestSession | |
| 208 | - def instantiate_cart | |
| 209 | - get :add, :profile => enterprise.identifier, :id => product.id | |
| 210 | - get :remove, :profile => enterprise.identifier, :id => product.id | |
| 211 | - end | |
| 212 | - | |
| 213 | -end |