Adding specs for variable weight adjustment via builk order management

This commit is contained in:
Lynne Davis
2015-04-04 17:44:02 +01:00
parent bf44a1c862
commit ffd850c761
3 changed files with 76 additions and 4 deletions

View File

@@ -0,0 +1,31 @@
require 'spec_helper'
module Spree
describe Spree::Api::LineItemsController do
render_views
before do
stub_authentication!
Spree.user_class.stub :find_by_spree_api_key => current_api_user
end
def self.make_simple_data!
let!(:order) { FactoryGirl.create(:order, state: 'complete', completed_at: Time.now) }
let!(:line_item) { FactoryGirl.create(:line_item, order: order, unit_value: 500) }
end
#test that when a line item is updated, an order's fees are updated too
context "as an admin user" do
sign_in_as_admin!
make_simple_data!
context "as a line item is updated" do
it "apply enterprise fees on the item" do
line_item_params = { order_id: order.number, id: line_item.id, line_item: { id: line_item.id, unit_value: 520 }, format: :json}
controller.should_receive(:apply_enterprise_fees).and_return(true)
spree_post :update, line_item_params
end
end
end
end
end

View File

@@ -57,7 +57,7 @@ feature %q{
end
it "displays a column for order date" do
page.should have_selector "th,date", text: "ORDER DATE", :visible => true
page.should have_selector "th.date", text: "ORDER DATE", :visible => true
page.should have_selector "td.date", text: o1.completed_at.strftime("%F %T"), :visible => true
page.should have_selector "td.date", text: o2.completed_at.strftime("%F %T"), :visible => true
end
@@ -141,8 +141,22 @@ feature %q{
admin_user = quick_login_as_admin
end
let!(:p1) { FactoryGirl.create(:product_with_option_types, group_buy: true, group_buy_unit_size: 5000, variant_unit: "weight", variants: [FactoryGirl.create(:variant, unit_value: 1000)] ) }
let!(:v1) { p1.variants.first }
let!(:o1) { FactoryGirl.create(:order, state: 'complete', completed_at: Time.now ) }
let!(:li1) { FactoryGirl.create(:line_item, order: o1, :quantity => 5 ) }
let!(:li1) { FactoryGirl.create(:line_item, order: o1, variant: v1, :quantity => 5, :unit_value => 1000 ) }
context "modifying the weight/volume of a line item" do
it "update-pending is added to variable 'price'" do
visit '/admin/orders/bulk_management'
first("div#columns_dropdown", :text => "COLUMNS").click
first("div#columns_dropdown div.menu div.menu_item", text: "Weight/Volume").click
page.should_not have_css "input[name='price'].update-pending"
li1_unit_value_column = find("tr#li_#{li1.id} td.unit_value")
li1_unit_value_column.fill_in "unit_value", :with => 1200
page.should have_css "input[name='price'].update-pending", :visible => false
end
end
context "using column display toggle" do
it "shows a column display toggle button, which shows a list of columns when clicked" do

View File

@@ -33,8 +33,8 @@ describe "AdminOrderMgmtCtrl", ->
httpBackend.flush()
expect(scope.suppliers).toEqual [{ id : '0', name : 'All' }, 'list of suppliers']
expect(scope.distributors).toEqual [ { id : '0', name : 'All' }, 'list of distributors' ]
expect(scope.orderCycles).toEqual [ { id : '0', name : 'All' }, 'oc1', 'oc2', 'oc3' ]
expect(scope.distributors).toEqual [ { id : '0', name : 'All' }, 'list of distributors' ]
expect(scope.orderCycles).toEqual [ { id : '0', name : 'All' }, 'oc1', 'oc2', 'oc3' ]
expect(scope.initialiseVariables.calls.length).toBe 1
expect(scope.fetchOrders.calls.length).toBe 1
@@ -350,6 +350,33 @@ describe "AdminOrderMgmtCtrl", ->
spyOn(VariantUnitManager, "getUnitName").andReturn "kg"
expect(scope.formattedValueWithUnitName(2000,unitsVariant)).toEqual "2 kg"
describe "updating the price upon updating the weight of a line item", ->
it "resets the weight if the weight is set to zero", ->
scope.filteredLineItems = [
{ units_variant: { unit_value: 100 }, price: 2, unit_value: 0 }
]
expect(scope.weightAdjustedPrice(scope.filteredLineItems[0], 100)).toEqual scope.filteredLineItems[0].price
it "updates the price if the weight is changed", ->
scope.filteredLineItems = [
{ units_variant: { unit_value: 100 }, price: 2, unit_value: 200 }
]
old_value = scope.filteredLineItems[0].units_variant.unit_value
new_value = scope.filteredLineItems[0].unit_value
sp = scope.filteredLineItems[0].price * new_value / old_value
expect(scope.weightAdjustedPrice(scope.filteredLineItems[0], old_value)).toEqual sp
it "doesn't update the price if the weight is not changed", ->
scope.filteredLineItems = [
{ units_variant: { unit_value: 100 }, price: 2, unit_value: 100 }
]
old_value = scope.filteredLineItems[0].unit_value
new_value = scope.filteredLineItems[0].unit_value
sp = scope.filteredLineItems[0].price
expect(scope.weightAdjustedPrice(scope.filteredLineItems[0], old_value)).toEqual sp
describe "managing pending changes", ->
dataSubmitter = pendingChangesService = null