require 'spec_helper' feature "Tiered Calculator Promotions" do stub_authorization! let(:promotion) { create :promotion } background do visit spree.edit_admin_promotion_path(promotion) end scenario "adding a tiered percent calculator", js: true do select "Create whole-order adjustment", from: "Add action of type" within('#action_fields') { click_button "Add" } select "Tiered Percent", from: "Base Calculator" within('#actions_container') { click_button "Update" } within("#actions_container .settings") do expect(page).to have_content("Base Percent") expect(page).to have_content("Tiers") click_button "Add" end fill_in "Base Percent", with: 5 within(".tier") do find("input:last-child").set(100) find("input:first-child").set(10) end within('#actions_container') { click_button "Update" } first_action = promotion.actions.first expect(first_action.class).to eq Spree::Promotion::Actions::CreateAdjustment first_action_calculator = first_action.calculator expect(first_action_calculator.class).to eq Spree::Calculator::TieredPercent expect(first_action_calculator.preferred_base_percent).to eq 5 expect(first_action_calculator.preferred_tiers).to eq(BigDecimal.new(100) => BigDecimal.new(10)) end context "with an existing tiered flat rate calculator" do let(:promotion) { create :promotion, :with_order_adjustment } background do action = promotion.actions.first action.calculator = Spree::Calculator::TieredFlatRate.new action.calculator.preferred_base_amount = 5 action.calculator.preferred_tiers = {100 => 10, 200 => 15, 300 => 20} action.calculator.save! visit spree.edit_admin_promotion_path(promotion) end scenario "deleting a tier", js: true do within(".tier:nth-child(2)") do find(".remove").click end within('#actions_container') { click_button "Update" } calculator = promotion.actions.first.calculator expect(calculator.preferred_tiers).to eq({ BigDecimal.new(100) => 10, BigDecimal.new(300) => 20 }) end end end