summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/dependency_linker/parser/gemfile_spec.rb
blob: 9bfb1b13a2b5eaac191ee1948847350f11efd80a (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
# frozen_string_literal: true

require 'rails_helper'

describe Gitlab::DependencyLinker::Parser::Gemfile do
  describe '#parse' do
    let(:file_content) do
      <<-CONTENT.strip_heredoc
        source 'https://rubygems.org'

        gem "rails", '4.2.6', github: "rails/rails"
        gem 'rails-deprecated_sanitizer', '~> 1.0.3'
        gem 'responders', '~> 2.0', :github => 'rails/responders'
        gem 'sprockets', '~> 3.6.0', git: 'https://gitlab.example.com/gems/sprockets'
        gem 'default_value_for', '~> 3.0.0'
      CONTENT
    end

    subject { described_class.new(file_content).parse(keyword: 'gem') }

    def fetch_package(name)
      subject.find { |package| package.name == name }
    end

    it 'returns parsed packages' do
      expect(subject.size).to eq(5)
      expect(subject).to all(be_a(Gitlab::DependencyLinker::Package))
    end

    it 'packages respond to name and external_ref accordingly' do
      expect(fetch_package('rails')).to have_attributes(name: 'rails',
                                                        github_ref: 'rails/rails',
                                                        git_ref: nil)

      expect(fetch_package('sprockets')).to have_attributes(name: 'sprockets',
                                                            github_ref: nil,
                                                            git_ref: 'https://gitlab.example.com/gems/sprockets')

      expect(fetch_package('default_value_for')).to have_attributes(name: 'default_value_for',
                                                                    github_ref: nil,
                                                                    git_ref: nil)
    end
  end
end