Commit 03a89fd1 authored by Igor Drozdov's avatar Igor Drozdov

Merge branch '213968-snippet-file-names-in-dashboard-index' into 'master'

Resolve "Snippet file names in dashboard index"

See merge request gitlab-org/gitlab!29249
parents 2babea36 7235f963
...@@ -160,4 +160,14 @@ module SnippetsHelper ...@@ -160,4 +160,14 @@ module SnippetsHelper
title: 'Download', title: 'Download',
rel: 'noopener noreferrer') rel: 'noopener noreferrer')
end end
def snippet_file_name(snippet)
blob = if Feature.enabled?(:version_snippets, current_user) && !snippet.repository.empty?
snippet.blobs.first
else
snippet.blob
end
blob.name
end
end end
- link_project = local_assigns.fetch(:link_project, false) - link_project = local_assigns.fetch(:link_project, false)
- notes_count = @noteable_meta_data[snippet.id].user_notes_count - notes_count = @noteable_meta_data[snippet.id].user_notes_count
- file_name = snippet_file_name(snippet)
%li.snippet-row.py-3 %li.snippet-row.py-3
= image_tag avatar_icon_for_user(snippet.author), class: "avatar s40 d-none d-sm-block", alt: '' = image_tag avatar_icon_for_user(snippet.author), class: "avatar s40 d-none d-sm-block", alt: ''
...@@ -7,10 +8,10 @@ ...@@ -7,10 +8,10 @@
.title .title
= link_to gitlab_snippet_path(snippet) do = link_to gitlab_snippet_path(snippet) do
= snippet.title = snippet.title
- if snippet.file_name.present? - if file_name.present?
%span.snippet-filename.d-none.d-sm-inline-block.ml-2 %span.snippet-filename.d-none.d-sm-inline-block.ml-2
= sprite_icon('doc-code', size: 16, css_class: 'file-icon align-text-bottom') = sprite_icon('doc-code', size: 16, css_class: 'file-icon align-text-bottom')
= snippet.file_name = file_name
%ul.controls %ul.controls
%li %li
......
...@@ -3,8 +3,10 @@ ...@@ -3,8 +3,10 @@
require 'spec_helper' require 'spec_helper'
describe 'Dashboard snippets' do describe 'Dashboard snippets' do
let_it_be(:user) { create(:user) }
context 'when the project has snippets' do context 'when the project has snippets' do
let(:project) { create(:project, :public) } let(:project) { create(:project, :public, creator: user) }
let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) } let!(:snippets) { create_list(:project_snippet, 2, :public, author: project.owner, project: project) }
before do before do
...@@ -22,7 +24,7 @@ describe 'Dashboard snippets' do ...@@ -22,7 +24,7 @@ describe 'Dashboard snippets' do
end end
context 'when there are no project snippets', :js do context 'when there are no project snippets', :js do
let(:project) { create(:project, :public) } let(:project) { create(:project, :public, creator: user) }
before do before do
sign_in(project.owner) sign_in(project.owner)
...@@ -47,9 +49,49 @@ describe 'Dashboard snippets' do ...@@ -47,9 +49,49 @@ describe 'Dashboard snippets' do
end end
end end
context 'rendering file names' do
let_it_be(:snippet) { create(:personal_snippet, :public, author: user, file_name: 'foo.txt') }
let_it_be(:versioned_snippet) { create(:personal_snippet, :repository, :public, author: user, file_name: 'bar.txt') }
before do
sign_in(user)
end
context 'when feature flag :version_snippets is disabled' do
before do
stub_feature_flags(version_snippets: false)
visit dashboard_snippets_path
end
it 'contains the snippet file names from the DB' do
aggregate_failures do
expect(page).to have_content 'foo.txt'
expect(page).to have_content('bar.txt')
expect(page).not_to have_content('.gitattributes')
end
end
end
context 'when feature flag :version_snippets is enabled' do
before do
stub_feature_flags(version_snippets: true)
visit dashboard_snippets_path
end
it 'contains both the versioned and non-versioned filenames' do
aggregate_failures do
expect(page).to have_content 'foo.txt'
expect(page).to have_content('.gitattributes')
expect(page).not_to have_content('bar.txt')
end
end
end
end
context 'filtering by visibility' do context 'filtering by visibility' do
let(:user) { create(:user) } let_it_be(:snippets) do
let!(:snippets) do
[ [
create(:personal_snippet, :public, author: user), create(:personal_snippet, :public, author: user),
create(:personal_snippet, :internal, author: user), create(:personal_snippet, :internal, author: user),
...@@ -99,7 +141,7 @@ describe 'Dashboard snippets' do ...@@ -99,7 +141,7 @@ describe 'Dashboard snippets' do
end end
context 'as an external user' do context 'as an external user' do
let(:user) { create(:user, :external) } let_it_be(:user) { create(:user, :external) }
before do before do
sign_in(user) sign_in(user)
......
...@@ -151,4 +151,35 @@ describe SnippetsHelper do ...@@ -151,4 +151,35 @@ describe SnippetsHelper do
"<input type=\"text\" readonly=\"readonly\" class=\"js-snippet-url-area snippet-embed-input form-control\" data-url=\"#{url}\" value=\"<script src=&quot;#{url}.js&quot;></script>\" autocomplete=\"off\"></input>" "<input type=\"text\" readonly=\"readonly\" class=\"js-snippet-url-area snippet-embed-input form-control\" data-url=\"#{url}\" value=\"<script src=&quot;#{url}.js&quot;></script>\" autocomplete=\"off\"></input>"
end end
end end
describe '#snippet_file_name' do
subject { helper.snippet_file_name(snippet) }
where(:snippet_type, :flag_enabled, :trait, :filename) do
[
[:personal_snippet, false, nil, 'foo.txt'],
[:personal_snippet, true, nil, 'foo.txt'],
[:personal_snippet, false, :repository, 'foo.txt'],
[:personal_snippet, true, :repository, '.gitattributes'],
[:project_snippet, false, nil, 'foo.txt'],
[:project_snippet, true, nil, 'foo.txt'],
[:project_snippet, false, :repository, 'foo.txt'],
[:project_snippet, true, :repository, '.gitattributes']
]
end
with_them do
let(:snippet) { create(snippet_type, trait, file_name: 'foo.txt') }
before do
allow(helper).to receive(:current_user).and_return(snippet.author)
stub_feature_flags(version_snippets: flag_enabled)
end
it 'returns the correct filename' do
expect(subject).to eq filename
end
end
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment