2016-06-30 11:34:19 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Gitlab::SlashCommands::Dsl do
|
|
|
|
before :all do
|
|
|
|
DummyClass = Class.new do
|
|
|
|
include Gitlab::SlashCommands::Dsl
|
|
|
|
|
|
|
|
desc 'A command with no args'
|
|
|
|
command :no_args, :none do
|
|
|
|
"Hello World!"
|
|
|
|
end
|
|
|
|
|
|
|
|
desc 'A command returning a value'
|
|
|
|
command :returning do
|
|
|
|
return 42
|
|
|
|
end
|
|
|
|
|
|
|
|
params 'The first argument'
|
|
|
|
command :one_arg, :once, :first do |arg1|
|
|
|
|
arg1
|
|
|
|
end
|
|
|
|
|
|
|
|
desc 'A command with two args'
|
|
|
|
params 'The first argument', 'The second argument'
|
|
|
|
command :two_args do |arg1, arg2|
|
|
|
|
[arg1, arg2]
|
|
|
|
end
|
|
|
|
|
|
|
|
command :wildcard do |*args|
|
|
|
|
args
|
|
|
|
end
|
2016-08-10 08:12:09 -04:00
|
|
|
|
|
|
|
noop true
|
|
|
|
command :cc do |*args|
|
|
|
|
args
|
|
|
|
end
|
2016-06-30 11:34:19 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
let(:dummy) { DummyClass.new }
|
|
|
|
|
|
|
|
describe '.command_definitions' do
|
|
|
|
it 'returns an array with commands definitions' do
|
|
|
|
expected = [
|
2016-08-10 08:12:09 -04:00
|
|
|
{ name: :no_args, aliases: [:none], description: 'A command with no args', params: [], noop: false },
|
|
|
|
{ name: :returning, aliases: [], description: 'A command returning a value', params: [], noop: false },
|
|
|
|
{ name: :one_arg, aliases: [:once, :first], description: '', params: ['The first argument'], noop: false },
|
|
|
|
{ name: :two_args, aliases: [], description: 'A command with two args', params: ['The first argument', 'The second argument'], noop: false },
|
|
|
|
{ name: :wildcard, aliases: [], description: '', params: [], noop: false },
|
|
|
|
{ name: :cc, aliases: [], description: '', params: [], noop: true }
|
2016-06-30 11:34:19 -04:00
|
|
|
]
|
|
|
|
|
|
|
|
expect(DummyClass.command_definitions).to eq expected
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '.command_names' do
|
|
|
|
it 'returns an array with commands definitions' do
|
|
|
|
expect(DummyClass.command_names).to eq [
|
|
|
|
:no_args, :none, :returning, :one_arg,
|
|
|
|
:once, :first, :two_args, :wildcard
|
|
|
|
]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'command with no args' do
|
|
|
|
context 'called with no args' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:no_args)).to eq 'Hello World!'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'command with an explicit return' do
|
|
|
|
context 'called with no args' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:returning)).to eq 42
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'command with one arg' do
|
|
|
|
context 'called with one arg' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:one_arg, 42)).to eq 42
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'command with two args' do
|
|
|
|
context 'called with two args' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:two_args, 42, 'foo')).to eq [42, 'foo']
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'command with wildcard' do
|
|
|
|
context 'called with no args' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:wildcard)).to eq []
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'called with one arg' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:wildcard, 42)).to eq [42]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'called with two args' do
|
|
|
|
it 'succeeds' do
|
|
|
|
expect(dummy.__send__(:wildcard, 42, 'foo')).to eq [42, 'foo']
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|