We need to be more restrictive with factory girl updates.
Implement a state lock version to prevent race conditions in checkout controller. refs #4190

Fix broken specs.

Add regression test for state lock version. Fixes #4190

Conflicts:
	frontend/spec/controllers/spree/checkout_controller_spec.rb
Add circle CI setup

fixes #5506
Use includes instead of eager_load to ensure images are returned in correct order.

Fixes #5513
include option values when loading option values from option types
fixes #5519
stack level too deep in rails 4.1.6
filter out shipment json data to avoid stack level too deep error in rails 4.1.6
add :state and :store_location_id to shipments js array

fixes #5504

Conflicts:
	backend/app/views/spree/admin/orders/_line_items_edit_form.html.erb
be more verbose with the missing migrations
Use js driver to fix spec.
Refactor the duplicate request prevention code ( order.with_lock )
- break the lock code out into a seperate callback
- ensure it only operates on an update
- add specs

Refactor & Bugfix
- Correcly name the callback that prevents duplicate requests
- Add a spec to test that the callback is being called

Fixes #5523

Conflicts:
	frontend/app/controllers/spree/checkout_controller.rb
clean up stock location form design

refactor field class of divs to parent div

add data-hooks for stock locations

Fixes #5525

Conflicts:
	backend/app/views/spree/admin/stock_locations/_form.html.erb
Default is 2.4.x+
Adds editorConfig.

Fixes #5491
Fallback to variant.id if sku is not provided.

Fixes #5524
Fixes #5526
Use variant_id to avoid loading variant.
Frontend - Fix RSpec 3 Deprecations.

Conflicts:
	core/lib/spree/testing_support/factories/customer_return_factory.rb
	core/lib/spree/testing_support/factories/order_factory.rb
	core/lib/spree/testing_support/factories/reimbursement_factory.rb
	core/lib/spree/testing_support/factories/stock_factory.rb
	frontend/spec/controllers/spree/checkout_controller_spec.rb
	frontend/spec/controllers/spree/orders_controller_spec.rb
	frontend/spec/features/coupon_code_spec.rb
	frontend/spec/features/taxons_spec.rb
Frontend - Fix rspec 3 deprecations.

Conflicts:
	frontend/spec/features/products_spec.rb
	frontend/spec/features/taxons_spec.rb
Fix remaining deprecations in helpers.
Convert specs to RSpec 3.1.7 syntax with Transpec

This conversion is done by Transpec 2.3.7 with the following command:
    transpec -s

* 663 conversions
    from: obj.should
      to: expect(obj).to

* 422 conversions
    from: == expected
      to: eq(expected)

* 36 conversions
    from: obj.should_not
      to: expect(obj).not_to

* 30 conversions
    from: describe 'some controller' { }
      to: describe 'some controller', :type => :controller { }

* 17 conversions
    from: Klass.any_instance.stub(:message => value)
      to: allow_any_instance_of(Klass).to receive_messages(:message => value)

* 15 conversions
    from: obj.should_receive(:message)
      to: expect(obj).to receive(:message)

* 10 conversions
    from: lambda { }.should
      to: expect { }.to

* 9 conversions
    from: lambda { }.should_not
      to: expect { }.not_to

* 9 conversions
    from: obj.stub(:message => value)
      to: allow(obj).to receive_messages(:message => value)

* 7 conversions
    from: =~ /pattern/
      to: match(/pattern/)

* 7 conversions
    from: Klass.any_instance.should_receive(:message)
      to: expect_any_instance_of(Klass).to receive(:message)

* 7 conversions
    from: obj.stub_chain(:message1, :message2)
      to: allow(obj).to receive_message_chain(:message1, :message2)

* 6 conversions
    from: obj.stub(:message)
      to: allow(obj).to receive(:message)

* 3 conversions
    from: obj.should_not_receive(:message)
      to: expect(obj).not_to receive(:message)

* 1 conversion
    from: =~ [1, 2]
      to: match_array([1, 2])

* 1 conversion
    from: > expected
      to: be > expected

* 1 conversion
    from: describe 'some model' { }
      to: describe 'some model', :type => :model { }

* 1 conversion
    from: describe 'some request' { }
      to: describe 'some request', :type => :request { }

For more details: https://github.com/yujinakayama/transpec#supported-conversions
Convert specs to RSpec 3.1.7 syntax with Transpec

This conversion is done by Transpec 2.3.7 with the following command:
    transpec -s

* 977 conversions
    from: obj.should
      to: expect(obj).to

* 544 conversions
    from: == expected
      to: eq(expected)

* 286 conversions
    from: obj.stub(:message => value)
      to: allow(obj).to receive_messages(:message => value)

* 170 conversions
    from: obj.should_receive(:message)
      to: expect(obj).to receive(:message)

* 117 conversions
    from: describe 'some model' { }
      to: describe 'some model', :type => :model { }

* 101 conversions
    from: obj.should_not
      to: expect(obj).not_to

* 93 conversions
    from: obj.stub(:message)
      to: allow(obj).to receive(:message)

* 47 conversions
    from: it { should ... }
      to: it { is_expected.to ... }

* 45 conversions
    from: obj.stub_chain(:message1, :message2)
      to: allow(obj).to receive_message_chain(:message1, :message2)

* 43 conversions
    from: obj.should_not_receive(:message)
      to: expect(obj).not_to receive(:message)

* 15 conversions
    from: its(:attr) { }
      to: describe '#attr' do subject { super().attr }; it { } end

* 10 conversions
    from: Klass.any_instance.stub(:message => value)
      to: allow_any_instance_of(Klass).to receive_messages(:message => value)

* 10 conversions
    from: lambda { }.should_not
      to: expect { }.not_to

* 8 conversions
    from: obj.should have(n).error_on(...)
      to: expect(obj.error_on(...).size).to eq(n)

* 6 conversions
    from: Klass.any_instance.stub_chain(:message1, :message2)
      to: allow_any_instance_of(Klass).to receive_message_chain(:message1, :message2)

* 5 conversions
    from: Klass.any_instance.should_receive(:message)
      to: expect_any_instance_of(Klass).to receive(:message)

* 5 conversions
    from: lambda { }.should
      to: expect { }.to

* 4 conversions
    from: describe 'some helper' { }
      to: describe 'some helper', :type => :helper { }

* 4 conversions
    from: expect(obj).to have(n).errors_on(...)
      to: expect(obj.errors_on(...).size).to eq(n)

* 3 conversions
    from: =~ [1, 2]
      to: match_array([1, 2])

* 3 conversions
    from: Klass.any_instance.stub(:message)
      to: allow_any_instance_of(Klass).to receive(:message)

* 3 conversions
    from: describe 'some mailer' { }
      to: describe 'some mailer', :type => :mailer { }

* 3 conversions
    from: expect(obj).to have(n).error_on(...)
      to: expect(obj.error_on(...).size).to eq(n)

* 3 conversions
    from: it { should have(n).error_on(...) }
      to: it 'has n error_on' do expect(subject.error_on(...).size).to eq(n) end

* 2 conversions
    from: Klass.any_instance.should_not_receive(:message)
      to: expect_any_instance_of(Klass).not_to receive(:message)

* 2 conversions
    from: collection.should have(n).items
      to: expect(collection.size).to eq(n)

* 2 conversions
    from: expect(collection).to have(n).items
      to: expect(collection.size).to eq(n)

* 1 conversion
    from: =~ /pattern/
      to: match(/pattern/)

* 1 conversion
    from: it { should have(n).errors_on(...) }
      to: it 'has n errors_on' do expect(subject.errors_on(...).size).to eq(n) end

* 1 conversion
    from: obj.unstub(:message)
      to: allow(obj).to receive(:message).and_call_original

* 1 conversion
    from: proc { }.should
      to: expect { }.to

For more details: https://github.com/yujinakayama/transpec#supported-conversions
Convert specs to RSpec 3.1.7 syntax with Transpec

This conversion is done by Transpec 2.3.7 with the following command:
    transpec -s

* 426 conversions
    from: obj.should
      to: expect(obj).to

* 127 conversions
    from: == expected
      to: eq(expected)

* 81 conversions
    from: obj.should_not
      to: expect(obj).not_to

* 41 conversions
    from: describe 'some feature' { }
      to: describe 'some feature', :type => :feature { }

* 20 conversions
    from: describe 'some controller' { }
      to: describe 'some controller', :type => :controller { }

* 16 conversions
    from: obj.stub(:message => value)
      to: allow(obj).to receive_messages(:message => value)

* 15 conversions
    from: obj.stub(:message)
      to: allow(obj).to receive(:message)

* 10 conversions
    from: obj.should_receive(:message)
      to: expect(obj).to receive(:message)

* 4 conversions
    from: Klass.any_instance.stub(:message)
      to: allow_any_instance_of(Klass).to receive(:message)

* 4 conversions
    from: describe 'some helper' { }
      to: describe 'some helper', :type => :helper { }

* 4 conversions
    from: lambda { }.should_not
      to: expect { }.not_to

* 3 conversions
    from: Klass.any_instance.stub(:message => value)
      to: allow_any_instance_of(Klass).to receive_messages(:message => value)

* 2 conversions
    from: =~ [1, 2]
      to: match_array([1, 2])

* 1 conversion
    from: =~ /pattern/
      to: match(/pattern/)

* 1 conversion
    from: after { example }
      to: after { |example| example }

* 1 conversion
    from: obj.should_not_receive(:message)
      to: expect(obj).not_to receive(:message)

* 1 conversion
    from: obj.stub_chain(:message1, :message2)
      to: allow(obj).to receive_message_chain(:message1, :message2)

For more details: https://github.com/yujinakayama/transpec#supported-conversions