Skip to content

Commit

Permalink
Add amount to voucher
Browse files Browse the repository at this point in the history
Change value to amount to be more consistent
  • Loading branch information
rioug committed May 5, 2023
1 parent dbc0f2e commit 2da76b2
Show file tree
Hide file tree
Showing 7 changed files with 22 additions and 19 deletions.
9 changes: 3 additions & 6 deletions app/models/voucher.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,10 @@ class Voucher < ApplicationRecord
dependent: :nullify

validates :code, presence: true, uniqueness: { scope: :enterprise_id }

def value
10
end
validates :amount, presence: true, numericality: { greater_than: 0 }

def display_value
Spree::Money.new(value)
Spree::Money.new(amount)
end

# Ideally we would use `include CalculatedAdjustments` to be consistent with other adjustments,
Expand All @@ -44,6 +41,6 @@ def create_adjustment(label, order)
# We limit adjustment to the maximum amount needed to cover the order, ie if the voucher
# covers more than the order.total we only need to create an adjustment covering the order.total
def compute_amount(order)
-value.clamp(0, order.total)
-amount.clamp(0, order.total)
end
end
4 changes: 2 additions & 2 deletions app/views/split_checkout/_voucher_section.cable_ready.haml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
= t("split_checkout.step2.voucher.voucher", voucher_amount: voucher_adjustment.originator.display_value)
= link_to t("split_checkout.step2.voucher.remove_code"), voucher_adjustment_path(id: voucher_adjustment.id), method: "delete", data: { confirm: t("split_checkout.step2.voucher.confirm_delete") }
- # This might not be true, ie payment method including a fee which wouldn't be covered by voucher or tax implication raising total to be bigger than the voucher amount ?
- if voucher_adjustment.originator.value > order.total
- if voucher_adjustment.originator.amount > order.total
.checkout-input
%span.formError.standalone
= t("split_checkout.step2.voucher.warning_forfeit_remaining_amount")
- else
= text_field_tag "[order][voucher_code]", params.dig(:order, :voucher_code), data: { action: "input->toggle-button-disabled#inputIsChanged", }, placeholder: t("split_checkout.step2.voucher.placeholder") , class: "voucher"
= submit_tag t("split_checkout.step2.voucher.apply"), name: "apply_voucher", disabled: true, class: "button cancel voucher", "data-disable-with": false, data: { "toggle-button-disabled-target": "button" }
= submit_tag t("split_checkout.step2.voucher.apply"), name: "apply_voucher", disabled: true, class: "button cancel voucher", "data-disable-with": false, data: { "toggle-button-disabled-target": "button" }
1 change: 1 addition & 0 deletions db/schema.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1205,6 +1205,7 @@
t.datetime "updated_at", precision: 6, null: false
t.bigint "enterprise_id"
t.datetime "deleted_at"
t.decimal "amount", precision: 10, scale: 2, default: "0.0", null: false
t.index ["code", "enterprise_id"], name: "index_vouchers_on_code_and_enterprise_id", unique: true
t.index ["deleted_at"], name: "index_vouchers_on_deleted_at"
t.index ["enterprise_id"], name: "index_vouchers_on_enterprise_id"
Expand Down
10 changes: 6 additions & 4 deletions spec/models/voucher_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@

it { is_expected.to validate_presence_of(:code) }
it { is_expected.to validate_uniqueness_of(:code).scoped_to(:enterprise_id) }
it { is_expected.to validate_presence_of(:amount) }
it { is_expected.to validate_numericality_of(:amount).is_greater_than(0) }
end

describe '#compute_amount' do
subject { Voucher.create(code: 'new_code', enterprise: enterprise) }
subject { Voucher.create(code: 'new_code', enterprise: enterprise, amount: 10) }

let(:order) { create(:order_with_totals) }

Expand All @@ -39,11 +41,11 @@
describe '#create_adjustment' do
subject(:adjustment) { voucher.create_adjustment(voucher.code, order) }

let(:voucher) { Voucher.create(code: 'new_code', enterprise: enterprise) }
let(:order) { create(:order_with_line_items, line_items_count: 1, distributor: enterprise) }
let(:voucher) { Voucher.create(code: 'new_code', enterprise: enterprise, amount: 25) }
let(:order) { create(:order_with_line_items, line_items_count: 3, distributor: enterprise) }

it 'includes the full voucher amount' do
expect(adjustment.amount.to_f).to eq(-10.0)
expect(adjustment.amount.to_f).to eq(-25.0)
end

it 'has no included_tax' do
Expand Down
10 changes: 7 additions & 3 deletions spec/system/consumer/split_checkout_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -720,7 +720,8 @@
end

context "with voucher available" do
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: amount) }
let(:amount) { 15 }

before do
visit checkout_step_path(:payment)
Expand All @@ -738,7 +739,7 @@
end

it "adds a voucher to the order" do
expect(page).to have_content("$10.00 Voucher")
expect(page).to have_content("$15.00 Voucher")
expect(order.reload.voucher_adjustments.length).to eq(1)
end
end
Expand Down Expand Up @@ -1111,20 +1112,23 @@
end

describe "vouchers" do
let(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
let(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: 6) }

before do
# Add voucher to the order
voucher.create_adjustment(voucher.code, order)

# Update order so voucher adjustment is properly taken into account
order.update_order!
VoucherAdjustmentsService.calculate(order)

visit checkout_step_path(:summary)
end

it "shows the applied voucher" do
within ".summary-right" do
expect(page).to have_content "some_code"
expect(page).to have_content "-6"
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions spec/system/consumer/split_checkout_tax_incl_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@
end

context "when using a voucher" do
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: 10) }

it "will include a tax included amount on the voucher adjustment" do
visit checkout_step_path(:details)
Expand All @@ -149,7 +149,7 @@
fill_in "Enter voucher code", with: voucher.code
click_button("Apply")

# Choose payment ??
# Choose payment
click_on "Next - Order summary"
click_on "Complete order"

Expand Down
3 changes: 1 addition & 2 deletions spec/system/consumer/split_checkout_tax_not_incl_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
end

context "when using a voucher" do
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor) }
let!(:voucher) { Voucher.create(code: 'some_code', enterprise: distributor, amount: 10) }

it "will include a tax included amount on the voucher adjustment" do
visit checkout_step_path(:details)
Expand All @@ -156,7 +156,6 @@
fill_in "Enter voucher code", with: voucher.code
click_button("Apply")

# Choose payment ??
click_on "Next - Order summary"
click_on "Complete order"

Expand Down

0 comments on commit 2da76b2

Please sign in to comment.