blob: 5d29de3414165d84c25d96b3bc6545ad9e6fe086 (
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
85
86
87
88
89
90
91
92
93
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Gitlab::GithubImport::Markdown::Attachment do
let(:name) { FFaker::Lorem.word }
let(:url) { FFaker::Internet.uri('https') }
describe '.from_markdown' do
context "when it's a doc attachment" do
let(:doc_extension) { Gitlab::GithubImport::Markdown::Attachment::DOC_TYPES.sample }
let(:url) { "https://github.com/nickname/public-test-repo/files/3/git-cheat-sheet.#{doc_extension}" }
let(:name) { FFaker::Lorem.word }
let(:markdown_node) do
instance_double('CommonMarker::Node', url: url, to_plaintext: name, type: :link)
end
it 'returns instance with attachment info' do
attachment = described_class.from_markdown(markdown_node)
expect(attachment.name).to eq name
expect(attachment.url).to eq url
end
context "when type is not in whitelist" do
let(:doc_extension) { 'exe' }
it { expect(described_class.from_markdown(markdown_node)).to eq nil }
end
context 'when domain name is unknown' do
let(:url) do
"https://bitbucket.com/nickname/public-test-repo/files/3/git-cheat-sheet.#{doc_extension}"
end
it { expect(described_class.from_markdown(markdown_node)).to eq nil }
end
end
context "when it's an image attachment" do
let(:image_extension) { Gitlab::GithubImport::Markdown::Attachment::MEDIA_TYPES.sample }
let(:url) { "https://user-images.githubusercontent.com/1/uuid-1.#{image_extension}" }
let(:name) { FFaker::Lorem.word }
let(:markdown_node) do
instance_double('CommonMarker::Node', url: url, to_plaintext: name, type: :image)
end
it 'returns instance with attachment info' do
attachment = described_class.from_markdown(markdown_node)
expect(attachment.name).to eq name
expect(attachment.url).to eq url
end
context "when type is not in whitelist" do
let(:image_extension) { 'mkv' }
it { expect(described_class.from_markdown(markdown_node)).to eq nil }
end
context 'when domain name is unknown' do
let(:url) { "https://user-images.github.com/1/uuid-1.#{image_extension}" }
it { expect(described_class.from_markdown(markdown_node)).to eq nil }
end
end
context "when it's an inline html node" do
let(:name) { FFaker::Lorem.word }
let(:image_extension) { Gitlab::GithubImport::Markdown::Attachment::MEDIA_TYPES.sample }
let(:url) { "https://user-images.githubusercontent.com/1/uuid-1.#{image_extension}" }
let(:img) { "<img width=\"248\" alt=\"#{name}\" src=\"#{url}\">" }
let(:markdown_node) do
instance_double('CommonMarker::Node', string_content: img, type: :inline_html)
end
it 'returns instance with attachment info' do
attachment = described_class.from_markdown(markdown_node)
expect(attachment.name).to eq name
expect(attachment.url).to eq url
end
end
end
describe '#inspect' do
it 'returns attachment basic info' do
attachment = described_class.new(name, url)
expect(attachment.inspect).to eq "<Gitlab::GithubImport::Markdown::Attachment: { name: #{name}, url: #{url} }>"
end
end
end
|