summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/slash_commands/dsl_spec.rb
blob: 2763d950716276727976d1d3ea534b11ccaa9729 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
require 'spec_helper'

describe Gitlab::SlashCommands::Dsl do
  before :all do
    DummyClass = Struct.new(:project) do
      include Gitlab::SlashCommands::Dsl # rubocop:disable RSpec/DescribedClass

      desc 'A command with no args'
      command :no_args, :none do
        "Hello World!"
      end

      params 'The first argument'
      command :one_arg, :once, :first do |arg1|
        arg1
      end

      desc do
        "A dynamic description for #{noteable.upcase}"
      end
      params 'The first argument', 'The second argument'
      command :two_args do |arg1, arg2|
        [arg1, arg2]
      end

      command :cc

      condition do
        project == 'foo'
      end
      command :cond_action do |arg|
        arg
      end
    end
  end

  describe '.command_definitions' do
    it 'returns an array with commands definitions' do
      no_args_def, one_arg_def, two_args_def, cc_def, cond_action_def = DummyClass.command_definitions

      expect(no_args_def.name).to eq(:no_args)
      expect(no_args_def.aliases).to eq([:none])
      expect(no_args_def.description).to eq('A command with no args')
      expect(no_args_def.params).to eq([])
      expect(no_args_def.condition_block).to be_nil
      expect(no_args_def.action_block).to be_a_kind_of(Proc)

      expect(one_arg_def.name).to eq(:one_arg)
      expect(one_arg_def.aliases).to eq([:once, :first])
      expect(one_arg_def.description).to eq('')
      expect(one_arg_def.params).to eq(['The first argument'])
      expect(one_arg_def.condition_block).to be_nil
      expect(one_arg_def.action_block).to be_a_kind_of(Proc)

      expect(two_args_def.name).to eq(:two_args)
      expect(two_args_def.aliases).to eq([])
      expect(two_args_def.to_h(noteable: "issue")[:description]).to eq('A dynamic description for ISSUE')
      expect(two_args_def.params).to eq(['The first argument', 'The second argument'])
      expect(two_args_def.condition_block).to be_nil
      expect(two_args_def.action_block).to be_a_kind_of(Proc)

      expect(cc_def.name).to eq(:cc)
      expect(cc_def.aliases).to eq([])
      expect(cc_def.description).to eq('')
      expect(cc_def.params).to eq([])
      expect(cc_def.condition_block).to be_nil
      expect(cc_def.action_block).to be_nil

      expect(cond_action_def.name).to eq(:cond_action)
      expect(cond_action_def.aliases).to eq([])
      expect(cond_action_def.description).to eq('')
      expect(cond_action_def.params).to eq([])
      expect(cond_action_def.condition_block).to be_a_kind_of(Proc)
      expect(cond_action_def.action_block).to be_a_kind_of(Proc)
    end
  end
end