BigW Consortium Gitlab

extracts_path_spec.rb 2.83 KB
Newer Older
1 2 3 4
require 'spec_helper'

describe ExtractsPath do
  include ExtractsPath
5
  include RepoHelpers
6
  include Gitlab::Application.routes.url_helpers
7 8 9 10 11

  let(:project) { double('project') }

  before do
    @project = project
12

13 14
    repo = double(ref_names: ['master', 'foo/bar/baz', 'v1.0.0', 'v2.0.0',
                              'release/app', 'release/app/v1.0.0'])
15 16 17
    allow(project).to receive(:repository).and_return(repo)
    allow(project).to receive(:path_with_namespace).
      and_return('gitlab/gitlab-ci')
18 19
  end

20 21
  describe '#assign_ref' do
    let(:ref) { sample_commit[:id] }
22
    let(:params) { { path: sample_commit[:line_code_path], ref: ref } }
23 24 25 26 27 28 29 30 31

    before do
      @project = create(:project)
    end

    it "log tree path should have no escape sequences" do
      assign_ref_vars
      expect(@logs_path).to eq("/#{@project.path_with_namespace}/refs/#{ref}/logs_tree/files/ruby/popen.rb")
    end
32 33 34 35 36 37 38 39 40 41

    context 'escaped sequences in ref' do
      let(:ref) { "improve%2Fawesome" }

      it "id should have no escape sequences" do
        assign_ref_vars
        expect(@ref).to eq('improve/awesome')
        expect(@logs_path).to eq("/#{@project.path_with_namespace}/refs/#{ref}/logs_tree/files/ruby/popen.rb")
      end
    end
42 43
  end

44 45 46
  describe '#extract_ref' do
    it "returns an empty pair when no @project is set" do
      @project = nil
47
      expect(extract_ref('master/CHANGELOG')).to eq(['', ''])
48 49 50 51
    end

    context "without a path" do
      it "extracts a valid branch" do
52
        expect(extract_ref('master')).to eq(['master', ''])
53 54 55
      end

      it "extracts a valid tag" do
56
        expect(extract_ref('v2.0.0')).to eq(['v2.0.0', ''])
57 58 59
      end

      it "extracts a valid commit ref without a path" do
60
        expect(extract_ref('f4b14494ef6abf3d144c28e4af0c20143383e062')).to eq(
61
          ['f4b14494ef6abf3d144c28e4af0c20143383e062', '']
62
        )
63 64 65
      end

      it "falls back to a primitive split for an invalid ref" do
66
        expect(extract_ref('stable')).to eq(['stable', ''])
67
      end
68 69 70 71 72

      it "extracts the longest matching ref" do
        expect(extract_ref('release/app/v1.0.0/README.md')).to eq(
          ['release/app/v1.0.0', 'README.md'])
      end
73 74 75 76
    end

    context "with a path" do
      it "extracts a valid branch" do
77 78
        expect(extract_ref('foo/bar/baz/CHANGELOG')).to eq(
          ['foo/bar/baz', 'CHANGELOG'])
79 80 81
      end

      it "extracts a valid tag" do
82
        expect(extract_ref('v2.0.0/CHANGELOG')).to eq(['v2.0.0', 'CHANGELOG'])
83 84 85
      end

      it "extracts a valid commit SHA" do
86
        expect(extract_ref('f4b14494ef6abf3d144c28e4af0c20143383e062/CHANGELOG')).to eq(
87
          ['f4b14494ef6abf3d144c28e4af0c20143383e062', 'CHANGELOG']
88
        )
89 90 91
      end

      it "falls back to a primitive split for an invalid ref" do
92
        expect(extract_ref('stable/CHANGELOG')).to eq(['stable', 'CHANGELOG'])
93 94 95 96
      end
    end
  end
end