spree 0.10.2 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of spree might be problematic. Click here for more details.

Files changed (536) hide show
  1. data/CHANGELOG +81 -4
  2. data/CONTRIBUTORS +18 -10
  3. data/Rakefile +5 -4
  4. data/app/controllers/admin/adjustments_controller.rb +17 -3
  5. data/app/controllers/admin/base_controller.rb +2 -2
  6. data/app/controllers/admin/checkouts_controller.rb +43 -34
  7. data/app/controllers/admin/line_items_controller.rb +32 -18
  8. data/app/controllers/admin/option_types_controller.rb +1 -1
  9. data/app/controllers/admin/orders_controller.rb +28 -7
  10. data/app/controllers/admin/payments_controller.rb +7 -7
  11. data/app/controllers/admin/products_controller.rb +12 -23
  12. data/app/controllers/admin/reports_controller.rb +19 -7
  13. data/app/controllers/admin/return_authorizations_controller.rb +1 -1
  14. data/app/controllers/admin/shipments_controller.rb +9 -9
  15. data/app/controllers/admin/users_controller.rb +3 -1
  16. data/app/controllers/admin/variants_controller.rb +2 -2
  17. data/app/controllers/checkouts_controller.rb +29 -18
  18. data/app/controllers/content_controller.rb +1 -1
  19. data/{vendor/extensions/localization/app → app}/controllers/locale_controller.rb +1 -1
  20. data/app/controllers/orders_controller.rb +33 -30
  21. data/app/controllers/password_resets_controller.rb +4 -4
  22. data/app/controllers/products_controller.rb +0 -6
  23. data/app/controllers/spree/base_controller.rb +9 -2
  24. data/app/controllers/user_sessions_controller.rb +18 -18
  25. data/app/controllers/users_controller.rb +2 -2
  26. data/app/helpers/admin/base_helper.rb +5 -2
  27. data/app/helpers/admin/navigation_helper.rb +1 -1
  28. data/app/helpers/admin/orders_helper.rb +0 -13
  29. data/app/helpers/admin/products_helper.rb +0 -8
  30. data/app/helpers/checkouts_helper.rb +5 -5
  31. data/app/helpers/products_helper.rb +0 -12
  32. data/app/helpers/spree/base_helper.rb +10 -39
  33. data/app/helpers/taxons_helper.rb +1 -0
  34. data/app/models/address.rb +6 -1
  35. data/app/models/app_configuration.rb +15 -14
  36. data/app/models/calculator/flexi_rate.rb +2 -1
  37. data/app/models/calculator/vat.rb +1 -1
  38. data/app/models/checkout.rb +1 -1
  39. data/app/models/creditcard.rb +26 -20
  40. data/app/models/inventory_unit.rb +70 -21
  41. data/app/models/line_item.rb +25 -11
  42. data/app/models/order.rb +16 -10
  43. data/app/models/payment.rb +4 -1
  44. data/app/models/payment_method.rb +14 -5
  45. data/app/models/product.rb +12 -4
  46. data/app/models/role.rb +2 -2
  47. data/app/models/shipment.rb +21 -2
  48. data/app/models/tax_category.rb +8 -0
  49. data/app/models/taxon.rb +8 -0
  50. data/app/models/user.rb +2 -3
  51. data/app/models/variant.rb +18 -13
  52. data/config/boot.rb +1 -5
  53. data/config/cucumber.yml +7 -0
  54. data/config/database.yml +20 -37
  55. data/config/database.yml.example +5 -6
  56. data/config/environment.rb +6 -5
  57. data/config/environments/cucumber.rb +30 -0
  58. data/config/environments/production.rb +1 -4
  59. data/config/environments/staging.rb +3 -0
  60. data/config/environments/test.rb +1 -1
  61. data/config/initializers/cookie_verification_secret.rb +7 -0
  62. data/config/initializers/locales.rb +4 -2
  63. data/config/initializers/new_rails_defaults.rb +2 -0
  64. data/config/initializers/spree.rb +1 -0
  65. data/config/initializers/workarounds_for_ruby19.rb +0 -25
  66. data/config/locales/{en-US.yml → en_spree.yml} +18 -4
  67. data/config/routes.rb +2 -1
  68. data/db/migrate/20100317120946_add_alt_text_to_images.rb +9 -0
  69. data/db/migrate/20100427121301_add_display_to_payment_methods.rb +9 -0
  70. data/db/migrate/20100504142133_add_addresses_checkouts_indexes.rb +16 -0
  71. data/db/migrate/20100506180619_add_icon_to_taxons.rb +18 -0
  72. data/db/migrate/20100506185838_add_description_to_taxons.rb +11 -0
  73. data/db/migrate/20100528155333_index_for_shipments_number.rb +9 -0
  74. data/db/migrate/20100528185820_add_index_on_users_persistence_token.rb +9 -0
  75. data/db/migrate/20100605152042_add_default_to_tax_categories.rb +9 -0
  76. data/db/sample/payment_methods.yml +8 -1
  77. data/db/sample/shipments.yml +2 -2
  78. data/db/schema.rb +54 -21
  79. data/features/checkout.feature +98 -0
  80. data/features/create_admin_user.feature +18 -0
  81. data/features/search.feature +35 -0
  82. data/features/sign_in.feature +25 -0
  83. data/features/sign_out.feature +12 -0
  84. data/features/sign_up.feature +20 -0
  85. data/features/step_definitions/error_steps.rb +3 -0
  86. data/features/step_definitions/model_steps.rb +3 -0
  87. data/features/step_definitions/pickle_steps.rb +73 -0
  88. data/features/step_definitions/role_steps.rb +8 -0
  89. data/features/step_definitions/session_steps.rb +14 -0
  90. data/features/step_definitions/user_steps.rb +67 -0
  91. data/features/step_definitions/web_steps.rb +197 -0
  92. data/features/support/create_admin_user.rb +6 -0
  93. data/features/support/env.rb +89 -0
  94. data/features/support/paths.rb +32 -0
  95. data/features/support/pickle.rb +24 -0
  96. data/features/work_with_cart.feature +41 -0
  97. data/lib/generators/extension_model/extension_model_generator.rb +10 -10
  98. data/lib/generators/instance/templates/databases/mysql.yml +11 -0
  99. data/lib/scopes/variant.rb +10 -0
  100. data/lib/spree.rb +3 -3
  101. data/lib/spree/extensions.rb +1 -1
  102. data/lib/tasks/cucumber.rake +47 -0
  103. data/lib/tasks/database.rake +29 -29
  104. data/public/images/admin/bg/spree_50.png +0 -0
  105. data/public/images/tile-header.png +0 -0
  106. data/public/images/tile-slider.png +0 -0
  107. data/public/javascripts/admin/checkouts/edit.js +33 -0
  108. data/public/javascripts/dashboard.js +2 -2
  109. data/public/javascripts/taxonomy.js +2 -2
  110. data/public/stylesheets/admin/admin-tables.css +4 -0
  111. data/public/stylesheets/admin/admin.css +31 -16
  112. data/public/stylesheets/screen.css +16 -3
  113. data/script/about +3 -2
  114. data/script/console +2 -2
  115. data/script/cucumber +10 -0
  116. data/script/dbconsole +1 -1
  117. data/script/destroy +2 -2
  118. data/script/generate +2 -2
  119. data/script/performance/benchmarker +1 -1
  120. data/script/performance/profiler +1 -1
  121. data/script/plugin +2 -2
  122. data/script/runner +2 -2
  123. data/script/server +2 -2
  124. data/test/fixtures/payment_methods.yml +12 -0
  125. data/test/functional/admin/checkouts_controller_test.rb +0 -2
  126. data/test/functional/admin/line_items_controller_test.rb +78 -39
  127. data/test/functional/admin/products_controller_test.rb +4 -5
  128. data/test/integration/checkout_test.rb +1 -0
  129. data/test/test_helper.rb +114 -86
  130. data/test/unit/creditcard_test.rb +28 -7
  131. data/test/unit/flexi_rate_calculator_test.rb +75 -0
  132. data/test/unit/helpers/products_helper_test.rb +4 -4
  133. data/test/unit/inventory_unit_test.rb +39 -5
  134. data/test/unit/line_item_test.rb +60 -1
  135. data/test/unit/order_state_test.rb +85 -58
  136. data/test/unit/order_test.rb +144 -123
  137. data/test/unit/product_test.rb +21 -0
  138. data/test/unit/return_authorization_test.rb +22 -28
  139. data/test/unit/shipment_test.rb +19 -7
  140. data/test/unit/variant_test.rb +100 -24
  141. data/vendor/extensions/api/api_extension.rb +2 -2
  142. data/vendor/extensions/api/app/controllers/api/base_controller.rb +14 -6
  143. data/vendor/extensions/api/app/controllers/api/countries_controller.rb +4 -0
  144. data/vendor/extensions/api/app/controllers/api/orders_controller.rb +4 -4
  145. data/vendor/extensions/api/app/controllers/api/products_controller.rb +5 -1
  146. data/vendor/extensions/api/app/controllers/api/shipments_controller.rb +7 -7
  147. data/vendor/extensions/api/app/controllers/api/states_controller.rb +5 -0
  148. data/vendor/extensions/api/config/locales/{en-US.yml → en.yml} +2 -2
  149. data/vendor/extensions/api/config/routes.rb +5 -0
  150. data/vendor/extensions/api/test/integration/orders_api_test.rb +4 -4
  151. data/vendor/extensions/overview_dashboard/app/views/admin/overview/index.html.erb +1 -1
  152. data/vendor/extensions/payment_gateway/app/models/gateway.rb +1 -1
  153. data/vendor/extensions/payment_gateway/app/models/gateway/authorize_net_cim.rb +41 -29
  154. data/vendor/extensions/payment_gateway/app/models/gateway/bogus.rb +3 -3
  155. data/vendor/extensions/payment_gateway/app/models/gateway/eway.rb +11 -0
  156. data/vendor/extensions/payment_gateway/app/models/gateway/sage_pay.rb +9 -0
  157. data/vendor/extensions/payment_gateway/config/locales/{en-US.yml → en.yml} +1 -1
  158. data/vendor/extensions/payment_gateway/lib/spree/payment_gateway.rb +46 -56
  159. data/vendor/extensions/payment_gateway/payment_gateway_extension.rb +9 -10
  160. data/vendor/extensions/payment_gateway/test/unit/authorize_net_cim_test.rb +7 -6
  161. data/vendor/extensions/theme_default/app/stylesheets/_checkout.less +10 -3
  162. data/vendor/extensions/theme_default/app/views/admin/adjustments/index.html.erb +1 -1
  163. data/vendor/extensions/theme_default/app/views/admin/checkouts/_form.html.erb +31 -5
  164. data/vendor/extensions/theme_default/app/views/admin/checkouts/show.html.erb +27 -16
  165. data/vendor/extensions/theme_default/app/views/admin/images/_form.html.erb +4 -0
  166. data/vendor/extensions/theme_default/app/views/admin/images/index.html.erb +16 -13
  167. data/vendor/extensions/theme_default/app/views/admin/orders/_add_product.html.erb +1 -1
  168. data/vendor/extensions/theme_default/app/views/admin/orders/_form.html.erb +7 -0
  169. data/vendor/extensions/theme_default/app/views/admin/orders/index.html.erb +5 -5
  170. data/vendor/extensions/theme_default/app/views/admin/payment_methods/_form.html.erb +12 -6
  171. data/vendor/extensions/theme_default/app/views/admin/payment_methods/index.html.erb +22 -11
  172. data/vendor/extensions/theme_default/app/views/admin/product_groups/update.js.erb +2 -2
  173. data/vendor/extensions/theme_default/app/views/admin/products/_form.html.erb +6 -4
  174. data/vendor/extensions/theme_default/app/views/admin/shared/_address_form.html.erb +64 -55
  175. data/vendor/extensions/theme_default/app/views/admin/shared/_configuration_menu.html.erb +1 -1
  176. data/vendor/extensions/theme_default/app/views/admin/shared/_order_tabs.html.erb +11 -3
  177. data/vendor/extensions/theme_default/app/views/admin/shared/_product_tabs.html.erb +1 -1
  178. data/vendor/extensions/theme_default/app/views/admin/shipments/_form.html.erb +32 -29
  179. data/vendor/extensions/theme_default/app/views/admin/shipments/index.html.erb +2 -1
  180. data/vendor/extensions/theme_default/app/views/admin/tax_categories/_form.html.erb +6 -3
  181. data/vendor/extensions/theme_default/app/views/admin/tax_categories/index.html.erb +4 -2
  182. data/vendor/extensions/theme_default/app/views/admin/taxonomies/_taxon.html.erb +2 -2
  183. data/vendor/extensions/theme_default/app/views/admin/taxons/_form.html.erb +11 -1
  184. data/vendor/extensions/theme_default/app/views/admin/taxons/edit.html.erb +2 -2
  185. data/vendor/extensions/theme_default/app/views/admin/users/_form.html.erb +1 -1
  186. data/vendor/extensions/theme_default/app/views/admin/variants/_form.html.erb +4 -2
  187. data/vendor/extensions/theme_default/app/views/checkouts/_confirm.html.erb +1 -1
  188. data/vendor/extensions/theme_default/app/views/checkouts/_delivery.html.erb +1 -1
  189. data/vendor/extensions/theme_default/app/views/checkouts/_summary.html.erb +6 -6
  190. data/vendor/extensions/theme_default/app/views/checkouts/edit.html.erb +3 -3
  191. data/vendor/extensions/theme_default/app/views/layouts/admin.html.erb +7 -5
  192. data/vendor/extensions/theme_default/app/views/layouts/spree_application.html.erb +8 -4
  193. data/vendor/extensions/theme_default/app/views/orders/_line_item.html.erb +1 -1
  194. data/vendor/extensions/theme_default/app/views/products/index.html.erb +0 -1
  195. data/vendor/extensions/theme_default/app/views/shared/_footer.html.erb +4 -2
  196. data/vendor/extensions/theme_default/app/views/shared/_products.html.erb +3 -1
  197. data/vendor/extensions/theme_default/app/views/shared/_user_form.html.erb +1 -1
  198. data/vendor/extensions/theme_default/public/images/admin/bg/spree_50.png +0 -0
  199. data/vendor/extensions/theme_default/public/images/tile-header.png +0 -0
  200. data/vendor/extensions/theme_default/public/images/tile-slider.png +0 -0
  201. data/vendor/extensions/theme_default/public/javascripts/admin/checkouts/edit.js +50 -0
  202. data/vendor/extensions/theme_default/public/javascripts/taxonomy.js +2 -2
  203. data/vendor/extensions/theme_default/public/stylesheets/admin/admin-tables.css +8 -0
  204. data/vendor/extensions/theme_default/public/stylesheets/admin/admin.css +31 -16
  205. data/vendor/extensions/theme_default/public/stylesheets/screen.css +16 -3
  206. data/vendor/plugins/attribute_fu/{tasks → lib/tasks}/attribute_fu_tasks.rake +0 -0
  207. data/vendor/plugins/enumerable_constants/{tasks → lib/tasks}/enumerable_constants_tasks.rake +0 -0
  208. data/vendor/plugins/find_by_param/lib/find_by_param.rb +9 -5
  209. data/vendor/plugins/find_by_param/{tasks → lib/tasks}/find_by_param_tasks.rake +0 -0
  210. data/vendor/plugins/jrails/{tasks → lib/tasks}/jrails.rake +0 -0
  211. data/vendor/plugins/jrails_auto_complete/{tasks → lib/tasks}/jrails_auto_complete_tasks.rake +0 -0
  212. data/vendor/plugins/mail_queue/{tasks → lib/tasks}/mailer_queue_tasks.rake +0 -0
  213. data/vendor/plugins/open_id_authentication/{tasks → lib/tasks}/open_id_authentication_tasks.rake +0 -0
  214. data/vendor/plugins/resource_controller/lib/resource_controller/helpers/internal.rb +2 -2
  215. data/vendor/plugins/ssl_requirement/lib/ssl_requirement.rb +7 -7
  216. data/vendor/plugins/unobtrusive_date_picker/{tasks → lib/tasks}/datepicker_tasks.rake +0 -0
  217. metadata +82 -342
  218. data/app/helpers/admin/adjustments_helper.rb +0 -2
  219. data/app/helpers/admin/checkouts_helper.rb +0 -2
  220. data/app/helpers/admin/line_items_helper.rb +0 -2
  221. data/app/helpers/admin/properties_helper.rb +0 -9
  222. data/app/helpers/admin/prototypes_helper.rb +0 -18
  223. data/app/helpers/admin/return_authorizations_helper.rb +0 -2
  224. data/config/locales/cs-CZ.yml +0 -924
  225. data/config/locales/cs-CZ_rails.yml +0 -202
  226. data/config/locales/da.yml +0 -924
  227. data/config/locales/da_rails.yml +0 -197
  228. data/config/locales/de-CH.yml +0 -924
  229. data/config/locales/de-CH_rails.yml +0 -142
  230. data/config/locales/de.yml +0 -924
  231. data/config/locales/de_rails.yml +0 -140
  232. data/config/locales/en-AU.yml +0 -924
  233. data/config/locales/en-AU_rails.yml +0 -202
  234. data/config/locales/en-GB.yml +0 -924
  235. data/config/locales/en-GB_rails.yml +0 -196
  236. data/config/locales/en-US_rails.yml +0 -200
  237. data/config/locales/es.yml +0 -924
  238. data/config/locales/es_rails.yml +0 -173
  239. data/config/locales/fi.yml +0 -924
  240. data/config/locales/fi_rails.yml +0 -143
  241. data/config/locales/fr-FR.yml +0 -924
  242. data/config/locales/fr-FR_rails.yml +0 -123
  243. data/config/locales/il.yml +0 -924
  244. data/config/locales/il_rails.yml +0 -103
  245. data/config/locales/it.yml +0 -924
  246. data/config/locales/it_rails.yml +0 -146
  247. data/config/locales/jp.yml +0 -924
  248. data/config/locales/jp_rails.yml +0 -135
  249. data/config/locales/mx.yml +0 -924
  250. data/config/locales/mx_rails.yml +0 -181
  251. data/config/locales/nb-NO.yml +0 -924
  252. data/config/locales/nb-NO_rails.yml +0 -105
  253. data/config/locales/nl-BE.yml +0 -924
  254. data/config/locales/nl-BE_rails.yml +0 -155
  255. data/config/locales/nl-NL.yml +0 -924
  256. data/config/locales/nl-NL_rails.yml +0 -172
  257. data/config/locales/pl.yml +0 -924
  258. data/config/locales/pl_rails.yml +0 -118
  259. data/config/locales/pt-BR.yml +0 -924
  260. data/config/locales/pt-BR_rails.yml +0 -138
  261. data/config/locales/pt-PT.yml +0 -924
  262. data/config/locales/pt-PT_rails.yml +0 -133
  263. data/config/locales/ru-RU.yml +0 -924
  264. data/config/locales/ru-RU_rails.yml +0 -206
  265. data/config/locales/th.yml +0 -924
  266. data/config/locales/th_rails.yml +0 -195
  267. data/config/locales/vn.yml +0 -924
  268. data/config/locales/vn_rails.yml +0 -202
  269. data/lib/tasks/translation.rake +0 -102
  270. data/vendor/extensions/localization/README.rdoc +0 -5
  271. data/vendor/extensions/localization/Rakefile +0 -120
  272. data/vendor/extensions/localization/app/controllers/admin/localization_controller.rb +0 -2
  273. data/vendor/extensions/localization/app/helpers/locale_helper.rb +0 -2
  274. data/vendor/extensions/localization/app/helpers/localization_helper.rb +0 -2
  275. data/vendor/extensions/localization/app/views/shared/_language_bar.html.erb +0 -8
  276. data/vendor/extensions/localization/config/routes.rb +0 -4
  277. data/vendor/extensions/localization/lib/localization/user_preferences.rb +0 -9
  278. data/vendor/extensions/localization/lib/tasks/localization_extension_tasks.rake +0 -17
  279. data/vendor/extensions/localization/localization_extension.rb +0 -21
  280. data/vendor/extensions/localization/public/images/flags/ad.png +0 -0
  281. data/vendor/extensions/localization/public/images/flags/ae.png +0 -0
  282. data/vendor/extensions/localization/public/images/flags/af.png +0 -0
  283. data/vendor/extensions/localization/public/images/flags/ag.png +0 -0
  284. data/vendor/extensions/localization/public/images/flags/ai.png +0 -0
  285. data/vendor/extensions/localization/public/images/flags/al.png +0 -0
  286. data/vendor/extensions/localization/public/images/flags/am.png +0 -0
  287. data/vendor/extensions/localization/public/images/flags/an.png +0 -0
  288. data/vendor/extensions/localization/public/images/flags/ao.png +0 -0
  289. data/vendor/extensions/localization/public/images/flags/ar.png +0 -0
  290. data/vendor/extensions/localization/public/images/flags/as.png +0 -0
  291. data/vendor/extensions/localization/public/images/flags/at.png +0 -0
  292. data/vendor/extensions/localization/public/images/flags/au.png +0 -0
  293. data/vendor/extensions/localization/public/images/flags/aw.png +0 -0
  294. data/vendor/extensions/localization/public/images/flags/ax.png +0 -0
  295. data/vendor/extensions/localization/public/images/flags/az.png +0 -0
  296. data/vendor/extensions/localization/public/images/flags/ba.png +0 -0
  297. data/vendor/extensions/localization/public/images/flags/bb.png +0 -0
  298. data/vendor/extensions/localization/public/images/flags/bd.png +0 -0
  299. data/vendor/extensions/localization/public/images/flags/be.png +0 -0
  300. data/vendor/extensions/localization/public/images/flags/bf.png +0 -0
  301. data/vendor/extensions/localization/public/images/flags/bg.png +0 -0
  302. data/vendor/extensions/localization/public/images/flags/bh.png +0 -0
  303. data/vendor/extensions/localization/public/images/flags/bi.png +0 -0
  304. data/vendor/extensions/localization/public/images/flags/bj.png +0 -0
  305. data/vendor/extensions/localization/public/images/flags/bm.png +0 -0
  306. data/vendor/extensions/localization/public/images/flags/bn.png +0 -0
  307. data/vendor/extensions/localization/public/images/flags/bo.png +0 -0
  308. data/vendor/extensions/localization/public/images/flags/br.png +0 -0
  309. data/vendor/extensions/localization/public/images/flags/bs.png +0 -0
  310. data/vendor/extensions/localization/public/images/flags/bt.png +0 -0
  311. data/vendor/extensions/localization/public/images/flags/bv.png +0 -0
  312. data/vendor/extensions/localization/public/images/flags/bw.png +0 -0
  313. data/vendor/extensions/localization/public/images/flags/by.png +0 -0
  314. data/vendor/extensions/localization/public/images/flags/bz.png +0 -0
  315. data/vendor/extensions/localization/public/images/flags/ca.png +0 -0
  316. data/vendor/extensions/localization/public/images/flags/catalonia.png +0 -0
  317. data/vendor/extensions/localization/public/images/flags/cc.png +0 -0
  318. data/vendor/extensions/localization/public/images/flags/cd.png +0 -0
  319. data/vendor/extensions/localization/public/images/flags/cf.png +0 -0
  320. data/vendor/extensions/localization/public/images/flags/cg.png +0 -0
  321. data/vendor/extensions/localization/public/images/flags/ch.png +0 -0
  322. data/vendor/extensions/localization/public/images/flags/ci.png +0 -0
  323. data/vendor/extensions/localization/public/images/flags/ck.png +0 -0
  324. data/vendor/extensions/localization/public/images/flags/cl.png +0 -0
  325. data/vendor/extensions/localization/public/images/flags/cm.png +0 -0
  326. data/vendor/extensions/localization/public/images/flags/cn.png +0 -0
  327. data/vendor/extensions/localization/public/images/flags/co.png +0 -0
  328. data/vendor/extensions/localization/public/images/flags/cr.png +0 -0
  329. data/vendor/extensions/localization/public/images/flags/cs.png +0 -0
  330. data/vendor/extensions/localization/public/images/flags/cu.png +0 -0
  331. data/vendor/extensions/localization/public/images/flags/cv.png +0 -0
  332. data/vendor/extensions/localization/public/images/flags/cx.png +0 -0
  333. data/vendor/extensions/localization/public/images/flags/cy.png +0 -0
  334. data/vendor/extensions/localization/public/images/flags/cz.png +0 -0
  335. data/vendor/extensions/localization/public/images/flags/da.png +0 -0
  336. data/vendor/extensions/localization/public/images/flags/de.png +0 -0
  337. data/vendor/extensions/localization/public/images/flags/de_CH.png +0 -0
  338. data/vendor/extensions/localization/public/images/flags/dj.png +0 -0
  339. data/vendor/extensions/localization/public/images/flags/dm.png +0 -0
  340. data/vendor/extensions/localization/public/images/flags/do.png +0 -0
  341. data/vendor/extensions/localization/public/images/flags/dz.png +0 -0
  342. data/vendor/extensions/localization/public/images/flags/ec.png +0 -0
  343. data/vendor/extensions/localization/public/images/flags/ee.png +0 -0
  344. data/vendor/extensions/localization/public/images/flags/eg.png +0 -0
  345. data/vendor/extensions/localization/public/images/flags/eh.png +0 -0
  346. data/vendor/extensions/localization/public/images/flags/england.png +0 -0
  347. data/vendor/extensions/localization/public/images/flags/er.png +0 -0
  348. data/vendor/extensions/localization/public/images/flags/es.png +0 -0
  349. data/vendor/extensions/localization/public/images/flags/et.png +0 -0
  350. data/vendor/extensions/localization/public/images/flags/europeanunion.png +0 -0
  351. data/vendor/extensions/localization/public/images/flags/fam.png +0 -0
  352. data/vendor/extensions/localization/public/images/flags/fi.png +0 -0
  353. data/vendor/extensions/localization/public/images/flags/fj.png +0 -0
  354. data/vendor/extensions/localization/public/images/flags/fk.png +0 -0
  355. data/vendor/extensions/localization/public/images/flags/fm.png +0 -0
  356. data/vendor/extensions/localization/public/images/flags/fo.png +0 -0
  357. data/vendor/extensions/localization/public/images/flags/fr.png +0 -0
  358. data/vendor/extensions/localization/public/images/flags/ga.png +0 -0
  359. data/vendor/extensions/localization/public/images/flags/gb.png +0 -0
  360. data/vendor/extensions/localization/public/images/flags/gd.png +0 -0
  361. data/vendor/extensions/localization/public/images/flags/ge.png +0 -0
  362. data/vendor/extensions/localization/public/images/flags/gf.png +0 -0
  363. data/vendor/extensions/localization/public/images/flags/gh.png +0 -0
  364. data/vendor/extensions/localization/public/images/flags/gi.png +0 -0
  365. data/vendor/extensions/localization/public/images/flags/gl.png +0 -0
  366. data/vendor/extensions/localization/public/images/flags/gm.png +0 -0
  367. data/vendor/extensions/localization/public/images/flags/gn.png +0 -0
  368. data/vendor/extensions/localization/public/images/flags/gp.png +0 -0
  369. data/vendor/extensions/localization/public/images/flags/gq.png +0 -0
  370. data/vendor/extensions/localization/public/images/flags/gr.png +0 -0
  371. data/vendor/extensions/localization/public/images/flags/gs.png +0 -0
  372. data/vendor/extensions/localization/public/images/flags/gt.png +0 -0
  373. data/vendor/extensions/localization/public/images/flags/gu.png +0 -0
  374. data/vendor/extensions/localization/public/images/flags/gw.png +0 -0
  375. data/vendor/extensions/localization/public/images/flags/gy.png +0 -0
  376. data/vendor/extensions/localization/public/images/flags/hk.png +0 -0
  377. data/vendor/extensions/localization/public/images/flags/hm.png +0 -0
  378. data/vendor/extensions/localization/public/images/flags/hn.png +0 -0
  379. data/vendor/extensions/localization/public/images/flags/hr.png +0 -0
  380. data/vendor/extensions/localization/public/images/flags/ht.png +0 -0
  381. data/vendor/extensions/localization/public/images/flags/hu.png +0 -0
  382. data/vendor/extensions/localization/public/images/flags/id.png +0 -0
  383. data/vendor/extensions/localization/public/images/flags/ie.png +0 -0
  384. data/vendor/extensions/localization/public/images/flags/il.png +0 -0
  385. data/vendor/extensions/localization/public/images/flags/in.png +0 -0
  386. data/vendor/extensions/localization/public/images/flags/io.png +0 -0
  387. data/vendor/extensions/localization/public/images/flags/iq.png +0 -0
  388. data/vendor/extensions/localization/public/images/flags/ir.png +0 -0
  389. data/vendor/extensions/localization/public/images/flags/is.png +0 -0
  390. data/vendor/extensions/localization/public/images/flags/it.png +0 -0
  391. data/vendor/extensions/localization/public/images/flags/jm.png +0 -0
  392. data/vendor/extensions/localization/public/images/flags/jo.png +0 -0
  393. data/vendor/extensions/localization/public/images/flags/jp.png +0 -0
  394. data/vendor/extensions/localization/public/images/flags/ke.png +0 -0
  395. data/vendor/extensions/localization/public/images/flags/kg.png +0 -0
  396. data/vendor/extensions/localization/public/images/flags/kh.png +0 -0
  397. data/vendor/extensions/localization/public/images/flags/ki.png +0 -0
  398. data/vendor/extensions/localization/public/images/flags/km.png +0 -0
  399. data/vendor/extensions/localization/public/images/flags/kn.png +0 -0
  400. data/vendor/extensions/localization/public/images/flags/kp.png +0 -0
  401. data/vendor/extensions/localization/public/images/flags/kr.png +0 -0
  402. data/vendor/extensions/localization/public/images/flags/kw.png +0 -0
  403. data/vendor/extensions/localization/public/images/flags/ky.png +0 -0
  404. data/vendor/extensions/localization/public/images/flags/kz.png +0 -0
  405. data/vendor/extensions/localization/public/images/flags/la.png +0 -0
  406. data/vendor/extensions/localization/public/images/flags/lb.png +0 -0
  407. data/vendor/extensions/localization/public/images/flags/lc.png +0 -0
  408. data/vendor/extensions/localization/public/images/flags/li.png +0 -0
  409. data/vendor/extensions/localization/public/images/flags/lk.png +0 -0
  410. data/vendor/extensions/localization/public/images/flags/lr.png +0 -0
  411. data/vendor/extensions/localization/public/images/flags/ls.png +0 -0
  412. data/vendor/extensions/localization/public/images/flags/lt.png +0 -0
  413. data/vendor/extensions/localization/public/images/flags/lu.png +0 -0
  414. data/vendor/extensions/localization/public/images/flags/lv.png +0 -0
  415. data/vendor/extensions/localization/public/images/flags/ly.png +0 -0
  416. data/vendor/extensions/localization/public/images/flags/ma.png +0 -0
  417. data/vendor/extensions/localization/public/images/flags/mc.png +0 -0
  418. data/vendor/extensions/localization/public/images/flags/md.png +0 -0
  419. data/vendor/extensions/localization/public/images/flags/me.png +0 -0
  420. data/vendor/extensions/localization/public/images/flags/mg.png +0 -0
  421. data/vendor/extensions/localization/public/images/flags/mh.png +0 -0
  422. data/vendor/extensions/localization/public/images/flags/mk.png +0 -0
  423. data/vendor/extensions/localization/public/images/flags/ml.png +0 -0
  424. data/vendor/extensions/localization/public/images/flags/mm.png +0 -0
  425. data/vendor/extensions/localization/public/images/flags/mn.png +0 -0
  426. data/vendor/extensions/localization/public/images/flags/mo.png +0 -0
  427. data/vendor/extensions/localization/public/images/flags/mp.png +0 -0
  428. data/vendor/extensions/localization/public/images/flags/mq.png +0 -0
  429. data/vendor/extensions/localization/public/images/flags/mr.png +0 -0
  430. data/vendor/extensions/localization/public/images/flags/ms.png +0 -0
  431. data/vendor/extensions/localization/public/images/flags/mt.png +0 -0
  432. data/vendor/extensions/localization/public/images/flags/mu.png +0 -0
  433. data/vendor/extensions/localization/public/images/flags/mv.png +0 -0
  434. data/vendor/extensions/localization/public/images/flags/mw.png +0 -0
  435. data/vendor/extensions/localization/public/images/flags/mx.png +0 -0
  436. data/vendor/extensions/localization/public/images/flags/my.png +0 -0
  437. data/vendor/extensions/localization/public/images/flags/mz.png +0 -0
  438. data/vendor/extensions/localization/public/images/flags/na.png +0 -0
  439. data/vendor/extensions/localization/public/images/flags/nc.png +0 -0
  440. data/vendor/extensions/localization/public/images/flags/ne.png +0 -0
  441. data/vendor/extensions/localization/public/images/flags/nf.png +0 -0
  442. data/vendor/extensions/localization/public/images/flags/ng.png +0 -0
  443. data/vendor/extensions/localization/public/images/flags/ni.png +0 -0
  444. data/vendor/extensions/localization/public/images/flags/nl.png +0 -0
  445. data/vendor/extensions/localization/public/images/flags/no.png +0 -0
  446. data/vendor/extensions/localization/public/images/flags/np.png +0 -0
  447. data/vendor/extensions/localization/public/images/flags/nr.png +0 -0
  448. data/vendor/extensions/localization/public/images/flags/nu.png +0 -0
  449. data/vendor/extensions/localization/public/images/flags/nz.png +0 -0
  450. data/vendor/extensions/localization/public/images/flags/om.png +0 -0
  451. data/vendor/extensions/localization/public/images/flags/pa.png +0 -0
  452. data/vendor/extensions/localization/public/images/flags/pe.png +0 -0
  453. data/vendor/extensions/localization/public/images/flags/pf.png +0 -0
  454. data/vendor/extensions/localization/public/images/flags/pg.png +0 -0
  455. data/vendor/extensions/localization/public/images/flags/ph.png +0 -0
  456. data/vendor/extensions/localization/public/images/flags/pk.png +0 -0
  457. data/vendor/extensions/localization/public/images/flags/pl.png +0 -0
  458. data/vendor/extensions/localization/public/images/flags/pm.png +0 -0
  459. data/vendor/extensions/localization/public/images/flags/pn.png +0 -0
  460. data/vendor/extensions/localization/public/images/flags/pr.png +0 -0
  461. data/vendor/extensions/localization/public/images/flags/ps.png +0 -0
  462. data/vendor/extensions/localization/public/images/flags/pt.png +0 -0
  463. data/vendor/extensions/localization/public/images/flags/pw.png +0 -0
  464. data/vendor/extensions/localization/public/images/flags/py.png +0 -0
  465. data/vendor/extensions/localization/public/images/flags/qa.png +0 -0
  466. data/vendor/extensions/localization/public/images/flags/re.png +0 -0
  467. data/vendor/extensions/localization/public/images/flags/ro.png +0 -0
  468. data/vendor/extensions/localization/public/images/flags/rs.png +0 -0
  469. data/vendor/extensions/localization/public/images/flags/ru.png +0 -0
  470. data/vendor/extensions/localization/public/images/flags/rw.png +0 -0
  471. data/vendor/extensions/localization/public/images/flags/sa.png +0 -0
  472. data/vendor/extensions/localization/public/images/flags/sb.png +0 -0
  473. data/vendor/extensions/localization/public/images/flags/sc.png +0 -0
  474. data/vendor/extensions/localization/public/images/flags/scotland.png +0 -0
  475. data/vendor/extensions/localization/public/images/flags/sd.png +0 -0
  476. data/vendor/extensions/localization/public/images/flags/se.png +0 -0
  477. data/vendor/extensions/localization/public/images/flags/sg.png +0 -0
  478. data/vendor/extensions/localization/public/images/flags/sh.png +0 -0
  479. data/vendor/extensions/localization/public/images/flags/si.png +0 -0
  480. data/vendor/extensions/localization/public/images/flags/sj.png +0 -0
  481. data/vendor/extensions/localization/public/images/flags/sk.png +0 -0
  482. data/vendor/extensions/localization/public/images/flags/sl.png +0 -0
  483. data/vendor/extensions/localization/public/images/flags/sm.png +0 -0
  484. data/vendor/extensions/localization/public/images/flags/sn.png +0 -0
  485. data/vendor/extensions/localization/public/images/flags/so.png +0 -0
  486. data/vendor/extensions/localization/public/images/flags/sr.png +0 -0
  487. data/vendor/extensions/localization/public/images/flags/st.png +0 -0
  488. data/vendor/extensions/localization/public/images/flags/sv.png +0 -0
  489. data/vendor/extensions/localization/public/images/flags/sy.png +0 -0
  490. data/vendor/extensions/localization/public/images/flags/sz.png +0 -0
  491. data/vendor/extensions/localization/public/images/flags/tc.png +0 -0
  492. data/vendor/extensions/localization/public/images/flags/td.png +0 -0
  493. data/vendor/extensions/localization/public/images/flags/tf.png +0 -0
  494. data/vendor/extensions/localization/public/images/flags/tg.png +0 -0
  495. data/vendor/extensions/localization/public/images/flags/th.png +0 -0
  496. data/vendor/extensions/localization/public/images/flags/tj.png +0 -0
  497. data/vendor/extensions/localization/public/images/flags/tk.png +0 -0
  498. data/vendor/extensions/localization/public/images/flags/tl.png +0 -0
  499. data/vendor/extensions/localization/public/images/flags/tm.png +0 -0
  500. data/vendor/extensions/localization/public/images/flags/tn.png +0 -0
  501. data/vendor/extensions/localization/public/images/flags/to.png +0 -0
  502. data/vendor/extensions/localization/public/images/flags/tr.png +0 -0
  503. data/vendor/extensions/localization/public/images/flags/tt.png +0 -0
  504. data/vendor/extensions/localization/public/images/flags/tv.png +0 -0
  505. data/vendor/extensions/localization/public/images/flags/tw.png +0 -0
  506. data/vendor/extensions/localization/public/images/flags/tz.png +0 -0
  507. data/vendor/extensions/localization/public/images/flags/ua.png +0 -0
  508. data/vendor/extensions/localization/public/images/flags/ug.png +0 -0
  509. data/vendor/extensions/localization/public/images/flags/um.png +0 -0
  510. data/vendor/extensions/localization/public/images/flags/us.png +0 -0
  511. data/vendor/extensions/localization/public/images/flags/uy.png +0 -0
  512. data/vendor/extensions/localization/public/images/flags/uz.png +0 -0
  513. data/vendor/extensions/localization/public/images/flags/va.png +0 -0
  514. data/vendor/extensions/localization/public/images/flags/vc.png +0 -0
  515. data/vendor/extensions/localization/public/images/flags/ve.png +0 -0
  516. data/vendor/extensions/localization/public/images/flags/vg.png +0 -0
  517. data/vendor/extensions/localization/public/images/flags/vi.png +0 -0
  518. data/vendor/extensions/localization/public/images/flags/vn.png +0 -0
  519. data/vendor/extensions/localization/public/images/flags/vu.png +0 -0
  520. data/vendor/extensions/localization/public/images/flags/wales.png +0 -0
  521. data/vendor/extensions/localization/public/images/flags/wf.png +0 -0
  522. data/vendor/extensions/localization/public/images/flags/ws.png +0 -0
  523. data/vendor/extensions/localization/public/images/flags/ye.png +0 -0
  524. data/vendor/extensions/localization/public/images/flags/yt.png +0 -0
  525. data/vendor/extensions/localization/public/images/flags/za.png +0 -0
  526. data/vendor/extensions/localization/public/images/flags/zm.png +0 -0
  527. data/vendor/extensions/localization/public/images/flags/zw.png +0 -0
  528. data/vendor/extensions/localization/spec/controllers/admin/localization_controller_spec.rb +0 -10
  529. data/vendor/extensions/localization/spec/controllers/locale_controller_spec.rb +0 -35
  530. data/vendor/extensions/localization/spec/helpers/locale_helper_spec.rb +0 -5
  531. data/vendor/extensions/localization/spec/helpers/localization_helper_spec.rb +0 -5
  532. data/vendor/extensions/localization/spec/spec.opts +0 -6
  533. data/vendor/extensions/localization/spec/spec_helper.rb +0 -37
  534. data/vendor/extensions/payment_gateway/app/models/gateway/protx.rb +0 -9
  535. data/vendor/extensions/theme_default/app/views/admin/taxonomies/_manage_products.rhtml +0 -31
  536. data/vendor/extensions/theme_default/app/views/admin/taxonomies/_success.rhtml +0 -1
@@ -25,6 +25,10 @@ class LineItemTest < ActiveSupport::TestCase
25
25
  should "return the correct total" do
26
26
  assert_in_delta @line_item.total, 30.00, 0.00001
27
27
  end
28
+
29
+ should "allow line item to be destroyed" do
30
+ assert @line_item.destroy
31
+ end
28
32
  end
29
33
 
30
34
  context "when variant is out of stock" do
@@ -44,6 +48,21 @@ class LineItemTest < ActiveSupport::TestCase
44
48
  assert !@line_item.valid?
45
49
  end
46
50
  end
51
+
52
+ context "when tracking inventory levels" do
53
+ setup { Spree::Config.set(:track_inventory_levels => true) }
54
+ should "not be valid" do
55
+ assert @line_item.valid?
56
+ end
57
+ end
58
+
59
+ context "when not tracking inventory levels" do
60
+ setup { Spree::Config.set(:track_inventory_levels => false) }
61
+ teardown { Spree::Config.set(:track_inventory_levels => true) }
62
+ should "be valid" do
63
+ assert @line_item.valid?
64
+ end
65
+ end
47
66
  end
48
67
 
49
68
  context "when variant is in stock but insufficient to cover the requested quantity" do
@@ -56,7 +75,7 @@ class LineItemTest < ActiveSupport::TestCase
56
75
  setup do
57
76
  Spree::Config.set(:allow_backorders => true)
58
77
  end
59
- should "not be valid" do
78
+ should "be valid" do
60
79
  assert @line_item.valid?
61
80
  end
62
81
  end
@@ -68,6 +87,46 @@ class LineItemTest < ActiveSupport::TestCase
68
87
  assert !@line_item.valid?
69
88
  end
70
89
  end
90
+
91
+ context "when tracking inventory levels" do
92
+ setup { Spree::Config.set(:track_inventory_levels => true) }
93
+ should "not be valid" do
94
+ assert @line_item.valid?
95
+ end
96
+ end
97
+
98
+ context "when not tracking inventory levels" do
99
+ setup { Spree::Config.set(:track_inventory_levels => false) }
100
+ teardown { Spree::Config.set(:track_inventory_levels => true) }
101
+ should "be valid" do
102
+ assert @line_item.valid?
103
+ end
104
+ end
71
105
  end
72
106
 
107
+ context "when order is completely shipped" do
108
+ setup do
109
+ @order = Order.create!
110
+ @line_item = Factory.build(:line_item, :quantity => 2, :price => 15.00, :order => @order)
111
+ @order.line_items << @line_item
112
+ @order.complete!
113
+ @order.pay!
114
+ @order.ship!
115
+ end
116
+
117
+ should "not allow line item to be destroyed" do
118
+ assert !@line_item.destroy
119
+ end
120
+
121
+ context "and line_item quantity is decreased" do
122
+ setup do
123
+ @line_item.quantity = 1
124
+ end
125
+
126
+ should "not be valid" do
127
+ assert !@line_item.valid?
128
+ end
129
+
130
+ end
131
+ end
73
132
  end
@@ -1,82 +1,109 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class OrderStateTest < ActiveSupport::TestCase
4
+ should "be in_progress initially" do
5
+ assert Order.new.in_progress?
6
+ end
4
7
  context "Order" do
5
- setup do
6
- @order = create_complete_order
7
- @order.checkout.update_attribute("state", "complete")
8
-
9
- #only want one line item for ease of testing
10
- @order.line_items.destroy_all
11
- Factory(:line_item, :order => @order, :variant => Factory(:variant), :quantity => 2, :price => 100.00)
12
- @order.reload
13
- @order.save
14
-
15
- @checkout.payment.update_attributes(:payable => @order, :amount => @order.total)
16
-
17
- #make sure totals get recalculated
18
- @order.reload
19
- @order.save
20
- end
21
-
22
- should "be in_progress initally" do
23
- assert @order.in_progress?
8
+ setup do
9
+ @order = Order.create!
10
+ @order.line_items << Factory(:line_item,:order=>@order,:price=>100, :quantity=>5)
11
+ @order.checkout.ship_address = Factory(:address)
12
+ @order.checkout.shipping_method = Factory(:shipping_method)
13
+ @order.update_totals
14
+ @order.payments = [Factory(:payment, :payable=>@order, :amount=>500)]
15
+ @order.save!
24
16
  end
25
17
 
26
18
  context "with a complete checkout and payment" do
27
- setup do
19
+ setup do
28
20
  @order.complete!
29
21
  @order.update_totals!
30
22
  end
31
23
 
32
24
  should_change("@order.state", :from => "in_progress", :to => "new") { @order.state }
33
-
25
+
34
26
  should "allow cancel" do
35
27
  assert @order.can_cancel?
36
28
  end
37
-
29
+
38
30
  should "not allow resume" do
39
31
  assert !@order.can_resume?
40
32
  end
41
-
33
+
42
34
  context "when canceled" do
43
35
  setup do
44
36
  @order.cancel!
45
37
  end
46
-
38
+
47
39
  should_change("@order.state", :from => "new", :to => "canceled") { @order.state }
48
-
40
+ should_change("@order.inventory_units.size", :to => 0) { @order.inventory_units.size }
41
+
42
+ should "change all shipments to pending" do
43
+ assert @order.shipments.all?(&:pending?)
44
+ end
45
+
49
46
  should "allow resume" do
50
47
  assert @order.can_resume?
51
48
  end
52
-
49
+
53
50
  context "and then resumed" do
54
51
  setup do
55
52
  @order.resume!
56
53
  end
57
-
54
+
58
55
  should_change("@order.state", :from => "canceled", :to => "new") { @order.state }
56
+
57
+ should "all shipments still be pending" do
58
+ assert @order.shipments.all?(&:pending?)
59
+ end
59
60
  end
60
61
  end
61
-
62
+
62
63
  context "when paid" do
63
64
  setup do
64
65
  @order.pay!
65
66
  end
66
-
67
+
67
68
  should "allow ship" do
68
69
  assert @order.can_ship?
69
70
  end
70
-
71
+
72
+ context "and canceled" do
73
+ setup do
74
+ @order.cancel!
75
+ end
76
+
77
+ should_change("@order.state", :from => "paid", :to => "canceled") { @order.state }
78
+ should_change("@order.inventory_units.size", :to => 0) { @order.inventory_units.size }
79
+
80
+ should "change all shipments to pending" do
81
+ assert @order.shipments.all?(&:pending?)
82
+ end
83
+
84
+ context "and then resumed" do
85
+ setup do
86
+ @order.resume!
87
+ @order.shipments.reload
88
+ end
89
+
90
+ should_change("@order.state", :from => "canceled", :to => "paid") { @order.state }
91
+
92
+ should "change all shipments to ready_to_ship" do
93
+ assert @order.shipments.all?(&:ready_to_ship?)
94
+ end
95
+ end
96
+ end
97
+
71
98
  context "and all shipments are shipped" do
72
99
  setup do
73
100
  shipment = @order.shipment.reload
74
101
  shipment.ship!
75
102
  @order.reload
76
103
  end
77
-
104
+
78
105
  should_change("@order.state", :from => "paid", :to => "shipped") { @order.state }
79
-
106
+
80
107
  context "and a return_authorization with all inventory_units returned" do
81
108
  setup do
82
109
  ra = ReturnAuthorization.new(:order => @order, :amount => 50.00)
@@ -84,31 +111,31 @@ class OrderStateTest < ActiveSupport::TestCase
84
111
  ra.save!
85
112
  @order.reload
86
113
  end
87
-
114
+
88
115
  should_change("@order.state", :from => "shipped", :to => "awaiting_return") { @order.state }
89
-
116
+
90
117
  context "and received" do
91
118
  setup do
92
119
  @order.return_authorizations.first.receive!
93
120
  @order.reload
94
121
  end
95
-
122
+
96
123
  should_change("@order.state", :from => "awaiting_return", :to => "credit_owed") { @order.state }
97
-
124
+
98
125
  context "and a negative payment is created" do
99
- setup do
126
+ setup do
100
127
  @order.payments.create!(:amount => -50.00, :payment_method => Gateway.current)
101
128
  #@creditcard.credit(50.00, @creditcard.authorization)
102
129
  @order.reload
103
130
  end
104
-
131
+
105
132
  should_change("@order.state", :from => "credit_owed", :to => "returned") { @order.state }
106
133
  end
107
-
134
+
108
135
  end
109
-
136
+
110
137
  end
111
-
138
+
112
139
  context "and a return_authorization with not all inventory_units are returned is created" do
113
140
  setup do
114
141
  ra = ReturnAuthorization.new(:order => @order, :amount => 50.00)
@@ -116,33 +143,33 @@ class OrderStateTest < ActiveSupport::TestCase
116
143
  ra.save!
117
144
  @order.reload
118
145
  end
119
-
146
+
120
147
  should_change("@order.state", :from => "shipped", :to => "awaiting_return") { @order.state }
121
-
148
+
122
149
  context "and received" do
123
150
  setup do
124
151
  @order.return_authorizations.first.receive!
125
152
  @order.reload
126
153
  end
127
-
154
+
128
155
  should_change("@order.state", :from => "awaiting_return", :to => "credit_owed") { @order.state }
129
-
156
+
130
157
  context "and a negative payment is created" do
131
- setup do
158
+ setup do
132
159
  @order.payments.create!(:amount => -50.00, :payment_method => Gateway.current)
133
160
  @order.reload
134
161
  end
135
-
162
+
136
163
  should_change("@order.state", :from => "credit_owed", :to => "shipped") { @order.state }
137
164
  end
138
-
165
+
139
166
  end
140
-
167
+
141
168
  end
142
-
169
+
143
170
  end
144
-
145
-
171
+
172
+
146
173
  context "and an additional charge is added" do
147
174
  setup do
148
175
  @credit = Factory(:charge, :amount => 3.00, :order => @order)
@@ -156,12 +183,12 @@ class OrderStateTest < ActiveSupport::TestCase
156
183
  setup do
157
184
  Factory(:payment, :payable => @order, :amount => 3.00)
158
185
  end
159
-
186
+
160
187
  should_change("@order.state", :from => "balance_due", :to => "paid") { @order.state }
161
188
  end
162
189
 
163
190
  end
164
-
191
+
165
192
 
166
193
  context "and an additional credit is added" do
167
194
  setup do
@@ -173,16 +200,16 @@ class OrderStateTest < ActiveSupport::TestCase
173
200
  should_change("@order.state", :from => "paid", :to => "credit_owed") { @order.state }
174
201
 
175
202
  context "and a negative payment is created" do
176
- setup do
203
+ setup do
177
204
  @order.payments.create!(:amount => -2.00, :payment_method => Gateway.current)
178
- @order.update_totals!
205
+ @order.update_totals!
179
206
  @order.reload
180
- end
207
+ end
181
208
  should_change("@order.state", :from => "credit_owed", :to => "paid") { @order.state }
182
209
  end
183
210
 
184
211
  end
185
-
212
+
186
213
  end
187
214
 
188
215
 
@@ -4,157 +4,178 @@ require 'test_helper'
4
4
  # check seslling units / restocking
5
5
 
6
6
  class OrderTest < ActiveSupport::TestCase
7
- context "create" do
8
- setup { Order.create }
9
- should_change("Checkout.count", :by => 1) { Checkout.count }
10
- end
11
-
12
7
  context "Order" do
13
- setup { create_complete_order }
14
-
15
- should "have line_items" do
16
- assert @order.line_items.length > 0
17
- end
18
-
19
- should "have token generated" do
20
- assert(@order.token, "Token was not generated")
21
- end
22
-
23
- should "remove line items if quantity drops to 0" do
24
- @order.save # wipe any accidental zeros
25
- l = @order.line_items.length
26
- @order.line_items.first.update_attribute(:quantity, 0)
27
- @order.save
28
- assert_equal(l-1, @order.line_items.length)
29
- end
30
-
31
- should "update totals" do
32
- @order.item_total = nil
33
- @order.adjustment_total = nil
34
- @order.total = nil
35
- @order.update_totals
36
- assert_not_nil(@order.item_total)
37
- assert_not_nil(@order.charge_total)
38
- assert_not_nil(@order.total)
39
- end
40
-
41
- context "when line_items change" do
42
- setup do
43
- @first_price = @order.line_items.first.price
44
- @order.line_items.first.update_attribute(:quantity, @order.line_items.first.quantity + 1)
45
- @order.save
8
+ should_have_many :line_items
9
+
10
+ context "#create" do
11
+ setup { @order = Order.create! }
12
+ should_change("Checkout.count", :by => 1) { Checkout.count }
13
+ should "generate token" do
14
+ assert !@order.token.blank?
15
+ end
16
+ should "create default tax charge" do
17
+ assert !@order.tax_charges.empty?
46
18
  end
47
- should_change("item total", :by => @first_price) { @order.item_total }
48
19
  end
49
-
50
- should "create default tax charge" do
51
- assert(@order.tax_charges.first, "Tax charge was not created")
20
+
21
+ context "#update_totals" do
22
+ should "update totals" do
23
+ order = Order.create!
24
+ order.item_total = nil
25
+ order.adjustment_total = nil
26
+ order.total = nil
27
+ order.update_totals
28
+ assert_not_nil order.item_total
29
+ assert_not_nil order.charge_total
30
+ assert_not_nil order.total
31
+ end
52
32
  end
53
-
54
- context "complete" do
55
- setup { @order.complete }
56
- should_change("@order.state", :from => "in_progress", :to => "new") { @order.state }
57
-
58
- should "create shipment" do
59
- assert(@order.shipments.first, "Shipment was not created")
60
- assert_equal 'pending', @order.shipments.first.state
61
- end
62
-
63
- should "update checkout completed_at" do
64
- assert(@order.checkout.completed_at, "Checkout#completed_at was not updated")
33
+
34
+ context "#save" do
35
+ should "remove line items if quantity drops to 0" do
36
+ order = Order.create!
37
+ order.line_items << [Factory(:line_item, :order=>order),Factory(:line_item, :order=>order)]
38
+ assert order.line_items.length == 2
39
+ order.line_items.first.quantity = 0
40
+ order.save!
41
+ assert order.line_items.length == 1
42
+ end
43
+ should "update item_total when line_item quantity changes" do
44
+ order = Order.create!
45
+ line_item = Factory(:line_item, :price=>111, :quantity=>1, :order=>order)
46
+ order.line_items << line_item
47
+ order.save!
48
+ assert_equal 111,order.item_total
49
+
50
+ line_item.quantity = 2
51
+ order.save!
52
+ assert_equal 222, order.item_total
65
53
  end
66
-
67
- should "create inventory units" do
68
- total_quantity = @order.line_items.map(&:quantity).sum
69
- assert_equal total_quantity, @order.inventory_units.count
70
- assert_equal total_quantity, @order.shipment.inventory_units.count
54
+ should "create shipment with pending state" do
55
+ order = Order.new
56
+ assert order.shipments.empty?
57
+ order.save!
58
+ assert !order.shipments.empty?
59
+ assert_equal 'pending', order.shipments.first.state
71
60
  end
72
-
73
61
  context "with empty stock" do
74
- setup do
75
- line_item = @order.line_items.first
76
- num_left = line_item.variant.inventory_units.with_state("on_hand").count
77
- InventoryUnit.destroy_on_hand(line_item.variant, num_left)
78
- end
79
62
  should "be able to save order when allow_backorders is off" do
63
+ order = Order.create!
64
+ line_item = Factory(:line_item,:order => order)
65
+ order.line_items << line_item
66
+ order.complete
67
+ #let's clear our stock..
68
+ on_stock_count = line_item.variant.inventory_units.with_state("on_hand").count
69
+ InventoryUnit.destroy_on_hand(line_item.variant, on_stock_count)
70
+ #.. and turn backorders off
80
71
  Spree::Config.set(:allow_backorders => false)
81
- assert(@order.save == true, "Completed order could not be saved")
72
+ assert order.save!
82
73
  Spree::Config.set(:allow_backorders => true)
83
74
  end
84
75
  end
85
76
  end
86
-
87
- context "pay!" do
77
+ context "#complete" do
78
+ should "change state from in_progress to new" do
79
+ order = Order.create!
80
+ assert_equal "in_progress", order.state
81
+ order.complete!
82
+ assert_equal "new", order.state
83
+ end
84
+ should "update checkout completed_at" do
85
+ order = Order.create!
86
+ assert order.completed_at.nil?
87
+ order.complete!
88
+ assert !order.completed_at.nil?
89
+ assert !order.checkout.completed_at.nil?
90
+ end
91
+ should "create inventory units" do
92
+ order = Order.create!
93
+ order.line_items <<
94
+ [Factory.build(:line_item, :quantity=>1, :order=>order),
95
+ Factory.build(:line_item, :quantity=>2, :order=>order)]
96
+ assert_equal 0, order.inventory_units.count
97
+ assert_equal 0, order.shipment.inventory_units.count
98
+ order.complete!
99
+ assert_equal 3, order.inventory_units.count
100
+ assert_equal 3, order.shipment.inventory_units.count
101
+ end
102
+ end
103
+ context "#pay!" do
88
104
  should "make all shipments ready" do
89
- @order.complete!
90
- @order.pay!
91
- assert @order.shipments.all?(&:ready_to_ship?), "shipments didn't all have state ready_to_ship"
105
+ order = Order.create!
106
+ order.line_items << Factory(:line_item, :order=>order)
107
+ order.complete!
108
+ assert !order.shipments.empty?
109
+ assert !order.shipments.all?(&:ready_to_ship?)
110
+ order.pay!
111
+ assert order.shipments.all?(&:ready_to_ship?)
92
112
  end
93
113
  end
94
-
95
- context "ship!" do
114
+ context "#ship!" do
96
115
  should "make all shipments shipped" do
97
- @order.update_attribute(:state, 'paid')
98
- @order.ship!
99
- assert @order.shipments.all?(&:shipped?), "shipments didn't all have state shipped"
116
+ order = Order.create!
117
+ order.line_items << Factory(:line_item, :order=>order)
118
+ order.complete!
119
+ order.pay!
120
+ assert !order.shipments.empty?
121
+ assert !order.shipments.all?(&:shipped?)
122
+ order.ship!
123
+ assert order.shipments.all?(&:shipped?)
100
124
  end
101
125
  end
102
-
103
- context "under_paid!" do
126
+ context "#under_paid!" do
104
127
  should "make all shipments pending" do
105
- @order.complete!
106
- @order.pay!
107
- @order.under_paid!
108
- assert @order.shipments.all?(&:pending?), "shipments didn't all have state pending"
109
- end
110
- end
111
-
112
- end
113
-
114
- context "outstanding_balance and outstanding_credit" do
115
- setup do
116
- @order = Factory(:order)
117
- Factory(:line_item, :variant => Factory(:variant, :price => 5.00), :order => @order, :quantity => 1, :price => 5.00)
118
- @order.reload
119
- @order.save
120
- Factory(:payment, :payable => @order, :amount => 2.50)
121
- @order.reload
122
- @order.save
123
- end
124
-
125
- context "with outstanding balance of 2.50" do
126
- should "be have outstanding_balance of 2.50" do
127
- assert_equal 2.50, @order.outstanding_balance.to_f
128
- end
129
- should "be have outstanding_credit of 0.00" do
130
- assert_equal 0.00, @order.outstanding_credit.to_f
128
+ order = Order.create!
129
+ order.line_items << Factory(:line_item, :order=>order)
130
+ order.complete!
131
+ order.pay!
132
+ assert !order.shipments.empty?
133
+ assert !order.shipments.all?(&:pending?)
134
+ order.under_paid!
135
+ assert order.shipments.all?(&:pending?)
131
136
  end
132
137
  end
133
-
134
- context "with outstanding credit of 2.50" do
138
+ context "" do
135
139
  setup do
136
- @order.payments.first.update_attribute(:amount, 8.00)
137
- end
138
- should "be have outstanding_balance of 0.00" do
139
- assert_equal 0.00, @order.outstanding_balance.to_f
140
- end
141
- should "be have outstanding_credit of 2.50" do
142
- assert_equal 3.00, @order.outstanding_credit.to_f
140
+ @order = Factory(:line_item, :quantity => 1, :price => 5.00).order
141
+ @order.reload
142
+ @order.save
143
+ Factory(:payment, :payable => @order, :amount => 2.50)
144
+ @order.reload
143
145
  end
144
- end
145
146
 
146
- context "with no outstanding balance or credit" do
147
- setup do
148
- @order.payments.first.update_attribute(:amount, 5.00)
147
+ context "with partial payment" do
148
+ should "have #outstanding_balance" do
149
+ assert_equal 2.50, @order.outstanding_balance.to_f
150
+ end
151
+ should "have no #outstanding_credit" do
152
+ assert_equal 0.00, @order.outstanding_credit.to_f
153
+ end
149
154
  end
150
- should "be have outstanding_balance of 0.00" do
151
- assert_equal 0.00, @order.outstanding_balance.to_f
155
+
156
+ context "with extra payment" do
157
+ setup do
158
+ @order.payments.first.update_attribute(:amount, 8.00)
159
+ end
160
+ should "have no #outstanding_balance" do
161
+ assert_equal 0.00, @order.outstanding_balance.to_f
162
+ end
163
+ should "have #outstanding_credit" do
164
+ assert_equal 3.00, @order.outstanding_credit.to_f
165
+ end
152
166
  end
153
- should "be have outstanding_credit of 0.00" do
154
- assert_equal 0.00, @order.outstanding_credit.to_f
167
+
168
+ context "with exact (full) payment" do
169
+ setup do
170
+ @order.payments.first.update_attribute(:amount, 5.00)
171
+ end
172
+ should "have no #outstanding_balance" do
173
+ assert_equal 0.00, @order.outstanding_balance.to_f
174
+ end
175
+ should "have no #outstanding_credit" do
176
+ assert_equal 0.00, @order.outstanding_credit.to_f
177
+ end
155
178
  end
156
179
  end
157
-
158
180
  end
159
-
160
181
  end