From d4543eb5a71bd3aa5bfc24f9fadf07e4fe3d461d Mon Sep 17 00:00:00 2001
From: Andrew8xx8 <avk@8xx8.ru>
Date: Mon, 25 Mar 2013 11:20:14 +0400
Subject: [PATCH] Tests fixed

---
 .../projects/snippets_controller.rb           |  4 +-
 app/models/ability.rb                         |  8 ++--
 lib/api/projects.rb                           |  6 +--
 spec/helpers/gitlab_markdown_helper_spec.rb   | 39 ++++++++++++++++++-
 spec/models/project_spec.rb                   |  2 +-
 spec/requests/api/notes_spec.rb               |  2 +-
 spec/requests/api/projects_spec.rb            |  2 +-
 7 files changed, 49 insertions(+), 14 deletions(-)

diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb
index ebff5039ffa..cd14c08c779 100644
--- a/app/controllers/projects/snippets_controller.rb
+++ b/app/controllers/projects/snippets_controller.rb
@@ -23,11 +23,11 @@ class Projects::SnippetsController < Projects::ApplicationController
   end
 
   def new
-    @snippet = @project.snippets.new
+    @snippet = @project.snippets.build
   end
 
   def create
-    @snippet = @project.snippets.new(params[:project_snippet])
+    @snippet = @project.snippets.build(params[:project_snippet])
     @snippet.author = current_user
     @snippet.save
 
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 2dadb584460..b86a4b5a044 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -55,7 +55,7 @@ class Ability
         :read_wiki,
         :read_issue,
         :read_milestone,
-        :read_snippet,
+        :read_project_snippet,
         :read_team_member,
         :read_merge_request,
         :read_note,
@@ -68,7 +68,7 @@ class Ability
     def project_report_rules
       project_guest_rules + [
         :download_code,
-        :write_snippet
+        :write_project_snippet
       ]
     end
 
@@ -84,11 +84,11 @@ class Ability
       project_dev_rules + [
         :push_code_to_protected_branches,
         :modify_issue,
-        :modify_snippet,
+        :modify_project_snippet,
         :modify_merge_request,
         :admin_issue,
         :admin_milestone,
-        :admin_snippet,
+        :admin_project_snippet,
         :admin_team_member,
         :admin_merge_request,
         :admin_note,
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index d4f50fda1b5..3699971f25c 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -408,7 +408,7 @@ module Gitlab
       # Example Request:
       #   POST /projects/:id/snippets
       post ":id/snippets" do
-        authorize! :write_snippet, user_project
+        authorize! :write_project_snippet, user_project
         required_attributes! [:title, :file_name, :code]
 
         attrs = attributes_for_keys [:title, :file_name]
@@ -437,7 +437,7 @@ module Gitlab
       #   PUT /projects/:id/snippets/:snippet_id
       put ":id/snippets/:snippet_id" do
         @snippet = user_project.snippets.find(params[:snippet_id])
-        authorize! :modify_snippet, @snippet
+        authorize! :modify_project_snippet, @snippet
 
         attrs = attributes_for_keys [:title, :file_name]
         attrs[:expires_at] = params[:lifetime] if params[:lifetime].present?
@@ -460,7 +460,7 @@ module Gitlab
       delete ":id/snippets/:snippet_id" do
         begin
           @snippet = user_project.snippets.find(params[:snippet_id])
-          authorize! :modify_snippet, user_project
+          authorize! :modify_project_snippet, @snippet
           @snippet.destroy
         rescue
         end
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index b9025026c1b..94ccefa79f9 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -10,7 +10,7 @@ describe GitlabMarkdownHelper do
   let(:commit)        { CommitDecorator.decorate(project.repository.commit) }
   let(:issue)         { create(:issue, project: project) }
   let(:merge_request) { create(:merge_request, project: project) }
-  let(:snippet)       { create(:snippet, project: project) }
+  let(:snippet)       { create(:project_snippet, project: project) }
   let(:member)        { project.users_projects.where(user_id: user).first }
 
   before do
@@ -190,8 +190,43 @@ describe GitlabMarkdownHelper do
     describe "referencing a snippet" do
       let(:object)    { snippet }
       let(:reference) { "$#{snippet.id}" }
+      let(:actual)   { "Reference to #{reference}" }
+      let(:expected) { project_snippet_path(project, object) }
+
+      it "should link using a valid id" do
+        gfm(actual).should match(expected)
+      end
+
+      it "should link with adjacent text" do
+        # Wrap the reference in parenthesis
+        gfm(actual.gsub(reference, "(#{reference})")).should match(expected)
+
+        # Append some text to the end of the reference
+        gfm(actual.gsub(reference, "#{reference}, right?")).should match(expected)
+      end
+
+      it "should keep whitespace intact" do
+        actual   = "Referenced #{reference} already."
+        expected = /Referenced <a.+>[^\s]+<\/a> already/
+        gfm(actual).should match(expected)
+      end
+
+      it "should not link with an invalid id" do
+        # Modify the reference string so it's still parsed, but is invalid
+        reference.gsub!(/^(.)(\d+)$/, '\1' + ('\2' * 2))
+        gfm(actual).should == actual
+      end
+
+      it "should include a title attribute" do
+        title = "Snippet: #{object.title}"
+        gfm(actual).should match(/title="#{title}"/)
+      end
+
+      it "should include standard gfm classes" do
+        css = object.class.to_s.underscore
+        gfm(actual).should match(/class="\s?gfm gfm-snippet\s?"/)
+      end
 
-      include_examples 'referenced object'
     end
 
     describe "referencing multiple objects" do
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 9423c7de6ec..17033973dfe 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -34,7 +34,7 @@ describe Project do
     it { should have_many(:milestones).dependent(:destroy) }
     it { should have_many(:users_projects).dependent(:destroy) }
     it { should have_many(:notes).dependent(:destroy) }
-    it { should have_many(:snippets).dependent(:destroy) }
+    it { should have_many(:project_snippets).class_name('ProjectSnippet').dependent(:destroy) }
     it { should have_many(:deploy_keys).dependent(:destroy) }
     it { should have_many(:hooks).dependent(:destroy) }
     it { should have_many(:wikis).dependent(:destroy) }
diff --git a/spec/requests/api/notes_spec.rb b/spec/requests/api/notes_spec.rb
index 901640834f2..0df3189ca0c 100644
--- a/spec/requests/api/notes_spec.rb
+++ b/spec/requests/api/notes_spec.rb
@@ -7,7 +7,7 @@ describe Gitlab::API do
   let!(:project) { create(:project, namespace: user.namespace ) }
   let!(:issue) { create(:issue, project: project, author: user) }
   let!(:merge_request) { create(:merge_request, project: project, author: user) }
-  let!(:snippet) { create(:snippet, project: project, author: user) }
+  let!(:snippet) { create(:project_snippet, project: project, author: user) }
   let!(:issue_note) { create(:note, noteable: issue, project: project, author: user) }
   let!(:merge_request_note) { create(:note, noteable: merge_request, project: project, author: user) }
   let!(:snippet_note) { create(:note, noteable: snippet, project: project, author: user) }
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index cddb7264018..c5a74ed9e0d 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -9,7 +9,7 @@ describe Gitlab::API do
   let(:admin) { create(:admin) }
   let!(:project) { create(:project, namespace: user.namespace ) }
   let!(:hook) { create(:project_hook, project: project, url: "http://example.com") }
-  let!(:snippet) { create(:snippet, author: user, project: project, title: 'example') }
+  let!(:snippet) { create(:project_snippet, author: user, project: project, title: 'example') }
   let!(:users_project) { create(:users_project, user: user, project: project, project_access: UsersProject::MASTER) }
   let!(:users_project2) { create(:users_project, user: user3, project: project, project_access: UsersProject::DEVELOPER) }
   let(:key) { create(:key, project: project) }
-- 
GitLab