Skip to content

Commit

Permalink
document currently possible order state transitions with test
Browse files Browse the repository at this point in the history
1st step towards #267
  • Loading branch information
pjurewicz committed Apr 30, 2024
1 parent 8da3e77 commit 031bf3b
Showing 1 changed file with 94 additions and 3 deletions.
97 changes: 94 additions & 3 deletions ecommerce/ordering/test/order_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class OrderTest < Test

def setup
super
@order_id = SecureRandom.uuid
@order_id = SecureRandom.uuid
@product_id = SecureRandom.uuid
@customer_id = SecureRandom.uuid
end
Expand All @@ -24,7 +24,7 @@ def test_order_lines_with_the_same_product_twice
order.add_item(@product_id)
order.add_item(@product_id)
order.submit(NumberGenerator.new.call)
assert_equal({@product_id => 2}, order.unpublished_events.to_a.last.data[:order_lines])
assert_equal({ @product_id => 2 }, order.unpublished_events.to_a.last.data[:order_lines])
end

def test_order_lines_after_adding_twice_and_remove_once
Expand All @@ -33,7 +33,98 @@ def test_order_lines_after_adding_twice_and_remove_once
order.add_item(@product_id)
order.remove_item(@product_id)
order.submit(NumberGenerator.new.call)
assert_equal({@product_id => 1}, order.unpublished_events.to_a.last.data[:order_lines])
assert_equal({ @product_id => 1 }, order.unpublished_events.to_a.last.data[:order_lines])
end

def test_disallowed_order_state_transitions
draft_order.submit(NumberGenerator.new.call)
assert_raises(Order::InvalidState) { draft_order.accept }
assert_raises(Order::InvalidState) { draft_order.reject }
assert_raises(Order::InvalidState) { draft_order.cancel }
assert_raises(Order::InvalidState) { draft_order.confirm }
draft_order.expire

assert_raises(Order::InvalidState) { submitted_order.submit(NumberGenerator.new.call) }
submitted_order.accept
submitted_order.reject
assert_raises(Order::InvalidState) { submitted_order.cancel }
assert_raises(Order::InvalidState) { submitted_order.confirm }
submitted_order.expire

placed_order.submit(NumberGenerator.new.call)
assert_raises(Order::InvalidState) { placed_order.accept }
assert_raises(Order::InvalidState) { placed_order.reject }
placed_order.cancel
placed_order.confirm
placed_order.expire

confirmed_order.submit(NumberGenerator.new.call)
assert_raises(Order::InvalidState) { confirmed_order.accept }
assert_raises(Order::InvalidState) { confirmed_order.reject }
assert_raises(Order::InvalidState) { confirmed_order.cancel }
assert_raises(Order::InvalidState) { confirmed_order.confirm }
assert_raises(Order::InvalidState) { confirmed_order.expire }

assert_raises(Order::InvalidState) { expired_order.submit(NumberGenerator.new.call) }
assert_raises(Order::InvalidState) { rejected_order.accept }
assert_raises(Order::InvalidState) { rejected_order.reject }
assert_raises(Order::InvalidState) { rejected_order.cancel }
assert_raises(Order::InvalidState) { rejected_order.confirm }
rejected_order.expire

assert_raises(Order::InvalidState) { expired_order.submit(NumberGenerator.new.call) }
assert_raises(Order::InvalidState) { expired_order.accept }
assert_raises(Order::InvalidState) { expired_order.reject }
assert_raises(Order::InvalidState) { expired_order.cancel }
assert_raises(Order::InvalidState) { expired_order.confirm }
expired_order.expire

cancelled_order.submit(NumberGenerator.new.call)
assert_raises(Order::InvalidState) { cancelled_order.accept }
assert_raises(Order::InvalidState) { cancelled_order.reject }
assert_raises(Order::InvalidState) { cancelled_order.confirm }
assert_raises(Order::InvalidState) { cancelled_order.cancel }
cancelled_order.expire
end

def draft_order
Order.new(@order_id)
end

def submitted_order
draft_order.tap do |order|
order.submit(NumberGenerator.new.call)
end
end

def placed_order
submitted_order.tap do |order|
order.accept
end
end

def rejected_order
submitted_order.tap do |order|
order.reject
end
end

def confirmed_order
placed_order.tap do |order|
order.confirm
end
end

def expired_order
draft_order.tap do |order|
order.expire
end
end

def cancelled_order
submitted_order.tap do |order|
order.reject
end
end
end
end

0 comments on commit 031bf3b

Please sign in to comment.