144 lines
3.6 KiB
Ruby
144 lines
3.6 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Gitlab::SlashCommands::CommandDefinition do
|
|
subject { described_class.new(:command) }
|
|
|
|
describe "#all_names" do
|
|
context "when the command has aliases" do
|
|
before do
|
|
subject.aliases = [:alias1, :alias2]
|
|
end
|
|
|
|
it "returns an array with the name and aliases" do
|
|
expect(subject.all_names).to eq([:command, :alias1, :alias2])
|
|
end
|
|
end
|
|
|
|
context "when the command doesn't have aliases" do
|
|
it "returns an array with the name" do
|
|
expect(subject.all_names).to eq([:command])
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#noop?" do
|
|
context "when the command has an action block" do
|
|
before do
|
|
subject.action_block = -> { }
|
|
end
|
|
|
|
it "returns false" do
|
|
expect(subject.noop?).to be false
|
|
end
|
|
end
|
|
|
|
context "when the command doesn't have an action block" do
|
|
it "returns true" do
|
|
expect(subject.noop?).to be true
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#available?" do
|
|
let(:opts) { { go: false } }
|
|
|
|
context "when the command has a condition block" do
|
|
before do
|
|
subject.condition_block = -> { go }
|
|
end
|
|
|
|
context "when the condition block returns true" do
|
|
before do
|
|
opts[:go] = true
|
|
end
|
|
|
|
it "returns true" do
|
|
expect(subject.available?(opts)).to be true
|
|
end
|
|
end
|
|
|
|
context "when the condition block returns false" do
|
|
it "returns false" do
|
|
expect(subject.available?(opts)).to be false
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when the command doesn't have a condition block" do
|
|
it "returns true" do
|
|
expect(subject.available?(opts)).to be true
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#execute" do
|
|
let(:context) { OpenStruct.new(run: false) }
|
|
|
|
context "when the command is a noop" do
|
|
it "doesn't execute the command" do
|
|
expect(context).not_to receive(:instance_exec)
|
|
|
|
subject.execute(context, {})
|
|
|
|
expect(context.run).to be false
|
|
end
|
|
end
|
|
|
|
context "when the command is not a noop" do
|
|
before do
|
|
subject.action_block = -> { self.run = true }
|
|
end
|
|
|
|
context "when the command is not available" do
|
|
before do
|
|
subject.condition_block = -> { false }
|
|
end
|
|
|
|
it "doesn't execute the command" do
|
|
subject.execute(context, {})
|
|
|
|
expect(context.run).to be false
|
|
end
|
|
end
|
|
|
|
context "when the command is available" do
|
|
context "when the command has an exact number of arguments" do
|
|
before do
|
|
subject.action_block = ->(arg) { self.run = arg }
|
|
end
|
|
|
|
context "when the command is provided a wrong number of arguments" do
|
|
it "doesn't execute the command" do
|
|
subject.execute(context, {}, true, true)
|
|
|
|
expect(context.run).to be false
|
|
end
|
|
end
|
|
|
|
context "when the command is provided the right number of arguments" do
|
|
it "executes the command" do
|
|
subject.execute(context, {}, true)
|
|
|
|
expect(context.run).to be true
|
|
end
|
|
end
|
|
end
|
|
|
|
context "when the command has a variable number of arguments" do
|
|
before do
|
|
subject.action_block = ->(*args) { self.run = args.first }
|
|
end
|
|
|
|
context "when the command is provided any number of arguments" do
|
|
it "executes the command" do
|
|
subject.execute(context, {}, true, true)
|
|
|
|
expect(context.run).to be true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|