Rails 4 now throws a fatal error if calling #touch on an object that hasn't been saved yet: c63cfc8722/activerecord/lib/active_record/persistence.rb (L957)
Fixes:
41) Stock::Package#shipping_methods does not return shipping methods not used by the package's order distributor
Failure/Error: distributors.each(&:touch)
ActiveRecord::ActiveRecordError:
can not touch on a new record object
# ./app/models/spree/shipping_method_decorator.rb:81:in `touch_distributors'
# ./spec/models/stock/package_spec.rb:39:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:17:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:32:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:7:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:44:in `block (3 levels) in <module:Stock>'
42) Stock::Package#shipping_categories returns shipping categories that are not shipping categories of the order's products
Failure/Error: distributors.each(&:touch)
ActiveRecord::ActiveRecordError:
can not touch on a new record object
# ./app/models/spree/shipping_method_decorator.rb:81:in `touch_distributors'
# ./spec/models/stock/package_spec.rb:39:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:17:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:32:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:7:in `block (2 levels) in <module:Stock>'
# ./spec/models/stock/package_spec.rb:50:in `block (3 levels) in <module:Stock>'
Responsibility for geocoding has moved from the `gmaps4rails` gem using `acts_as_taggable`, to the `geocoding` gem using `geocoded_by`. We already use this in the Address model.
For some reason some of the superfluous attributes being assigned here have started throwing fatal errors in Rails 4 instead of being silently ignored...
It looks like there are some issues with prepared statements here, where the resulting SQL contains something like: `WHERE "enterprise_roles"."user_id" = $1` in a subquery. The "$1" part is being lost somehow and isn't present if it's used in nested subqueries.
Example fixed spec (there are lots like this one):
59) Spree::Admin::ReportsController Supplier Bulk Coop where I have granted P-OC to the distributor only shows product line items that I am supplying
Failure/Error: produced_line_items.select("spree_line_items.id"))
ActiveRecord::StatementInvalid:
PG::ProtocolViolation: ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1
: SELECT id FROM "spree_line_items" WHERE "spree_line_items"."order_id" IN (SELECT id FROM "spree_orders" WHERE (("spree_orders"."distributor_id" IN (SELECT enterprises.id FROM "enterprises" INNER JOIN "enterprise_roles" ON "enterprise_roles"."enterprise_id" = "enterprises"."id" WHERE (enterprise_roles.user_id = 947)) OR "spree_orders"."order_cycle_id" IN (SELECT id FROM "order_cycles" WHERE "order_cycles"."coordinator_id" IN (SELECT "enterprises"."id" FROM "enterprises" INNER JOIN "enterprise_roles" ON "enterprises"."id" = "enterprise_roles"."enterprise_id" WHERE "enterprise_roles"."user_id" = $1)))))
# ./app/services/permissions/order.rb:28:in `visible_line_items'
# ./lib/open_food_network/reports/line_items.rb:16:in `list'
# ./lib/open_food_network/bulk_coop_report.rb:54:in `table_items'
# ./app/controllers/spree/admin/reports_controller.rb:264:in `order_grouper_table'
# ./app/controllers/spree/admin/reports_controller.rb:101:in `bulk_coop'
# ./spec/controllers/spree/admin/reports_controller_spec.rb:168:in `block (5 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# PG::ProtocolViolation:
# ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1
# ./app/services/permissions/order.rb:28:in `visible_line_items'
Rails 4 adds an extra layer of "default" headers that override any that are missing (or deleted). This was breaking embedded shopfront responses.
Fixes:
74) setting response headers for embedded shopfronts with embedded shopfronts enabled with a valid whitelist allows iframes on certain pages when enabled in configuration
Failure/Error: expect(response.headers['X-Frame-Options']).to be_nil
expected: nil
got: "SAMEORIGIN"
# ./spec/requests/embedded_shopfronts_headers_spec.rb:54:in `block (4 levels) in <top (required)>'
75) setting response headers for embedded shopfronts with embedded shopfronts enabled with www prefix matches the URL structure in the header
Failure/Error: expect(response.headers['X-Frame-Options']).to be_nil
expected: nil
got: "SAMEORIGIN"
# ./spec/requests/embedded_shopfronts_headers_spec.rb:75:in `block (4 levels) in <top (required)>'
This will happen if user deletes a saved credit card used previously. In this case, the admin payment details page will render empty details and the payment amount
The new version of jquery is picking up a confirm in the ship action that was not being triggered in the previous version
The orders_spec was not expecting this confirm to appear so we are removing here to keep the behaviour and the spec green