Skip to content

Commit f185471

Browse files
Cover ClientOrders handlers with mutation testing
Existing tests already kill all ProductHandler mutants — remove the three wildcard ignores. Separate persist from broadcast logic in RemoveItemFromOrder so its data path is testable, replacing the whole-class wildcard with targeted broadcast-only ignores.
1 parent f659b05 commit f185471

2 files changed

Lines changed: 20 additions & 12 deletions

File tree

apps/rails_application/.mutant.yml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,17 @@ matcher:
4040
- ClientOrders::Configuration#subscribe_and_link_to_stream
4141
- ClientOrders::Configuration#link_to_stream
4242
- ClientOrders::Configuration#with_order
43-
- ClientOrders::Rendering::OrdersList*
44-
- ClientOrders::RemoveItemFromOrder*
45-
- ClientOrders::AddItemToOrder#show_remove_item_button
46-
- ClientOrders::AddItemToOrder#remove_button_html
43+
- ClientOrders::AddItemToOrder#call
4744
- ClientOrders::AddItemToOrder#broadcast_to_ui
4845
- ClientOrders::AddItemToOrder#broadcast_update
49-
- ClientOrders::AddItemToOrder#call
50-
- ClientOrders::ProductHandlers::ChangeProductName*
51-
- ClientOrders::ProductHandlers::ChangeProductPrice*
52-
- ClientOrders::ProductHandlers::RegisterProduct*
46+
- ClientOrders::AddItemToOrder#show_remove_item_button
47+
- ClientOrders::AddItemToOrder#remove_button_html
48+
- ClientOrders::RemoveItemFromOrder#call
49+
- ClientOrders::RemoveItemFromOrder#broadcast_to_ui
50+
- ClientOrders::RemoveItemFromOrder#broadcast_update
51+
- ClientOrders::RemoveItemFromOrder#zero_quantity?
52+
- ClientOrders::RemoveItemFromOrder#event_store
53+
- ClientOrders::Rendering::OrdersList*
5354
- ClientOrders::Rendering::ShowOrder*
5455
- ClientOrders::Rendering::EditOrder*
5556
- Processes::Configuration*

apps/rails_application/app/read_models/client_orders/remove_item_from_order.rb

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
module ClientOrders
22
class RemoveItemFromOrder
33
def call(event)
4-
product_id = event.data.fetch(:product_id)
5-
order_id = event.data.fetch(:order_id)
6-
item = find(order_id , product_id)
4+
item = persist_item(event)
5+
broadcast_to_ui(item, event)
6+
end
7+
8+
def persist_item(event)
9+
item = find(event.data.fetch(:order_id), event.data.fetch(:product_id))
710
item.product_quantity -= 1
811
item.product_quantity > 0 ? item.save! : item.destroy!
12+
item
13+
end
914

15+
def broadcast_to_ui(item, event)
16+
order_id = event.data.fetch(:order_id)
17+
product_id = event.data.fetch(:product_id)
1018
broadcast_update(order_id, product_id, "product_quantity", item.product_quantity)
1119
broadcast_update(order_id, product_id, "value", ActiveSupport::NumberHelper.number_to_currency(item.value))
1220
broadcast_update(order_id, product_id, "remove_item_button", "") if zero_quantity?(item)
13-
1421
event_store.link_event_to_stream(event, "ClientOrders$all")
1522
end
1623

0 commit comments

Comments
 (0)