Commit d4543eb5a71bd3aa5bfc24f9fadf07e4fe3d461d
1 parent
611ac727
Exists in
master
and in
4 other branches
Tests fixed
Showing
7 changed files
with
49 additions
and
14 deletions
Show diff stats
app/controllers/projects/snippets_controller.rb
... | ... | @@ -23,11 +23,11 @@ class Projects::SnippetsController < Projects::ApplicationController |
23 | 23 | end |
24 | 24 | |
25 | 25 | def new |
26 | - @snippet = @project.snippets.new | |
26 | + @snippet = @project.snippets.build | |
27 | 27 | end |
28 | 28 | |
29 | 29 | def create |
30 | - @snippet = @project.snippets.new(params[:project_snippet]) | |
30 | + @snippet = @project.snippets.build(params[:project_snippet]) | |
31 | 31 | @snippet.author = current_user |
32 | 32 | @snippet.save |
33 | 33 | ... | ... |
app/models/ability.rb
... | ... | @@ -55,7 +55,7 @@ class Ability |
55 | 55 | :read_wiki, |
56 | 56 | :read_issue, |
57 | 57 | :read_milestone, |
58 | - :read_snippet, | |
58 | + :read_project_snippet, | |
59 | 59 | :read_team_member, |
60 | 60 | :read_merge_request, |
61 | 61 | :read_note, |
... | ... | @@ -68,7 +68,7 @@ class Ability |
68 | 68 | def project_report_rules |
69 | 69 | project_guest_rules + [ |
70 | 70 | :download_code, |
71 | - :write_snippet | |
71 | + :write_project_snippet | |
72 | 72 | ] |
73 | 73 | end |
74 | 74 | |
... | ... | @@ -84,11 +84,11 @@ class Ability |
84 | 84 | project_dev_rules + [ |
85 | 85 | :push_code_to_protected_branches, |
86 | 86 | :modify_issue, |
87 | - :modify_snippet, | |
87 | + :modify_project_snippet, | |
88 | 88 | :modify_merge_request, |
89 | 89 | :admin_issue, |
90 | 90 | :admin_milestone, |
91 | - :admin_snippet, | |
91 | + :admin_project_snippet, | |
92 | 92 | :admin_team_member, |
93 | 93 | :admin_merge_request, |
94 | 94 | :admin_note, | ... | ... |
lib/api/projects.rb
... | ... | @@ -408,7 +408,7 @@ module Gitlab |
408 | 408 | # Example Request: |
409 | 409 | # POST /projects/:id/snippets |
410 | 410 | post ":id/snippets" do |
411 | - authorize! :write_snippet, user_project | |
411 | + authorize! :write_project_snippet, user_project | |
412 | 412 | required_attributes! [:title, :file_name, :code] |
413 | 413 | |
414 | 414 | attrs = attributes_for_keys [:title, :file_name] |
... | ... | @@ -437,7 +437,7 @@ module Gitlab |
437 | 437 | # PUT /projects/:id/snippets/:snippet_id |
438 | 438 | put ":id/snippets/:snippet_id" do |
439 | 439 | @snippet = user_project.snippets.find(params[:snippet_id]) |
440 | - authorize! :modify_snippet, @snippet | |
440 | + authorize! :modify_project_snippet, @snippet | |
441 | 441 | |
442 | 442 | attrs = attributes_for_keys [:title, :file_name] |
443 | 443 | attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? |
... | ... | @@ -460,7 +460,7 @@ module Gitlab |
460 | 460 | delete ":id/snippets/:snippet_id" do |
461 | 461 | begin |
462 | 462 | @snippet = user_project.snippets.find(params[:snippet_id]) |
463 | - authorize! :modify_snippet, user_project | |
463 | + authorize! :modify_project_snippet, @snippet | |
464 | 464 | @snippet.destroy |
465 | 465 | rescue |
466 | 466 | end | ... | ... |
spec/helpers/gitlab_markdown_helper_spec.rb
... | ... | @@ -10,7 +10,7 @@ describe GitlabMarkdownHelper do |
10 | 10 | let(:commit) { CommitDecorator.decorate(project.repository.commit) } |
11 | 11 | let(:issue) { create(:issue, project: project) } |
12 | 12 | let(:merge_request) { create(:merge_request, project: project) } |
13 | - let(:snippet) { create(:snippet, project: project) } | |
13 | + let(:snippet) { create(:project_snippet, project: project) } | |
14 | 14 | let(:member) { project.users_projects.where(user_id: user).first } |
15 | 15 | |
16 | 16 | before do |
... | ... | @@ -190,8 +190,43 @@ describe GitlabMarkdownHelper do |
190 | 190 | describe "referencing a snippet" do |
191 | 191 | let(:object) { snippet } |
192 | 192 | let(:reference) { "$#{snippet.id}" } |
193 | + let(:actual) { "Reference to #{reference}" } | |
194 | + let(:expected) { project_snippet_path(project, object) } | |
195 | + | |
196 | + it "should link using a valid id" do | |
197 | + gfm(actual).should match(expected) | |
198 | + end | |
199 | + | |
200 | + it "should link with adjacent text" do | |
201 | + # Wrap the reference in parenthesis | |
202 | + gfm(actual.gsub(reference, "(#{reference})")).should match(expected) | |
203 | + | |
204 | + # Append some text to the end of the reference | |
205 | + gfm(actual.gsub(reference, "#{reference}, right?")).should match(expected) | |
206 | + end | |
207 | + | |
208 | + it "should keep whitespace intact" do | |
209 | + actual = "Referenced #{reference} already." | |
210 | + expected = /Referenced <a.+>[^\s]+<\/a> already/ | |
211 | + gfm(actual).should match(expected) | |
212 | + end | |
213 | + | |
214 | + it "should not link with an invalid id" do | |
215 | + # Modify the reference string so it's still parsed, but is invalid | |
216 | + reference.gsub!(/^(.)(\d+)$/, '\1' + ('\2' * 2)) | |
217 | + gfm(actual).should == actual | |
218 | + end | |
219 | + | |
220 | + it "should include a title attribute" do | |
221 | + title = "Snippet: #{object.title}" | |
222 | + gfm(actual).should match(/title="#{title}"/) | |
223 | + end | |
224 | + | |
225 | + it "should include standard gfm classes" do | |
226 | + css = object.class.to_s.underscore | |
227 | + gfm(actual).should match(/class="\s?gfm gfm-snippet\s?"/) | |
228 | + end | |
193 | 229 | |
194 | - include_examples 'referenced object' | |
195 | 230 | end |
196 | 231 | |
197 | 232 | describe "referencing multiple objects" do | ... | ... |
spec/models/project_spec.rb
... | ... | @@ -34,7 +34,7 @@ describe Project do |
34 | 34 | it { should have_many(:milestones).dependent(:destroy) } |
35 | 35 | it { should have_many(:users_projects).dependent(:destroy) } |
36 | 36 | it { should have_many(:notes).dependent(:destroy) } |
37 | - it { should have_many(:snippets).dependent(:destroy) } | |
37 | + it { should have_many(:project_snippets).class_name('ProjectSnippet').dependent(:destroy) } | |
38 | 38 | it { should have_many(:deploy_keys).dependent(:destroy) } |
39 | 39 | it { should have_many(:hooks).dependent(:destroy) } |
40 | 40 | it { should have_many(:wikis).dependent(:destroy) } | ... | ... |
spec/requests/api/notes_spec.rb
... | ... | @@ -7,7 +7,7 @@ describe Gitlab::API do |
7 | 7 | let!(:project) { create(:project, namespace: user.namespace ) } |
8 | 8 | let!(:issue) { create(:issue, project: project, author: user) } |
9 | 9 | let!(:merge_request) { create(:merge_request, project: project, author: user) } |
10 | - let!(:snippet) { create(:snippet, project: project, author: user) } | |
10 | + let!(:snippet) { create(:project_snippet, project: project, author: user) } | |
11 | 11 | let!(:issue_note) { create(:note, noteable: issue, project: project, author: user) } |
12 | 12 | let!(:merge_request_note) { create(:note, noteable: merge_request, project: project, author: user) } |
13 | 13 | let!(:snippet_note) { create(:note, noteable: snippet, project: project, author: user) } | ... | ... |
spec/requests/api/projects_spec.rb
... | ... | @@ -9,7 +9,7 @@ describe Gitlab::API do |
9 | 9 | let(:admin) { create(:admin) } |
10 | 10 | let!(:project) { create(:project, namespace: user.namespace ) } |
11 | 11 | let!(:hook) { create(:project_hook, project: project, url: "http://example.com") } |
12 | - let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') } | |
12 | + let!(:snippet) { create(:project_snippet, author: user, project: project, title: 'example') } | |
13 | 13 | let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) } |
14 | 14 | let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) } |
15 | 15 | let(:key) { create(:key, project: project) } | ... | ... |