53 lines
1.6 KiB
Ruby
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
|