blob: cfbb84dd099ad833e54cfcaf5ae04be0ad665663 (
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
|
# frozen_string_literal: true
RSpec.shared_examples 'raw snippet files' do
let_it_be(:unauthorized_user) { create(:user) }
let(:snippet_id) { snippet.id }
let(:user) { snippet.author }
let(:file_path) { '%2Egitattributes' }
let(:ref) { 'master' }
context 'with no user' do
it 'requires authentication' do
get api(api_path)
expect(response).to have_gitlab_http_status(:unauthorized)
end
end
shared_examples 'not found' do
it 'returns 404' do
get api(api_path, user)
expect(response).to have_gitlab_http_status(:not_found)
expect(json_response['message']).to eq('404 Snippet Not Found')
end
end
context 'when not authorized' do
let(:user) { unauthorized_user }
it_behaves_like 'not found'
end
context 'with an invalid snippet ID' do
let(:snippet_id) { 'invalid' }
it_behaves_like 'not found'
end
context 'with valid params' do
it 'returns the raw file info' do
expect(Gitlab::Workhorse).to receive(:send_git_blob).and_call_original
get api(api_path, user)
aggregate_failures do
expect(response).to have_gitlab_http_status(:ok)
expect(response.media_type).to eq 'text/plain'
expect(response.header[Gitlab::Workhorse::DETECT_HEADER]).to eq 'true'
expect(response.header[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with('git-blob:')
expect(response.header['Content-Disposition']).to match 'filename=".gitattributes"'
end
end
end
context 'with invalid params' do
using RSpec::Parameterized::TableSyntax
where(:file_path, :ref, :status, :key, :message) do
'%2Egitattributes' | 'invalid-ref' | :not_found | 'message' | '404 Reference Not Found'
'%2Egitattributes' | nil | :not_found | 'error' | '404 Not Found'
'%2Egitattributes' | '' | :not_found | 'error' | '404 Not Found'
'doesnotexist.rb' | 'master' | :not_found | 'message' | '404 File Not Found'
'/does/not/exist.rb' | 'master' | :not_found | 'error' | '404 Not Found'
'%2E%2E%2Fetc%2Fpasswd' | 'master' | :bad_request | 'error' | 'file_path should be a valid file path'
'%2Fetc%2Fpasswd' | 'master' | :bad_request | 'error' | 'file_path should be a valid file path'
'../../etc/passwd' | 'master' | :not_found | 'error' | '404 Not Found'
end
with_them do
before do
get api(api_path, user)
end
it { expect(response).to have_gitlab_http_status(status) }
it { expect(json_response[key]).to eq(message) }
end
end
end
|