| ... | @@ -289,121 +289,72 @@ describe Banzai::Filter::RelativeLinkFilter do |
... | @@ -289,121 +289,72 @@ describe Banzai::Filter::RelativeLinkFilter do |
|
|
let(:relative_path) { "/#{project.full_path}#{upload_path}" }
|
|
let(:relative_path) { "/#{project.full_path}#{upload_path}" }
|
|
|
|
|
|
|
|
context 'to a project upload' do
|
|
context 'to a project upload' do
|
|
|
context 'without project repository access' do
|
|
shared_examples 'rewrite project uploads' do
|
|
|
let(:project) { create(:project, :repository, repository_access_level: ProjectFeature::PRIVATE) }
|
|
|
|
|
|
|
|
|
|
it 'does not rebuild relative URL for a link' do
|
|
|
|
|
doc = filter(link(upload_path))
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(upload_path)
|
|
|
|
|
|
|
|
|
|
doc = filter(nested(link(upload_path)))
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(upload_path)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'does not rebuild relative URL for an image' do
|
|
|
|
|
doc = filter(image(upload_path))
|
|
|
|
|
expect(doc.at_css('img')['src']).to eq(upload_path)
|
|
|
|
|
|
|
|
|
|
doc = filter(nested(image(upload_path)))
|
|
|
|
|
expect(doc.at_css('img')['src']).to eq(upload_path)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'with an absolute URL' do
|
|
context 'with an absolute URL' do
|
|
|
let(:absolute_path) { Gitlab.config.gitlab.url + relative_path }
|
|
let(:absolute_path) { Gitlab.config.gitlab.url + relative_path }
|
|
|
let(:only_path) { false }
|
|
let(:only_path) { false }
|
|
|
|
|
|
|
|
it 'does not rewrite the link' do
|
|
it 'rewrites the link correctly' do
|
|
|
doc = filter(link(upload_path))
|
|
doc = filter(link(upload_path))
|
|
|
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(upload_path)
|
|
expect(doc.at_css('a')['href']).to eq(absolute_path)
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'with an absolute URL' do
|
|
it 'rebuilds relative URL for a link' do
|
|
|
let(:absolute_path) { Gitlab.config.gitlab.url + relative_path }
|
|
|
|
|
let(:only_path) { false }
|
|
|
|
|
|
|
|
|
|
it 'rewrites the link correctly' do
|
|
|
|
|
doc = filter(link(upload_path))
|
|
doc = filter(link(upload_path))
|
|
|
|
expect(doc.at_css('a')['href']).to eq(relative_path)
|
|
|
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(absolute_path)
|
|
doc = filter(nested(link(upload_path)))
|
|
|
|
expect(doc.at_css('a')['href']).to eq(relative_path)
|
|
|
end
|
|
end
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'rebuilds relative URL for a link' do
|
|
it 'rebuilds relative URL for an image' do
|
|
|
doc = filter(link(upload_path))
|
|
doc = filter(image(upload_path))
|
|
|
expect(doc.at_css('a')['href']).to eq(relative_path)
|
|
expect(doc.at_css('img')['src']).to eq(relative_path)
|
|
|
|
|
|
|
|
doc = filter(nested(link(upload_path)))
|
|
doc = filter(nested(image(upload_path)))
|
|
|
expect(doc.at_css('a')['href']).to eq(relative_path)
|
|
expect(doc.at_css('img')['src']).to eq(relative_path)
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
it 'rebuilds relative URL for an image' do
|
|
it 'does not modify absolute URL' do
|
|
|
doc = filter(image(upload_path))
|
|
doc = filter(link('http://example.com'))
|
|
|
expect(doc.at_css('img')['src']).to eq(relative_path)
|
|
expect(doc.at_css('a')['href']).to eq 'http://example.com'
|
|
|
|
end
|
|
|
|
|
|
|
|
doc = filter(nested(image(upload_path)))
|
|
it 'supports unescaped Unicode filenames' do
|
|
|
expect(doc.at_css('img')['src']).to eq(relative_path)
|
|
path = '/uploads/한글.png'
|
|
|
end
|
|
doc = filter(link(path))
|
|
|
|
|
|
|
|
it 'does not modify absolute URL' do
|
|
expect(doc.at_css('a')['href']).to eq("/#{project.full_path}/uploads/%ED%95%9C%EA%B8%80.png")
|
|
|
doc = filter(link('http://example.com'))
|
|
end
|
|
|
expect(doc.at_css('a')['href']).to eq 'http://example.com'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'supports unescaped Unicode filenames' do
|
|
it 'supports escaped Unicode filenames' do
|
|
|
path = '/uploads/한글.png'
|
|
path = '/uploads/한글.png'
|
|
|
doc = filter(link(path))
|
|
escaped = Addressable::URI.escape(path)
|
|
|
|
doc = filter(image(escaped))
|
|
|
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq("/#{project.full_path}/uploads/%ED%95%9C%EA%B8%80.png")
|
|
expect(doc.at_css('img')['src']).to eq("/#{project.full_path}/uploads/%ED%95%9C%EA%B8%80.png")
|
|
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
it 'supports escaped Unicode filenames' do
|
|
context 'without project repository access' do
|
|
|
path = '/uploads/한글.png'
|
|
let(:project) { create(:project, :repository, repository_access_level: ProjectFeature::PRIVATE) }
|
|
|
escaped = Addressable::URI.escape(path)
|
|
|
|
|
doc = filter(image(escaped))
|
|
it_behaves_like 'rewrite project uploads'
|
|
|
|
end
|
|
|
|
|
|
|
|
expect(doc.at_css('img')['src']).to eq("/#{project.full_path}/uploads/%ED%95%9C%EA%B8%80.png")
|
|
context 'with project repository access' do
|
|
|
|
it_behaves_like 'rewrite project uploads'
|
|
|
end
|
|
end
|
|
|
end
|
|
end
|
|
|
|
|
|
|
|
context 'to a group upload' do
|
|
context 'to a group upload' do
|
|
|
let(:upload_path) { '/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg' }
|
|
let(:upload_link) { link('/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg') }
|
|
|
let(:upload_link) { link(upload_path) }
|
|
|
|
|
let(:group) { create(:group) }
|
|
let(:group) { create(:group) }
|
|
|
let(:project) { nil }
|
|
let(:project) { nil }
|
|
|
let(:relative_path) { "/groups/#{group.full_path}/-/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg" }
|
|
let(:relative_path) { "/groups/#{group.full_path}/-/uploads/e90decf88d8f96fe9e1389afc2e4a91f/test.jpg" }
|
|
|
|
|
|
|
|
context 'without group read access' do
|
|
|
|
|
let(:group) { create(:group, :private) }
|
|
|
|
|
|
|
|
|
|
it 'does not rewrite the link' do
|
|
|
|
|
doc = filter(upload_link)
|
|
|
|
|
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(upload_path)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it 'does not rewrite the link for subgroup' do
|
|
|
|
|
group.update!(parent: create(:group))
|
|
|
|
|
|
|
|
|
|
doc = filter(upload_link)
|
|
|
|
|
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(upload_path)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'with an absolute URL' do
|
|
|
|
|
let(:absolute_path) { Gitlab.config.gitlab.url + relative_path }
|
|
|
|
|
let(:only_path) { false }
|
|
|
|
|
|
|
|
|
|
it 'does not rewrite the link' do
|
|
|
|
|
doc = filter(upload_link)
|
|
|
|
|
|
|
|
|
|
expect(doc.at_css('a')['href']).to eq(upload_path)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
context 'with an absolute URL' do
|
|
context 'with an absolute URL' do
|
|
|
let(:absolute_path) { Gitlab.config.gitlab.url + relative_path }
|
|
let(:absolute_path) { Gitlab.config.gitlab.url + relative_path }
|
|
|
let(:only_path) { false }
|
|
let(:only_path) { false }
|
| ... | |
... | |
| ... | | ... | |