nimbleshop_core 0.0.1.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. data/README.md +13 -0
  2. data/Rakefile +15 -0
  3. data/app/assets/images/engines/nimbleshop_authorizedotnet/american_express.png +0 -0
  4. data/app/assets/images/engines/nimbleshop_authorizedotnet/authorize_net_big.png +0 -0
  5. data/app/assets/images/engines/nimbleshop_authorizedotnet/authorizedotnet_big.png +0 -0
  6. data/app/assets/images/engines/nimbleshop_authorizedotnet/discover.png +0 -0
  7. data/app/assets/images/engines/nimbleshop_authorizedotnet/mastercard.png +0 -0
  8. data/app/assets/images/engines/nimbleshop_authorizedotnet/visa.png +0 -0
  9. data/app/assets/images/engines/nimbleshop_cod/cod_small.png +0 -0
  10. data/app/assets/images/engines/nimbleshop_paypalwp/paypal_big.png +0 -0
  11. data/app/assets/images/engines/nimbleshop_paypalwp/paypal_small.png +0 -0
  12. data/app/assets/images/engines/nimbleshop_splitable/splitable.png +0 -0
  13. data/app/assets/images/engines/nimbleshop_splitable/splitable_big.png +0 -0
  14. data/app/assets/images/engines/nimbleshop_splitable/splitable_small.png +0 -0
  15. data/app/assets/javascripts/admin/products/edit.js.coffee +19 -0
  16. data/app/assets/javascripts/admin/shipping_methods/edit.js.coffee +6 -0
  17. data/app/assets/javascripts/admin.js +25 -0
  18. data/app/assets/javascripts/fadeout_success.js.coffee +2 -0
  19. data/app/assets/javascripts/payment_method.js.coffee +19 -0
  20. data/app/assets/javascripts/product-group-condition.js.coffee +33 -0
  21. data/app/assets/javascripts/remove_deletion_of_product_pictures.js.coffee +5 -0
  22. data/app/assets/javascripts/shipit.js.coffee +10 -0
  23. data/app/assets/javascripts/twitter_bootstrap.js.coffee +4 -0
  24. data/app/assets/stylesheets/admin.css +9 -0
  25. data/app/assets/stylesheets/admin_bootstrap_and_overrides.css.less +38 -0
  26. data/app/assets/stylesheets/admin_custom.css +104 -0
  27. data/app/assets/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  28. data/app/assets/twitter/bootstrap/glyphicons-halflings.png +0 -0
  29. data/app/controllers/admin/custom_fields_controller.rb +56 -0
  30. data/app/controllers/admin/link_groups_controller.rb +76 -0
  31. data/app/controllers/admin/main_controller.rb +9 -0
  32. data/app/controllers/admin/navigations_controller.rb +49 -0
  33. data/app/controllers/admin/orders_controller.rb +47 -0
  34. data/app/controllers/admin/payment_methods_controller.rb +26 -0
  35. data/app/controllers/admin/product_groups_controller.rb +70 -0
  36. data/app/controllers/admin/products_controller.rb +71 -0
  37. data/app/controllers/admin/shipments_controller.rb +19 -0
  38. data/app/controllers/admin/shipping_methods_controller.rb +93 -0
  39. data/app/controllers/admin/shipping_zones_controller.rb +62 -0
  40. data/app/controllers/admin/shops_controller.rb +33 -0
  41. data/app/controllers/admin_controller.rb +38 -0
  42. data/app/helpers/admin_helper.rb +83 -0
  43. data/app/helpers/nimbleshop_helper.rb +43 -0
  44. data/app/helpers/payment_method_helper.rb +52 -0
  45. data/app/mailers/admin_mailer.rb +22 -0
  46. data/app/mailers/mailer.rb +31 -0
  47. data/app/models/address.rb +69 -0
  48. data/app/models/country_shipping_zone.rb +36 -0
  49. data/app/models/creditcard.rb +95 -0
  50. data/app/models/custom_field.rb +8 -0
  51. data/app/models/custom_field_answer/field.rb +101 -0
  52. data/app/models/custom_field_answer.rb +17 -0
  53. data/app/models/line_item.rb +48 -0
  54. data/app/models/link.rb +3 -0
  55. data/app/models/link_group.rb +8 -0
  56. data/app/models/navigation.rb +7 -0
  57. data/app/models/order.rb +158 -0
  58. data/app/models/payment_method.rb +20 -0
  59. data/app/models/payment_transaction.rb +11 -0
  60. data/app/models/picture.rb +30 -0
  61. data/app/models/product.rb +76 -0
  62. data/app/models/product_group.rb +65 -0
  63. data/app/models/product_group_condition.rb +8 -0
  64. data/app/models/regional_shipping_zone.rb +25 -0
  65. data/app/models/shipment.rb +19 -0
  66. data/app/models/shipment_carrier.rb +3 -0
  67. data/app/models/shipping_cost_calculator.rb +9 -0
  68. data/app/models/shipping_method.rb +103 -0
  69. data/app/models/shipping_zone.rb +9 -0
  70. data/app/models/shop.rb +26 -0
  71. data/app/models/tax_calculator.rb +18 -0
  72. data/app/observers/order_observer.rb +53 -0
  73. data/app/uploaders/picture_uploader.rb +65 -0
  74. data/app/views/admin/custom_fields/_form.html.erb +45 -0
  75. data/app/views/admin/custom_fields/edit.html.erb +7 -0
  76. data/app/views/admin/custom_fields/index.html.erb +31 -0
  77. data/app/views/admin/custom_fields/new.html.erb +7 -0
  78. data/app/views/admin/link_groups/_form.html.erb +31 -0
  79. data/app/views/admin/link_groups/_link_group.html.erb +50 -0
  80. data/app/views/admin/link_groups/_link_group_title.html.erb +5 -0
  81. data/app/views/admin/link_groups/edit.html.erb +8 -0
  82. data/app/views/admin/link_groups/index.html.erb +29 -0
  83. data/app/views/admin/link_groups/new.html.erb +9 -0
  84. data/app/views/admin/mailer/new_order_notification.text.erb +31 -0
  85. data/app/views/admin/main/index.html.erb +5 -0
  86. data/app/views/admin/navigations/new.html.erb +29 -0
  87. data/app/views/admin/orders/_line_item.html.erb +11 -0
  88. data/app/views/admin/orders/_line_items.html.erb +39 -0
  89. data/app/views/admin/orders/_payment_info.html.erb +20 -0
  90. data/app/views/admin/orders/_shipping_info.html.erb +40 -0
  91. data/app/views/admin/orders/index.html.erb +33 -0
  92. data/app/views/admin/orders/show.html.erb +40 -0
  93. data/app/views/admin/payment_methods/index.html.erb +6 -0
  94. data/app/views/admin/product_groups/_condition.html.mustache +20 -0
  95. data/app/views/admin/product_groups/_form.html.erb +72 -0
  96. data/app/views/admin/product_groups/edit.html.erb +7 -0
  97. data/app/views/admin/product_groups/index.html.erb +30 -0
  98. data/app/views/admin/product_groups/new.html.erb +7 -0
  99. data/app/views/admin/product_groups/show.html.erb +9 -0
  100. data/app/views/admin/products/_custom_field_answer.html.erb +9 -0
  101. data/app/views/admin/products/_form.html.erb +69 -0
  102. data/app/views/admin/products/_handle_pictures.html.erb +32 -0
  103. data/app/views/admin/products/_pictures.html.erb +33 -0
  104. data/app/views/admin/products/edit.html.erb +26 -0
  105. data/app/views/admin/products/index.html.erb +34 -0
  106. data/app/views/admin/products/new.html.erb +9 -0
  107. data/app/views/admin/shipping_methods/_form.html.erb +58 -0
  108. data/app/views/admin/shipping_methods/_shipping_method.html.erb +31 -0
  109. data/app/views/admin/shipping_methods/edit.html.erb +18 -0
  110. data/app/views/admin/shipping_methods/new.html.erb +7 -0
  111. data/app/views/admin/shipping_zones/_form.html.erb +31 -0
  112. data/app/views/admin/shipping_zones/_shipping_method.html.erb +13 -0
  113. data/app/views/admin/shipping_zones/_shipping_zone.html.erb +47 -0
  114. data/app/views/admin/shipping_zones/edit.html.erb +8 -0
  115. data/app/views/admin/shipping_zones/index.html.erb +16 -0
  116. data/app/views/admin/shipping_zones/new.html.erb +8 -0
  117. data/app/views/admin/shops/edit.html.erb +119 -0
  118. data/app/views/layouts/_admin_footer.html.erb +23 -0
  119. data/app/views/layouts/_admin_sidebar.html.erb +0 -0
  120. data/app/views/layouts/_container.html.erb +33 -0
  121. data/app/views/layouts/_top_nav_bar.html.erb +30 -0
  122. data/app/views/layouts/admin.html.erb +35 -0
  123. data/app/views/layouts/payment_method.html.erb +12 -0
  124. data/app/views/mailer/order_notification_to_buyer.text.erb +31 -0
  125. data/app/views/mailer/shipment_notification_to_buyer.text.erb +34 -0
  126. data/config/initializers/001_settings_application.rb +10 -0
  127. data/config/initializers/002_load_core_extensions.rb +8 -0
  128. data/config/initializers/field_with_error.rb +2 -0
  129. data/config/initializers/strip_and_nullify.rb +13 -0
  130. data/config/initializers/time_formats.rb +1 -0
  131. data/config/locales/en.yml +61 -0
  132. data/config/routes.rb +56 -0
  133. data/db/development.sqlite3 +0 -0
  134. data/db/migrate/20111022144421_create_product_groups.rb +12 -0
  135. data/db/migrate/20111022144426_create_products.rb +16 -0
  136. data/db/migrate/20111022144653_create_orders.rb +21 -0
  137. data/db/migrate/20111022144725_create_line_items.rb +15 -0
  138. data/db/migrate/20111022234951_create_shops.rb +20 -0
  139. data/db/migrate/20111026193227_create_link_groups.rb +12 -0
  140. data/db/migrate/20111026193435_create_navigations.rb +10 -0
  141. data/db/migrate/20111031135810_create_links.rb +10 -0
  142. data/db/migrate/20111106193938_create_custom_fields.rb +10 -0
  143. data/db/migrate/20111106195112_create_custom_field_answers.rb +14 -0
  144. data/db/migrate/20111106201548_create_product_group_conditions.rb +12 -0
  145. data/db/migrate/20111107035350_create_creditcard_transactions.rb +15 -0
  146. data/db/migrate/20111109190754_create_addresses.rb +24 -0
  147. data/db/migrate/20111125173344_create_pictures.rb +16 -0
  148. data/db/migrate/20111201024408_create_shipping_methods.rb +16 -0
  149. data/db/migrate/20111202143154_create_shipping_zones.rb +17 -0
  150. data/db/migrate/20111203034020_create_payment_methods.rb +14 -0
  151. data/db/migrate/20111221190000_create_preferences.rb +14 -0
  152. data/db/migrate/20120105234047_create_shipments.rb +11 -0
  153. data/db/migrate/20120105234553_create_shipment_carriers.rb +11 -0
  154. data/db/migrate/20120606165355_create_delayed_jobs.rb +22 -0
  155. data/db/production.sqlite3 +0 -0
  156. data/db/schema.rb +265 -0
  157. data/db/seeds.rb +1 -0
  158. data/db/test.sqlite3 +0 -0
  159. data/lib/assets/javascripts/loading_state_for_buttons.js.coffee +3 -0
  160. data/lib/assets/javascripts/show_help_on_hover.js.coffee +2 -0
  161. data/lib/assets/javascripts/utils/autoresize.js.coffee +3 -0
  162. data/lib/assets/javascripts/utils/focus.js.coffee +3 -0
  163. data/lib/assets/javascripts/utils/formatNumber.js.coffee +25 -0
  164. data/lib/assets/javascripts/utils/formatPrice.js.coffee +24 -0
  165. data/lib/generators/nimbleshop/app/app_generator.rb +84 -0
  166. data/lib/generators/nimbleshop/app/templates/config/application.yml +61 -0
  167. data/lib/generators/nimbleshop/app/templates/config/initializers/airbrake.rb +3 -0
  168. data/lib/generators/nimbleshop/app/templates/config/initializers/cache_images.rb +4 -0
  169. data/lib/generators/nimbleshop/app/templates/config/initializers/carrierwave.rb +36 -0
  170. data/lib/generators/nimbleshop/app/templates/config/initializers/delayed_job.rb +15 -0
  171. data/lib/generators/nimbleshop/app/templates/config/initializers/setup_email.rb +24 -0
  172. data/lib/nimbleshop/core_ext/activerecord_base.rb +18 -0
  173. data/lib/nimbleshop/core_ext/filelessio.rb +4 -0
  174. data/lib/nimbleshop/core_ext/force_ssl.rb +26 -0
  175. data/lib/nimbleshop/core_ext/mustache_templater_handler.rb +10 -0
  176. data/lib/nimbleshop/engine.rb +23 -0
  177. data/lib/nimbleshop/permalink/builder.rb +46 -0
  178. data/lib/nimbleshop/processor/base.rb +51 -0
  179. data/lib/nimbleshop/processor.rb +3 -0
  180. data/lib/nimbleshop/product_group_search/base_field.rb +19 -0
  181. data/lib/nimbleshop/product_group_search/core_field_strategy.rb +31 -0
  182. data/lib/nimbleshop/product_group_search/custom_field_strategy.rb +39 -0
  183. data/lib/nimbleshop/product_group_search/date_field.rb +16 -0
  184. data/lib/nimbleshop/product_group_search/extension.rb +46 -0
  185. data/lib/nimbleshop/product_group_search/number_field.rb +17 -0
  186. data/lib/nimbleshop/product_group_search/text_field.rb +33 -0
  187. data/lib/nimbleshop/product_group_search.rb +74 -0
  188. data/lib/nimbleshop/sampledata/data.rb +246 -0
  189. data/lib/nimbleshop/sampledata/pictures/product1/pic1.jpg +0 -0
  190. data/lib/nimbleshop/sampledata/pictures/product2/pic1.jpg +0 -0
  191. data/lib/nimbleshop/sampledata/pictures/product2/pic2.jpg +0 -0
  192. data/lib/nimbleshop/sampledata/pictures/product3/pic1.jpg +0 -0
  193. data/lib/nimbleshop/sampledata/pictures/product3/pic2.jpg +0 -0
  194. data/lib/nimbleshop/sampledata/pictures/product3/pic3.jpg +0 -0
  195. data/lib/nimbleshop/sampledata/pictures/product3/pic4.jpg +0 -0
  196. data/lib/nimbleshop/sampledata/pictures/product3/pic5.jpg +0 -0
  197. data/lib/nimbleshop/sampledata/pictures/product4/pic1.jpg +0 -0
  198. data/lib/nimbleshop/sampledata/pictures/product4/pic2.jpg +0 -0
  199. data/lib/nimbleshop/sampledata/pictures/product5/pic1.jpg +0 -0
  200. data/lib/nimbleshop/sampledata/pictures/product5/pic2.jpg +0 -0
  201. data/lib/nimbleshop/sampledata/pictures/product6/pic1.jpg +0 -0
  202. data/lib/nimbleshop/sampledata/pictures/product6/pic10.jpg +0 -0
  203. data/lib/nimbleshop/sampledata/pictures/product6/pic11.jpg +0 -0
  204. data/lib/nimbleshop/sampledata/pictures/product6/pic12.jpg +0 -0
  205. data/lib/nimbleshop/sampledata/pictures/product6/pic13.jpg +0 -0
  206. data/lib/nimbleshop/sampledata/pictures/product6/pic14.jpg +0 -0
  207. data/lib/nimbleshop/sampledata/pictures/product6/pic15.jpg +0 -0
  208. data/lib/nimbleshop/sampledata/pictures/product6/pic16.jpg +0 -0
  209. data/lib/nimbleshop/sampledata/pictures/product6/pic17.jpg +0 -0
  210. data/lib/nimbleshop/sampledata/pictures/product6/pic2.jpg +0 -0
  211. data/lib/nimbleshop/sampledata/pictures/product6/pic3.jpg +0 -0
  212. data/lib/nimbleshop/sampledata/pictures/product6/pic4.jpg +0 -0
  213. data/lib/nimbleshop/sampledata/pictures/product6/pic5.jpg +0 -0
  214. data/lib/nimbleshop/sampledata/pictures/product6/pic6.jpg +0 -0
  215. data/lib/nimbleshop/sampledata/pictures/product6/pic7.jpg +0 -0
  216. data/lib/nimbleshop/sampledata/pictures/product6/pic8.jpg +0 -0
  217. data/lib/nimbleshop/sampledata/pictures/product6/pic9.jpg +0 -0
  218. data/lib/nimbleshop/sampledata/pictures/product7/pic1.jpg +0 -0
  219. data/lib/nimbleshop/sampledata/pictures/product7/pic2.jpg +0 -0
  220. data/lib/nimbleshop/sampledata/pictures/product7/pic3.jpg +0 -0
  221. data/lib/nimbleshop/sampledata/pictures/product8/pic1.jpg +0 -0
  222. data/lib/nimbleshop/sampledata/pictures/product8/pic2.jpg +0 -0
  223. data/lib/nimbleshop/sampledata/pictures/product8/pic3.jpg +0 -0
  224. data/lib/nimbleshop/sampledata/pictures/product8/pic4.jpg +0 -0
  225. data/lib/nimbleshop/sampledata/pictures/product8/pic5.jpg +0 -0
  226. data/lib/nimbleshop/sampledata/pictures/product8/pic6.jpg +0 -0
  227. data/lib/nimbleshop/sampledata/pictures/product8/pic7.jpg +0 -0
  228. data/lib/nimbleshop/sampledata/pictures/product8/pic8.jpg +0 -0
  229. data/lib/nimbleshop/sampledata/pictures/product9/pic1.jpg +0 -0
  230. data/lib/nimbleshop/sampledata/pictures/product9/pic2.jpg +0 -0
  231. data/lib/nimbleshop/util.rb +60 -0
  232. data/lib/nimbleshop/version.rb +18 -0
  233. data/lib/nimbleshop_core.rb +23 -0
  234. data/lib/tasks/localhost2public.rake +8 -0
  235. data/lib/tasks/setup.rake +26 -0
  236. data/test/factories/address_factory.rb +31 -0
  237. data/test/factories/creditcard_factory.rb +30 -0
  238. data/test/factories/custom_field_answer_factory.rb +6 -0
  239. data/test/factories/custom_field_factory.rb +21 -0
  240. data/test/factories/line_item_factory.rb +7 -0
  241. data/test/factories/link_factory.rb +6 -0
  242. data/test/factories/link_group_factory.rb +5 -0
  243. data/test/factories/navigation_factory.rb +6 -0
  244. data/test/factories/order_factory.rb +49 -0
  245. data/test/factories/payment_method_factory.rb +6 -0
  246. data/test/factories/payment_transaction_factory.rb +42 -0
  247. data/test/factories/picture_factory.rb +11 -0
  248. data/test/factories/product_group_condition_factory.rb +40 -0
  249. data/test/factories/product_group_factory.rb +5 -0
  250. data/test/factories/products_factory.rb +11 -0
  251. data/test/factories/shipment_carrier_factory.rb +6 -0
  252. data/test/factories/shipment_factory.rb +6 -0
  253. data/test/factories/shipping_method_factory.rb +15 -0
  254. data/test/factories/shipping_zone_factory.rb +5 -0
  255. data/test/factories/shop_factory.rb +8 -0
  256. data/test/fixtures/files/avatar.png +0 -0
  257. data/test/fixtures/link_groups.yml +13 -0
  258. data/test/fixtures/payment_methods.yml +39 -0
  259. data/test/fixtures/shops.yml +15 -0
  260. data/test/helpers/admin_helper_test.rb +37 -0
  261. data/test/helpers/nimbleshop_helper_test.rb +17 -0
  262. data/test/integration/admin/link_groups_acceptance_test.rb +39 -0
  263. data/test/integration/admin/orders_acceptance_test.rb +63 -0
  264. data/test/integration/admin/payment_methods_acceptance_test.rb +13 -0
  265. data/test/integration/admin/product_groups_acceptance_test.rb +89 -0
  266. data/test/integration/admin/products_acceptance_test.rb +105 -0
  267. data/test/integration/admin/shipping_methods_acceptance_test.rb +63 -0
  268. data/test/integration/admin/shipping_zones_acceptance_test.rb +16 -0
  269. data/test/integration/admin/shops_acceptance_test.rb +44 -0
  270. data/test/integration/checkout/cart_acceptance_test.rb +113 -0
  271. data/test/integration/checkout/payment_confirmation_acceptance_test.rb +24 -0
  272. data/test/integration/checkout/paypal_acceptance_test.rb +34 -0
  273. data/test/integration/checkout/shipping_address_acceptance_test.rb +91 -0
  274. data/test/integration/checkout/shipping_method_acceptance_test.rb +51 -0
  275. data/test/integration/homepage_acceptance_test.rb +24 -0
  276. data/test/integration/products_acceptance_test.rb +12 -0
  277. data/test/integration/static_pages_acceptance_test.rb +13 -0
  278. data/test/mailers/mailer_test.rb +25 -0
  279. data/test/rails_app/Gemfile +27 -0
  280. data/test/rails_app/Gemfile.lock +218 -0
  281. data/test/rails_app/Rakefile +10 -0
  282. data/test/rails_app/app/controllers/application_controller.rb +6 -0
  283. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  284. data/test/rails_app/app/views/layouts/application.html.erb +10 -0
  285. data/test/rails_app/config/application.rb +25 -0
  286. data/test/rails_app/config/application.yml +61 -0
  287. data/test/rails_app/config/boot.rb +5 -0
  288. data/test/rails_app/config/database.yml +18 -0
  289. data/test/rails_app/config/environment.rb +5 -0
  290. data/test/rails_app/config/environments/development.rb +18 -0
  291. data/test/rails_app/config/environments/production.rb +33 -0
  292. data/test/rails_app/config/environments/test.rb +33 -0
  293. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  294. data/test/rails_app/config/initializers/inflections.rb +2 -0
  295. data/test/rails_app/config/initializers/secret_token.rb +2 -0
  296. data/test/rails_app/config/routes.rb +10 -0
  297. data/test/rails_app/config.ru +4 -0
  298. data/test/rails_app/db/development.sqlite3 +0 -0
  299. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +74 -0
  300. data/test/rails_app/db/schema.rb +52 -0
  301. data/test/rails_app/log/development.log +94 -0
  302. data/test/rails_app/log/test.log +0 -0
  303. data/test/rails_app/public/404.html +26 -0
  304. data/test/rails_app/public/422.html +26 -0
  305. data/test/rails_app/public/500.html +26 -0
  306. data/test/rails_app/public/favicon.ico +0 -0
  307. data/test/rails_app/script/rails +10 -0
  308. data/test/support/address_test_helper.rb +24 -0
  309. data/test/support/checkout_test_helper.rb +40 -0
  310. data/test/support/dbify_sql_helper.rb +12 -0
  311. data/test/support/images/cookware.jpg +0 -0
  312. data/test/support/must_be_like.rb +24 -0
  313. data/test/support/shipping_method_test_helper.rb +5 -0
  314. data/test/support/wait_for_ajax.rb +4 -0
  315. data/test/test_helper.rb +65 -0
  316. data/test/unit/address_test.rb +33 -0
  317. data/test/unit/country_shipping_zone_test.rb +17 -0
  318. data/test/unit/creditcard_test.rb +33 -0
  319. data/test/unit/custom_field_answer/field_test.rb +93 -0
  320. data/test/unit/order_test.rb +70 -0
  321. data/test/unit/payment_method/authorizedotnet_test.rb +21 -0
  322. data/test/unit/payment_method/paypalwp_test.rb +17 -0
  323. data/test/unit/payment_method/splitable_test.rb +18 -0
  324. data/test/unit/picture_test.rb +24 -0
  325. data/test/unit/processor/authorize_net_test.rb +236 -0
  326. data/test/unit/processor/paypal_test.rb +40 -0
  327. data/test/unit/processor/splitable_test.rb +123 -0
  328. data/test/unit/product_group_condition_test.rb +188 -0
  329. data/test/unit/product_group_test.rb +109 -0
  330. data/test/unit/product_test.rb +60 -0
  331. data/test/unit/shipping_cost_calculator_test.rb +19 -0
  332. data/test/unit/shipping_method_test.rb +197 -0
  333. data/test/unit/shop_test.rb +11 -0
  334. data/test/unit/tax_calculator_test.rb +13 -0
  335. data/test/vcr_cassettes/authorize_net/authorize-failure.yml +38 -0
  336. data/test/vcr_cassettes/authorize_net/authorize-success.yml +38 -0
  337. data/test/vcr_cassettes/authorize_net/capture-failure.yml +38 -0
  338. data/test/vcr_cassettes/authorize_net/capture-success.yml +38 -0
  339. data/test/vcr_cassettes/authorize_net/purchase-failure.yml +38 -0
  340. data/test/vcr_cassettes/authorize_net/purchase-success.yml +38 -0
  341. data/test/vcr_cassettes/authorize_net/refund-failure.yml +38 -0
  342. data/test/vcr_cassettes/authorize_net/refund-success.yml +38 -0
  343. data/test/vcr_cassettes/authorize_net/void-authorize.yml +38 -0
  344. data/test/vcr_cassettes/authorize_net/void-failure.yml +38 -0
  345. data/test/vcr_cassettes/authorize_net/void-success.yml +38 -0
  346. data/test/vcr_cassettes/splitable/split-create-failure.yml +48 -0
  347. data/test/vcr_cassettes/splitable/split-create-success.yml +50 -0
  348. data/test/vcr_cassettes/splitable/split-draft-create-failure.yml +50 -0
  349. data/test/vcr_cassettes/splitable/split-draft-create-success.yml +50 -0
  350. data/vendor/assets/javascripts/accounting.js +406 -0
  351. data/vendor/assets/javascripts/autoresize.js +275 -0
  352. data/vendor/assets/javascripts/jquery-1.7.1.js +9267 -0
  353. data/vendor/assets/javascripts/jquery-form.js +980 -0
  354. data/vendor/assets/javascripts/jquery-json.js +193 -0
  355. data/vendor/assets/javascripts/jquery-ui-1.8.16.js +11768 -0
  356. data/vendor/assets/javascripts/jquery-ujs.js +374 -0
  357. data/vendor/assets/javascripts/mustache.js +436 -0
  358. data/vendor/assets/javascripts/nested_form.js +51 -0
  359. metadata +740 -0
@@ -0,0 +1,94 @@
1
+ Connecting to database specified by database.yml
2
+
3
+
4
+ Started GET "/" for 127.0.0.1 at 2012-07-02 11:04:08 -0400
5
+ Processing by NimbleshopSimply::ProductsController#index as HTML
6
+ Completed 500 Internal Server Error in 153ms
7
+
8
+ ActiveRecord::StatementInvalid (Could not find table 'link_groups'):
9
+ activerecord (3.2.6) lib/active_record/connection_adapters/sqlite_adapter.rb:472:in `table_structure'
10
+ activerecord (3.2.6) lib/active_record/connection_adapters/sqlite_adapter.rb:346:in `columns'
11
+ activerecord (3.2.6) lib/active_record/connection_adapters/schema_cache.rb:12:in `block in initialize'
12
+ activerecord (3.2.6) lib/active_record/model_schema.rb:228:in `yield'
13
+ activerecord (3.2.6) lib/active_record/model_schema.rb:228:in `default'
14
+ activerecord (3.2.6) lib/active_record/model_schema.rb:228:in `columns'
15
+ activerecord (3.2.6) lib/active_record/model_schema.rb:237:in `columns_hash'
16
+ activerecord (3.2.6) lib/active_record/locking/optimistic.rb:129:in `locking_enabled?'
17
+ activerecord (3.2.6) lib/active_record/relation.rb:170:in `exec_queries'
18
+ activerecord (3.2.6) lib/active_record/relation.rb:160:in `block in to_a'
19
+ activerecord (3.2.6) lib/active_record/explain.rb:40:in `logging_query_plan'
20
+ activerecord (3.2.6) lib/active_record/relation.rb:159:in `to_a'
21
+ activerecord (3.2.6) lib/active_record/relation/finder_methods.rb:159:in `all'
22
+ activerecord (3.2.6) lib/active_record/querying.rb:5:in `all'
23
+ /Users/nsingh/dev/nimbleshop_inc/nimbleshop/nimbleshop_simply/app/controllers/nimbleshop_simply/products_controller.rb:15:in `index'
24
+ actionpack (3.2.6) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
25
+ actionpack (3.2.6) lib/abstract_controller/base.rb:167:in `process_action'
26
+ actionpack (3.2.6) lib/action_controller/metal/rendering.rb:10:in `process_action'
27
+ actionpack (3.2.6) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
28
+ activesupport (3.2.6) lib/active_support/callbacks.rb:425:in `_run__174074954306394748__process_action__1494994247518375506__callbacks'
29
+ activesupport (3.2.6) lib/active_support/callbacks.rb:405:in `__run_callback'
30
+ activesupport (3.2.6) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
31
+ activesupport (3.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
32
+ actionpack (3.2.6) lib/abstract_controller/callbacks.rb:17:in `process_action'
33
+ actionpack (3.2.6) lib/action_controller/metal/rescue.rb:29:in `process_action'
34
+ actionpack (3.2.6) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
35
+ activesupport (3.2.6) lib/active_support/notifications.rb:123:in `block in instrument'
36
+ activesupport (3.2.6) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
37
+ activesupport (3.2.6) lib/active_support/notifications.rb:123:in `instrument'
38
+ actionpack (3.2.6) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
39
+ actionpack (3.2.6) lib/action_controller/metal/params_wrapper.rb:206:in `process_action'
40
+ activerecord (3.2.6) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
41
+ actionpack (3.2.6) lib/abstract_controller/base.rb:121:in `process'
42
+ actionpack (3.2.6) lib/abstract_controller/rendering.rb:45:in `process'
43
+ actionpack (3.2.6) lib/action_controller/metal.rb:203:in `dispatch'
44
+ actionpack (3.2.6) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
45
+ actionpack (3.2.6) lib/action_controller/metal.rb:246:in `block in action'
46
+ actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:73:in `call'
47
+ actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
48
+ actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:36:in `call'
49
+ journey (1.0.4) lib/journey/router.rb:68:in `block in call'
50
+ journey (1.0.4) lib/journey/router.rb:56:in `each'
51
+ journey (1.0.4) lib/journey/router.rb:56:in `call'
52
+ actionpack (3.2.6) lib/action_dispatch/routing/route_set.rb:600:in `call'
53
+ actionpack (3.2.6) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
54
+ rack (1.4.1) lib/rack/etag.rb:23:in `call'
55
+ rack (1.4.1) lib/rack/conditionalget.rb:25:in `call'
56
+ actionpack (3.2.6) lib/action_dispatch/middleware/head.rb:14:in `call'
57
+ actionpack (3.2.6) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
58
+ actionpack (3.2.6) lib/action_dispatch/middleware/flash.rb:242:in `call'
59
+ rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context'
60
+ rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call'
61
+ actionpack (3.2.6) lib/action_dispatch/middleware/cookies.rb:338:in `call'
62
+ activerecord (3.2.6) lib/active_record/query_cache.rb:64:in `call'
63
+ activerecord (3.2.6) lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in `call'
64
+ actionpack (3.2.6) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
65
+ activesupport (3.2.6) lib/active_support/callbacks.rb:405:in `_run__3216496320059555918__call__3071394449871022641__callbacks'
66
+ activesupport (3.2.6) lib/active_support/callbacks.rb:405:in `__run_callback'
67
+ activesupport (3.2.6) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
68
+ activesupport (3.2.6) lib/active_support/callbacks.rb:81:in `run_callbacks'
69
+ actionpack (3.2.6) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
70
+ actionpack (3.2.6) lib/action_dispatch/middleware/reloader.rb:65:in `call'
71
+ actionpack (3.2.6) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
72
+ actionpack (3.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
73
+ actionpack (3.2.6) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
74
+ railties (3.2.6) lib/rails/rack/logger.rb:26:in `call_app'
75
+ railties (3.2.6) lib/rails/rack/logger.rb:16:in `call'
76
+ actionpack (3.2.6) lib/action_dispatch/middleware/request_id.rb:22:in `call'
77
+ rack (1.4.1) lib/rack/methodoverride.rb:21:in `call'
78
+ rack (1.4.1) lib/rack/runtime.rb:17:in `call'
79
+ activesupport (3.2.6) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
80
+ rack (1.4.1) lib/rack/lock.rb:15:in `call'
81
+ actionpack (3.2.6) lib/action_dispatch/middleware/static.rb:62:in `call'
82
+ railties (3.2.6) lib/rails/engine.rb:479:in `call'
83
+ railties (3.2.6) lib/rails/application.rb:220:in `call'
84
+ rack (1.4.1) lib/rack/content_length.rb:14:in `call'
85
+ railties (3.2.6) lib/rails/rack/log_tailer.rb:17:in `call'
86
+ rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service'
87
+ /Users/nsingh/.rbenv/versions/1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
88
+ /Users/nsingh/.rbenv/versions/1.9.3-p125/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
89
+ /Users/nsingh/.rbenv/versions/1.9.3-p125/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
90
+
91
+
92
+ Rendered /Users/nsingh/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.erb (3.6ms)
93
+ Rendered /Users/nsingh/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
94
+ Rendered /Users/nsingh/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems/actionpack-3.2.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (15.9ms)
File without changes
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ <p>We've been notified about this issue and we'll take a look at it shortly.</p>
24
+ </div>
25
+ </body>
26
+ </html>
File without changes
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENV_PATH = File.expand_path('../../config/environment', __FILE__)
5
+ BOOT_PATH = File.expand_path('../../config/boot', __FILE__)
6
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
7
+ ROOT_PATH = File.expand_path('../..', __FILE__)
8
+
9
+ require BOOT_PATH
10
+ require 'rails/commands'
@@ -0,0 +1,24 @@
1
+ module AddressSpecHelper
2
+ def complete_address_form(kind_of_address, attrs = {})
3
+
4
+ %w(first_name last_name address1 address2 city zipcode).each do | attr |
5
+ fill_in "order_#{kind_of_address}_address_attributes_#{attr}", with: attrs[attr.to_sym]
6
+ end
7
+
8
+ select 'United States', from: "order_#{kind_of_address}_address_attributes_country_code"
9
+ select 'Alabama', from: "order_#{kind_of_address}_address_attributes_state_code"
10
+ end
11
+
12
+
13
+ def fill_good_address
14
+ address = build(:shipping_address)
15
+ fill_in 'First name', with: address[:first_name]
16
+ fill_in 'Last name', with: address[:last_name]
17
+ fill_in 'Address1', with: address[:address1]
18
+ fill_in 'Address2', with: 'Highway'
19
+ fill_in 'City', with: address[:city]
20
+ select 'United States', from: 'Country'
21
+ select 'Alabama', from: 'State/Province'
22
+ fill_in 'Zipcode', with: address[:zipcode]
23
+ end
24
+ end
@@ -0,0 +1,40 @@
1
+ module CheckoutTestHelper
2
+
3
+ def add_item_to_cart(name)
4
+ click_link name
5
+ click_button 'Add to cart'
6
+ end
7
+
8
+ def enter_valid_email_address
9
+ fill_in 'Your email address', with: 'john@example.com'
10
+ end
11
+
12
+ def enter_valid_shipping_address
13
+ {first_name: 'Neeaj',
14
+ last_name: 'Singh',
15
+ address1: '100 N. Miami Ave',
16
+ address2: 'Suite #500',
17
+ city: 'Miami',
18
+ zipcode: '33333'}.each do |key, value|
19
+ fill_in "order_shipping_address_attributes_#{key}", with: value
20
+ end
21
+
22
+ select 'United States', from: "order_shipping_address_attributes_country_code"
23
+ select 'Florida', from: "order_shipping_address_attributes_state_code"
24
+ end
25
+
26
+ def enter_valid_billing_address
27
+ {first_name: 'Neil',
28
+ last_name: 'Singh',
29
+ address1: '100 N. Pines Ave',
30
+ address2: 'Suite #400',
31
+ city: 'Pembroke Pines',
32
+ zipcode: '33332'}.each do |key, value|
33
+ fill_in "order_billing_address_attributes_#{key}", with: value
34
+ end
35
+
36
+ select 'United States', from: "order_billing_address_attributes_country_code"
37
+ select 'Florida', from: "order_billing_address_attributes_state_code"
38
+ end
39
+
40
+ end
@@ -0,0 +1,12 @@
1
+ module DbifySqlHelper
2
+
3
+ def dbify_sql(sql)
4
+ case ActiveRecord::Base.connection.adapter_name
5
+ when "SQLite"
6
+ sql
7
+ when "PostgreSQL"
8
+ sql.gsub('LIKE', 'ILIKE')
9
+ end
10
+ end
11
+
12
+ end
Binary file
@@ -0,0 +1,24 @@
1
+ module M
2
+
3
+ def assert_must_be_like a, b
4
+ assert_equal a.gsub(/\s+/, ' ').strip, b.gsub(/\s+/, ' ').strip
5
+ end
6
+
7
+ def assert_sanitized_equal a, b
8
+ a1 = a.gsub(/\W/, ' ').gsub(/\s/, '').strip
9
+ b2 = b.gsub(/\W/, ' ').gsub(/\s/, '').strip
10
+ assert_equal a1, b2
11
+ end
12
+
13
+ def assert_sorted_equal a, b
14
+ assert_equal a.sort, b.sort
15
+ end
16
+
17
+ def assert_must_have_same_records a, b
18
+ assert_sorted_equal a.map(&:id), b.map(&:id)
19
+ end
20
+ end
21
+
22
+ class ActiveSupport::TestCase
23
+ include M
24
+ end
@@ -0,0 +1,5 @@
1
+ module ShippingMethodSpecHelper
2
+ def create_regional_shipping_method
3
+ create(:country_shipping_method, name: 'Ground Shipping', base_price: 3.99, minimum_order_amount: 1, maximum_order_amount: 99999).regions[0]
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ def wait_for_ajax
2
+ # TODO delete me noone is using me
3
+ wait_until { page.evaluate_script("typeof(jQuery)!='undefined' && jQuery.active") == 0 }
4
+ end
@@ -0,0 +1,65 @@
1
+ require 'bundler'
2
+ Bundler.setup(:test)
3
+
4
+ ENV["RAILS_ENV"] = "test"
5
+ require File.expand_path("../../../myshop/config/environment.rb", __FILE__)
6
+ require 'rails/test_help'
7
+ require 'capybara/rails'
8
+
9
+ require 'factory_girl'
10
+ Dir["#{File.dirname(__FILE__)}/factories/**"].each { |f| require File.expand_path(f) }
11
+
12
+ require 'active_record/fixtures'
13
+
14
+ DatabaseCleaner.strategy = :truncation
15
+ Capybara.default_wait_time = 5
16
+
17
+ VCR.configure do | c |
18
+ c.ignore_hosts '127.0.0.1', 'localhost'
19
+ c.cassette_library_dir = 'test/vcr_cassettes'
20
+ c.hook_into :webmock # or :fakeweb
21
+ end
22
+
23
+ class ActiveSupport::TestCase
24
+ include FactoryGirl::Syntax::Methods
25
+ self.use_transactional_fixtures = false
26
+ setup do
27
+ DatabaseCleaner.start
28
+ ActiveRecord::Fixtures.create_fixtures("#{File.dirname(__FILE__)}/fixtures", ['shops', 'link_groups', 'payment_methods'])
29
+ end
30
+ teardown do
31
+ DatabaseCleaner.clean
32
+ end
33
+
34
+ def playcasette(casette)
35
+ VCR.use_cassette(casette) { yield }
36
+ end
37
+ end
38
+
39
+ class ActionDispatch::IntegrationTest
40
+ include Capybara::DSL
41
+ self.use_transactional_fixtures = false
42
+ setup do
43
+ DatabaseCleaner.start
44
+ ActiveRecord::Fixtures.create_fixtures("#{File.dirname(__FILE__)}/fixtures", ['shops', 'link_groups', 'payment_methods'])
45
+ end
46
+
47
+ teardown do
48
+ DatabaseCleaner.clean
49
+ Capybara.reset_sessions!
50
+ Capybara.use_default_driver
51
+ end
52
+ end
53
+
54
+
55
+
56
+ # Require ruby files in support dir.
57
+ Dir["#{File.dirname(__FILE__)}/support/**"].each do |f|
58
+ require File.expand_path(f) unless File.directory? f
59
+ end
60
+
61
+ module RegionalShippingMethodTestHelper
62
+ def create_regional_shipping_method
63
+ create(:country_shipping_method, name: 'Ground', base_price: 3.99, minimum_order_amount: 1, maximum_order_amount: 99999).regions[0]
64
+ end
65
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+
3
+ class AddressTest < ActiveRecord::TestCase
4
+
5
+ test "#country_name" do
6
+ address = create(:address, country_code: 'IN', state_code: 'AP')
7
+ assert_equal 'India', address.country_name
8
+ end
9
+
10
+ test "#state_name" do
11
+ address = create(:address, country_code: 'US', state_code: 'MD')
12
+ assert_equal 'United States', address.country_name
13
+ assert_equal 'Maryland', address.state_name
14
+ end
15
+
16
+ test "state code is required" do
17
+ address = build(:address, country_code: 'BR', state_code: nil, state_name: nil)
18
+ refute address.valid?
19
+ assert_equal "State code is required", address.errors.full_messages.first
20
+ end
21
+
22
+ test "state code must be valid" do
23
+ address = build(:address, country_code: 'BR', state_code: 'XX')
24
+ refute address.valid?
25
+ assert_equal "State code XX is not a valid state", address.errors.full_messages.first
26
+ end
27
+
28
+ test "#to_credit_card_attributes" do
29
+ options = Address.new.to_credit_card_attributes
30
+ assert_equal ["address1", "address2", "first_name", "last_name", "state", "zipcode"], options.keys.sort
31
+ end
32
+
33
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ class CountryShippingZoneTest < ActiveRecord::TestCase
4
+
5
+ test "assigns name from carmen" do
6
+ assert_equal "United States", create(:country_shipping_zone).name
7
+ end
8
+
9
+ test "should create all regions for canada" do
10
+ regions = Carmen::Country.coded("CA").subregions.length
11
+
12
+ assert_difference 'RegionalShippingZone.count', regions do
13
+ create(:country_shipping_zone, country_code: 'CA')
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+
3
+ class CreditcardTest < ActiveModel::TestCase
4
+
5
+ test 'active merchant should not validate an invalid card' do
6
+ card = Creditcard.new
7
+ refute card.valid?
8
+ end
9
+
10
+ test 'active merchant should validate a valid card' do
11
+ card = build(:creditcard)
12
+ assert card.valid?
13
+ end
14
+
15
+ test 'error message when number is nil' do
16
+ card = build(:creditcard, number: nil)
17
+ refute card.valid?
18
+ assert_equal 'Please enter credit card number', card.errors.full_messages.first
19
+ end
20
+
21
+ test 'error message when number is not numeric' do
22
+ card = build(:creditcard, number: 'a')
23
+ refute card.valid?
24
+ assert_equal 'Please check the credit card number you entered', card.errors.full_messages.first
25
+ end
26
+
27
+ test 'error message when cvv is nil' do
28
+ card = build(:creditcard, cvv: nil)
29
+ refute card.valid?
30
+ assert_equal 'Please enter CVV', card.errors.full_messages.first
31
+ end
32
+
33
+ end
@@ -0,0 +1,93 @@
1
+ require "test_helper"
2
+
3
+ class CustomFieldAnswerFieldNumberTest < ActiveSupport::TestCase
4
+
5
+ setup do
6
+ @custom_field = CustomField.new(field_type: 'number')
7
+ end
8
+
9
+ test "when custom_field set during build" do
10
+ answer = CustomFieldAnswer.new(custom_field: @custom_field, value: 234)
11
+ assert_equal 234, answer.number_value
12
+ end
13
+
14
+ test "when custom_field set after build" do
15
+ answer = CustomFieldAnswer.new(value: 234)
16
+ answer.custom_field = @custom_field
17
+ assert_equal 234, answer.number_value
18
+ end
19
+
20
+ test "when custom_field_id set after build" do
21
+ answer = CustomFieldAnswer.new(value: 234)
22
+ answer.custom_field_id = create(:number_custom_field).id
23
+ assert_equal 234, answer.number_value
24
+ end
25
+
26
+ test "when custom_field_id set during build" do
27
+ answer = CustomFieldAnswer.new(value: 234, custom_field_id: create(:number_custom_field).id)
28
+ answer.custom_field_id = create(:number_custom_field)
29
+ assert_equal 234, answer.number_value
30
+ end
31
+
32
+ end
33
+
34
+ class CustomFieldAnswerFieldTextTest < ActiveSupport::TestCase
35
+
36
+ setup do
37
+ @custom_field = CustomField.new(field_type: 'text')
38
+ end
39
+
40
+ test "when custom field set during build" do
41
+ answer = CustomFieldAnswer.new(custom_field: @custom_field, value: 'string')
42
+ assert_equal 'string', answer.value
43
+ end
44
+
45
+ test "when custom field set after build" do
46
+ answer = CustomFieldAnswer.new(value: 'string')
47
+ answer.custom_field = @custom_field
48
+ assert_equal 'string', answer.value
49
+ end
50
+
51
+ test "when custom_field_id set during build" do
52
+ answer = CustomFieldAnswer.new(custom_field_id: create(:text_custom_field).id, value: 'string')
53
+ assert_equal 'string', answer.value
54
+ end
55
+
56
+ test "when custom_field_id set after build" do
57
+ answer = CustomFieldAnswer.new(value: 'string')
58
+ answer.custom_field_id = create(:text_custom_field).id
59
+ assert_equal 'string', answer.value
60
+ end
61
+
62
+ end
63
+
64
+
65
+ class CustomFieldAnswerFieldDateTest < ActiveSupport::TestCase
66
+
67
+ setup do
68
+ @custom_field = CustomField.new(field_type: 'date')
69
+ end
70
+
71
+ test "when custom field set during build" do
72
+ answer = CustomFieldAnswer.new(custom_field: @custom_field, value: '2/4/2009')
73
+ assert_equal '02/04/2009', answer.datetime_value.strftime("%m/%d/%Y")
74
+ end
75
+
76
+ test "when custom field set after build" do
77
+ answer = CustomFieldAnswer.new(value: '2/4/2009')
78
+ answer.custom_field = @custom_field
79
+ assert_equal '02/04/2009', answer.datetime_value.strftime("%m/%d/%Y")
80
+ end
81
+
82
+ test "when custom_field_id set during build" do
83
+ answer = CustomFieldAnswer.new(custom_field_id: create(:date_custom_field).id, value: '2/4/2009')
84
+ assert_equal '02/04/2009', answer.datetime_value.strftime("%m/%d/%Y")
85
+ end
86
+
87
+ test "when custom_field_id set after build" do
88
+ answer = CustomFieldAnswer.new(value: '2/4/2009')
89
+ answer.custom_field_id = create(:date_custom_field).id
90
+ assert_equal '02/04/2009', answer.datetime_value.strftime("%m/%d/%Y")
91
+ end
92
+
93
+ end
@@ -0,0 +1,70 @@
1
+ require 'test_helper'
2
+
3
+ class OrderAddressTest < ActiveSupport::TestCase
4
+
5
+ test "shipping and billing address is nil" do
6
+ order = Order.new(billing_address: nil, shipping_address: nil)
7
+ assert_equal nil, order.final_billing_address
8
+ end
9
+
10
+ test "billing address is same as shipping address" do
11
+ shipping_address = ShippingAddress.new(use_for_billing: true)
12
+ order = Order.new(shipping_address: shipping_address, billing_address: BillingAddress.new)
13
+ assert_equal shipping_address, order.final_billing_address
14
+ end
15
+
16
+ test "billing address is different from shipping address" do
17
+ shipping_address = ShippingAddress.new(use_for_billing: false)
18
+ billing_address = BillingAddress.new
19
+ order = Order.new(shipping_address: shipping_address, billing_address: billing_address)
20
+ assert_equal billing_address, order.final_billing_address
21
+ end
22
+
23
+ end
24
+
25
+ class OrderTest < ActiveSupport::TestCase
26
+ setup do
27
+ @order = create :order
28
+ @product1 = create :product, price: 10
29
+ @product2 = create :product, price: 30
30
+ end
31
+
32
+ test "factory" do
33
+ order = create :order_paid_using_authorizedotnet
34
+ assert_equal 1, order.payment_transactions.size
35
+ end
36
+
37
+ test "#add" do
38
+ @order.add(@product1)
39
+ assert_equal 1, @order.line_items.size
40
+ assert_equal 1, @order.line_items.first.quantity
41
+ end
42
+
43
+ test "#remove" do
44
+ @order.add(@product1)
45
+ @order.remove(@product1)
46
+ assert @order.reload.line_items.empty?
47
+ assert_equal 0.0, @order.reload.line_items_total.to_f
48
+ end
49
+
50
+ test "#update_quantity" do
51
+ @order.add(@product1)
52
+ @order.update_quantity({@product1.id => 20})
53
+ assert_equal 20, @order.line_items.first.quantity
54
+ end
55
+
56
+ test "#update_quantity when order has 2 items" do
57
+ @order.add(@product1)
58
+ @order.add(@product2)
59
+ @order.update_quantity({@product1.id => 3})
60
+ assert_equal 60.0, @order.line_items_total.to_f
61
+ end
62
+
63
+ test "#available_shipping_methods" do
64
+ @order.add(create(:product))
65
+ assert_equal 1, @order.available_shipping_methods.size
66
+ assert_equal 58, ShippingMethod.count
67
+ @order.shipping_address = create(:shipping_address)
68
+ assert_equal 1, @order.available_shipping_methods.size
69
+ end
70
+ end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+
3
+ class PaymentMethodAuthorizeNetTest < ActiveSupport::TestCase
4
+
5
+ test "validations" do
6
+ pm = NimbleshopAuthorizedotnet::Authorizedotnet.new(name: 'Authorize.net', description: 'this is description')
7
+ refute pm.valid?
8
+ expected = ["Company name on creditcard statement can't be blank", "Login can't be blank", "Transaction key can't be blank"]
9
+ assert_equal expected, pm.errors.full_messages.sort
10
+ end
11
+
12
+ test "should save the record" do
13
+ pm = NimbleshopAuthorizedotnet::Authorizedotnet.new(name: 'Authorize.net', description: 'this is description')
14
+ pm.login_id = 'FWERSDEED093d'
15
+ pm.transaction_key = 'SDFSDFSFSF423433SDFSFSSFSFSF334'
16
+ pm.company_name_on_creditcard_statement = 'BigBinary LLC'
17
+ assert pm.save
18
+ assert_match /authorize-net/, pm.permalink
19
+ end
20
+
21
+ end