Skip to content

Commit 56a553e

Browse files
author
Olexii Kasianenko
committed
fix(kit_creation): Refactor kit value calculation and update logic
1 parent 46287db commit 56a553e

4 files changed

Lines changed: 15 additions & 16 deletions

File tree

app/models/kit.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,13 @@ def reactivate
5555
item.update!(active: true)
5656
end
5757

58+
def update_value_in_cents
59+
kit_value_in_cents = line_items.includes(:item).reduce(0) do |sum, line_item|
60+
sum + line_item.item.value_in_cents.to_i * line_item.quantity.to_i
61+
end
62+
update!(value_in_cents: kit_value_in_cents)
63+
end
64+
5865
private
5966

6067
def at_least_one_item

app/services/item_update_service.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@ def call
2626
def update_kit_value
2727
return unless item.kit
2828

29-
kit_value_in_cents = item.kit.items.reduce(0) do |sum, i|
30-
sum + i.value_in_cents.to_i * item.kit.line_items.find_by(item_id: i.id).quantity.to_i
31-
end
32-
item.kit.update!(value_in_cents: kit_value_in_cents)
29+
item.kit.update_value_in_cents
3330
end
3431
end

app/services/kit_create_service.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,8 @@ def call
4343
unless item_creation_result.success?
4444
raise item_creation_result.error
4545
end
46-
kit.items.update_all(visible_to_partners: kit.visible_to_partners)
47-
kit_value_in_cents = kit.items.reduce(0) do |sum, i|
48-
sum + i.value_in_cents.to_i * kit.line_items.find_by(item_id: i.id).quantity.to_i
49-
end
50-
kit.update!(value_in_cents: kit_value_in_cents)
46+
kit.item.update(visible_to_partners: kit.visible_to_partners)
47+
kit.update_value_in_cents
5148
rescue StandardError => e
5249
errors.add(:base, e.message)
5350
raise ActiveRecord::Rollback

spec/services/item_update_service_spec.rb

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
let(:kit) { create(:kit) }
1010
let(:item) { create(:item, kit: kit) }
11-
let(:item2) { create(:item, kit: kit) }
11+
let(:line_item) { create(:line_item, item: item, quantity: 1) }
1212
let(:params) do
1313
{
1414
name: "Updated Item Name",
@@ -17,11 +17,9 @@
1717
}
1818
end
1919
let(:request_unit_ids) { [] }
20-
let(:kit_value_in_cents) do
21-
kit.line_items.reduce(0) do |sum, li|
22-
item = Item.find(li.item_id)
23-
sum + item.value_in_cents.to_i * li.quantity.to_i
24-
end
20+
21+
before do
22+
kit.line_items = [line_item]
2523
end
2624

2725
context "params are ok" do
@@ -42,7 +40,7 @@
4240
it "updates the kit value_in_cents" do
4341
subject
4442
kit.reload
45-
expect(kit.value_in_cents).to eq(kit_value_in_cents)
43+
expect(kit.value_in_cents).to eq(params[:value_in_cents])
4644
end
4745
end
4846

0 commit comments

Comments
 (0)