summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/dependency_linker/godeps_json_linker_spec.rb
blob: e279e0c9019ea2fe99a7ded3c39f1eb87607d28b (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
78
79
80
81
82
83
84
require 'rails_helper'

describe Gitlab::DependencyLinker::GodepsJsonLinker, lib: true do
  describe '.support?' do
    it 'supports Godeps.json' do
      expect(described_class.support?('Godeps.json')).to be_truthy
    end

    it 'does not support other files' do
      expect(described_class.support?('Godeps.json.example')).to be_falsey
    end
  end

  describe '#link' do
    let(:file_name) { "Godeps.json" }

    let(:file_content) do
      <<-CONTENT.strip_heredoc
        {
        	"ImportPath": "gitlab.com/gitlab-org/gitlab-pages",
        	"GoVersion": "go1.5",
        	"Packages": [
        		"./..."
        	],
        	"Deps": [
        		{
        			"ImportPath": "github.com/kardianos/osext",
        			"Rev": "efacde03154693404c65e7aa7d461ac9014acd0c"
        		},
        		{
        			"ImportPath": "github.com/stretchr/testify/assert",
        			"Rev": "1297dc01ed0a819ff634c89707081a4df43baf6b"
        		},
        		{
        			"ImportPath": "github.com/stretchr/testify/require",
        			"Rev": "1297dc01ed0a819ff634c89707081a4df43baf6b"
        		},
        		{
        			"ImportPath": "gitlab.com/group/project/path",
        			"Rev": "1297dc01ed0a819ff634c89707081a4df43baf6b"
        		},
        		{
        			"ImportPath": "gitlab.com/group/subgroup/project.git/path",
        			"Rev": "1297dc01ed0a819ff634c89707081a4df43baf6b"
        		},
        		{
        			"ImportPath": "golang.org/x/crypto/ssh/terminal",
        			"Rev": "1351f936d976c60a0a48d728281922cf63eafb8d"
        		},
        		{
        			"ImportPath": "golang.org/x/net/http2",
        			"Rev": "b4e17d61b15679caf2335da776c614169a1b4643"
        		}
        	]
        }
      CONTENT
    end

    subject { Gitlab::Highlight.highlight(file_name, file_content) }

    def link(name, url)
      %{<a href="#{url}" rel="nofollow noreferrer noopener" target="_blank">#{name}</a>}
    end

    it 'links the package name' do
      expect(subject).to include(link('gitlab.com/gitlab-org/gitlab-pages', 'https://gitlab.com/gitlab-org/gitlab-pages'))
    end

    it 'links GitHub repos' do
      expect(subject).to include(link('github.com/kardianos/osext', 'https://github.com/kardianos/osext'))
      expect(subject).to include(link('github.com/stretchr/testify/assert', 'https://github.com/stretchr/testify/tree/master/assert'))
      expect(subject).to include(link('github.com/stretchr/testify/require', 'https://github.com/stretchr/testify/tree/master/require'))
    end

    it 'links GitLab projects' do
      expect(subject).to include(link('gitlab.com/group/project/path', 'https://gitlab.com/group/project/tree/master/path'))
      expect(subject).to include(link('gitlab.com/group/subgroup/project.git/path', 'https://gitlab.com/group/subgroup/project/tree/master/path'))
    end

    it 'links Golang packages' do
      expect(subject).to include(link('golang.org/x/net/http2', 'https://godoc.org/golang.org/x/net/http2'))
    end
  end
end