BigW Consortium Gitlab

changelog_spec.rb 2.52 KB
Newer Older
1 2 3 4 5 6
require 'spec_helper'

load File.expand_path('../../bin/changelog', __dir__)

describe 'bin/changelog' do
  describe ChangelogOptionParser do
7 8 9
    describe '.parse' do
      it 'parses --amend' do
        options = described_class.parse(%w[foo bar --amend])
10

11 12
        expect(options.amend).to eq true
      end
13

14 15 16
      it 'parses --force and -f' do
        %w[--force -f].each do |flag|
          options = described_class.parse(%W[foo #{flag} bar])
17

18 19
          expect(options.force).to eq true
        end
20
      end
21

22 23 24
      it 'parses --merge-request and -m' do
        %w[--merge-request -m].each do |flag|
          options = described_class.parse(%W[foo #{flag} 1234 bar])
25

26 27
          expect(options.merge_request).to eq 1234
        end
28
      end
29

30 31 32
      it 'parses --dry-run and -n' do
        %w[--dry-run -n].each do |flag|
          options = described_class.parse(%W[foo #{flag} bar])
33

34 35
          expect(options.dry_run).to eq true
        end
36
      end
37

38 39
      it 'parses --git-username and -u' do
        allow(described_class).to receive(:git_user_name).and_return('Jane Doe')
40

41 42
        %w[--git-username -u].each do |flag|
          options = described_class.parse(%W[foo #{flag} bar])
43

44 45 46 47 48 49 50 51 52 53
          expect(options.author).to eq 'Jane Doe'
        end
      end

      it 'parses --type and -t' do
        %w[--type -t].each do |flag|
          options = described_class.parse(%W[foo #{flag} security])

          expect(options.type).to eq 'security'
        end
54
      end
55

56 57 58 59 60 61 62 63 64 65 66
      it 'parses -h' do
        expect do
          expect { described_class.parse(%w[foo -h bar]) }.to output.to_stdout
        end.to raise_error(SystemExit)
      end

      it 'assigns title' do
        options = described_class.parse(%W[foo -m 1 bar\n -u baz\r\n --amend])

        expect(options.title).to eq 'foo bar baz'
      end
67 68
    end

69 70
    describe '.read_type'  do
      let(:type) { '1' }
71

72 73 74 75 76 77 78 79 80 81 82 83 84 85
      it 'reads type from $stdin' do
        expect($stdin).to receive(:getc).and_return(type)
        expect do
          expect(described_class.read_type).to eq('added')
        end.to output.to_stdout
      end

      context 'invalid type given' do
        let(:type) { '99' }

        it 'shows error message and exits the program' do
          allow($stdin).to receive(:getc).and_return(type)
          expect do
            expect do
86
              expect { described_class.read_type }.to raise_error(SystemExit)
87 88 89 90
            end.to output("Invalid category index, please select an index between 1 and 7\n").to_stderr
          end.to output.to_stdout
        end
      end
91 92 93
    end
  end
end