Skip to content

Commit

Permalink
Allow setting discount for an empty order
Browse files Browse the repository at this point in the history
  • Loading branch information
lukaszreszke committed Sep 8, 2023
1 parent 871d07e commit 453988c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
3 changes: 2 additions & 1 deletion rails_application/app/controllers/orders_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ def edit_discount

def update_discount
@order_id = params[:id]
if Orders::Order.find_by_uid(params[:id]).percentage_discount
order = Orders::Order.find_or_create_by!(uid: params[:id])
if order.percentage_discount
command_bus.(Pricing::ChangePercentageDiscount.new(order_id: @order_id, amount: params[:amount]))
else
command_bus.(Pricing::SetPercentageDiscount.new(order_id: @order_id, amount: params[:amount]))
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
module ClientOrders
class UpdateDiscount < Infra::EventHandler
def call(event)
order = Order.find_by(order_uid: event.data.fetch(:order_id))
order = Order.find_or_create_by!(order_uid: event.data.fetch(:order_id))
order.percentage_discount = event.data.fetch(:amount)
order.save!
end
Expand Down
25 changes: 25 additions & 0 deletions rails_application/test/integration/orders_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,31 @@ def test_order_value_doesnt_change_after_changing_price
assert_select("td", text: "$78.00")
end

def test_discount_is_applied_for_new_order
order_id = SecureRandom.uuid
async_remote_id = register_product("Async Remote", 39, 10)
fearless_id = register_product("Fearless Refactoring", 49, 10)
shopify_id = register_customer("Shopify")

assert_nothing_raised { apply_discount_10_percent(order_id)}

post "/orders/#{order_id}/add_item?product_id=#{async_remote_id}"
post "/orders/#{order_id}/add_item?product_id=#{fearless_id}"

post "/orders",
params: {
"authenticity_token" => "[FILTERED]",
"order_id" => order_id,
"customer_id" => shopify_id,
"commit" => "Submit order"
}

follow_redirect!
assert_select("td", "$79.20")
assert_select("dd", "Submitted")
assert_select("td", "10.0%")
end

private

def verify_shipping(order_id)
Expand Down

0 comments on commit 453988c

Please sign in to comment.