Files
fizzy/test/models/command/composite_test.rb
T
2025-05-16 15:38:22 +02:00

53 lines
1.6 KiB
Ruby

require "test_helper"
class Command::CompositeTest < ActionDispatch::IntegrationTest
include CommandTestHelper
test "execute commands in order and return an array with the results" do
command = Command::Composite.new(commands: [ build_command(result: "1"), build_command(result: "2") ])
assert_equal [ "1", "2" ], command.execute
end
test "undo the commands in reverse order" do
command = Command::Composite.new(commands: [ build_command(result: "1", undoable: true), build_command(result: "2", undoable: true) ])
assert_equal [ "2", "1" ], command.undo
end
test "undoable if some of the commands is" do
assert_not Command::Composite.new(commands: [ build_command(undoable: false), build_command(undoable: false) ]).undoable?
assert Command::Composite.new(commands: [ build_command(undoable: true), build_command(undoable: false) ]).undoable?
end
test "needs confirmation if some of the command does" do
assert_not Command::Composite.new(commands: [ build_command(needs_confirmation: false), build_command(needs_confirmation: false) ]).needs_confirmation?
assert Command::Composite.new(commands: [ build_command(needs_confirmation: true), build_command(needs_confirmation: false) ]).needs_confirmation?
end
private
def build_command(...)
TestCommand.new(...)
end
class TestCommand < Command
attribute :result
attribute :undoable
attribute :needs_confirmation
def execute
result
end
def undo
result
end
def undoable?
undoable
end
def needs_confirmation?
needs_confirmation
end
end
end