BigW Consortium Gitlab

dsl_spec.rb 4.17 KB
Newer Older
1 2
require 'spec_helper'

3
describe Gitlab::QuickActions::Dsl do
4
  before :all do
5
    DummyClass = Struct.new(:project) do
6
      include Gitlab::QuickActions::Dsl # rubocop:disable RSpec/DescribedClass
7 8 9 10 11 12 13

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

      params 'The first argument'
14 15 16
      explanation 'Static explanation'
      command :explanation_with_aliases, :once, :first do |arg|
        arg
17 18
      end

19 20 21
      desc do
        "A dynamic description for #{noteable.upcase}"
      end
22
      params 'The first argument', 'The second argument'
23 24
      command :dynamic_description do |args|
        args.split
25 26
      end

27
      command :cc
28

29 30 31
      explanation do |arg|
        "Action does something with #{arg}"
      end
32 33 34 35 36
      condition do
        project == 'foo'
      end
      command :cond_action do |arg|
        arg
37
      end
38 39 40 41 42 43 44

      parse_params do |raw_arg|
        raw_arg.strip
      end
      command :with_params_parsing do |parsed|
        parsed
      end
45 46 47 48
    end
  end

  describe '.command_definitions' do
49
    it 'returns an array with commands definitions' do
50 51 52
      no_args_def, explanation_with_aliases_def, dynamic_description_def,
      cc_def, cond_action_def, with_params_parsing_def =
        DummyClass.command_definitions
53 54 55 56

      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')
57
      expect(no_args_def.explanation).to eq('')
58 59 60
      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)
61
      expect(no_args_def.parse_params_block).to be_nil
62

63 64 65 66 67 68 69 70
      expect(explanation_with_aliases_def.name).to eq(:explanation_with_aliases)
      expect(explanation_with_aliases_def.aliases).to eq([:once, :first])
      expect(explanation_with_aliases_def.description).to eq('')
      expect(explanation_with_aliases_def.explanation).to eq('Static explanation')
      expect(explanation_with_aliases_def.params).to eq(['The first argument'])
      expect(explanation_with_aliases_def.condition_block).to be_nil
      expect(explanation_with_aliases_def.action_block).to be_a_kind_of(Proc)
      expect(explanation_with_aliases_def.parse_params_block).to be_nil
71

72 73 74 75 76 77 78 79
      expect(dynamic_description_def.name).to eq(:dynamic_description)
      expect(dynamic_description_def.aliases).to eq([])
      expect(dynamic_description_def.to_h(noteable: 'issue')[:description]).to eq('A dynamic description for ISSUE')
      expect(dynamic_description_def.explanation).to eq('')
      expect(dynamic_description_def.params).to eq(['The first argument', 'The second argument'])
      expect(dynamic_description_def.condition_block).to be_nil
      expect(dynamic_description_def.action_block).to be_a_kind_of(Proc)
      expect(dynamic_description_def.parse_params_block).to be_nil
80

81 82 83
      expect(cc_def.name).to eq(:cc)
      expect(cc_def.aliases).to eq([])
      expect(cc_def.description).to eq('')
84
      expect(cc_def.explanation).to eq('')
85 86 87
      expect(cc_def.params).to eq([])
      expect(cc_def.condition_block).to be_nil
      expect(cc_def.action_block).to be_nil
88
      expect(cc_def.parse_params_block).to be_nil
89

90 91 92
      expect(cond_action_def.name).to eq(:cond_action)
      expect(cond_action_def.aliases).to eq([])
      expect(cond_action_def.description).to eq('')
93
      expect(cond_action_def.explanation).to be_a_kind_of(Proc)
94 95 96
      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)
97 98 99 100 101 102 103 104 105 106
      expect(cond_action_def.parse_params_block).to be_nil

      expect(with_params_parsing_def.name).to eq(:with_params_parsing)
      expect(with_params_parsing_def.aliases).to eq([])
      expect(with_params_parsing_def.description).to eq('')
      expect(with_params_parsing_def.explanation).to eq('')
      expect(with_params_parsing_def.params).to eq([])
      expect(with_params_parsing_def.condition_block).to be_nil
      expect(with_params_parsing_def.action_block).to be_a_kind_of(Proc)
      expect(with_params_parsing_def.parse_params_block).to be_a_kind_of(Proc)
107 108 109
    end
  end
end