diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-04 18:36:22 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-04 18:36:22 +0300 |
commit | bcc4e4dc7ed0740e92a61fc82c3c669f8f2d8d30 (patch) | |
tree | 1df3e2d68cd524af4dce107b2e4227778bb3945d /spec | |
parent | 211e435ade337c968fab11c52427c172adcec99a (diff) | |
parent | e0af7cefb4c92b474d14116b40927d70c13e78cc (diff) | |
download | gitlab-ce-bcc4e4dc7ed0740e92a61fc82c3c669f8f2d8d30.tar.gz |
Merge branch 'gist' of https://github.com/Andrew8xx8/gitlabhq into Andrew8xx8-gist
Conflicts:
Gemfile.lock
app/models/ability.rb
app/models/project.rb
app/views/snippets/_form.html.haml
db/schema.rb
features/steps/shared/paths.rb
spec/factories.rb
spec/models/project_spec.rb
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories.rb | 16 | ||||
-rw-r--r-- | spec/features/snippets_spec.rb | 99 | ||||
-rw-r--r-- | spec/helpers/gitlab_markdown_helper_spec.rb | 39 | ||||
-rw-r--r-- | spec/models/project_snippet_spec.rb | 30 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/snippet_spec.rb | 3 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 1 | ||||
-rw-r--r-- | spec/requests/api/notes_spec.rb | 2 | ||||
-rw-r--r-- | spec/requests/api/projects_spec.rb | 2 | ||||
-rw-r--r-- | spec/routing/project_routing_spec.rb | 32 | ||||
-rw-r--r-- | spec/routing/routing_spec.rb | 45 |
11 files changed, 159 insertions, 112 deletions
diff --git a/spec/factories.rb b/spec/factories.rb index f9e25382b61..b596f80fa9e 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -197,7 +197,7 @@ FactoryGirl.define do url end - factory :snippet do + factory :project_snippet do project author title @@ -205,6 +205,20 @@ FactoryGirl.define do file_name end + factory :personal_snippet do + author + title + content + file_name + end + + factory :snippet do + author + title + content + file_name + end + factory :protected_branch do name project diff --git a/spec/features/snippets_spec.rb b/spec/features/snippets_spec.rb deleted file mode 100644 index 1a0f6eaeef4..00000000000 --- a/spec/features/snippets_spec.rb +++ /dev/null @@ -1,99 +0,0 @@ -require 'spec_helper' - -describe "Snippets" do - let(:project) { create(:project) } - - before do - login_as :user - project.team << [@user, :developer] - end - - describe "GET /snippets" do - before do - @snippet = create(:snippet, - author: @user, - project: project) - - visit project_snippets_path(project) - end - - subject { page } - - it { should have_content(@snippet.title[0..10]) } - it { should have_content(@snippet.project.name) } - - describe "Destroy" do - before do - # admin access to remove snippet - @user.users_projects.destroy_all - project.team << [@user, :master] - visit edit_project_snippet_path(project, @snippet) - end - - it "should remove entry" do - expect { - click_link "destroy_snippet_#{@snippet.id}" - }.to change { Snippet.count }.by(-1) - end - end - end - - describe "New snippet" do - before do - visit project_snippets_path(project) - click_link "New Snippet" - end - - it "should open new snippet popup" do - page.current_path.should == new_project_snippet_path(project) - end - - describe "fill in", js: true do - before do - fill_in "snippet_title", with: "login function" - fill_in "snippet_file_name", with: "test.rb" - page.execute_script("editor.insert('def login; end');") - end - - it { expect { click_button "Save" }.to change {Snippet.count}.by(1) } - - it "should add new snippet to table" do - click_button "Save" - page.current_path.should == project_snippet_path(project, Snippet.last) - page.should have_content "login function" - page.should have_content "test.rb" - end - end - end - - describe "Edit snippet" do - before do - @snippet = create(:snippet, - author: @user, - project: project) - visit project_snippet_path(project, @snippet) - click_link "Edit Snippet" - end - - it "should open edit page" do - page.current_path.should == edit_project_snippet_path(project, @snippet) - end - - describe "fill in" do - before do - fill_in "snippet_title", with: "login function" - fill_in "snippet_file_name", with: "test.rb" - end - - it { expect { click_button "Save" }.to_not change {Snippet.count} } - - it "should update snippet fields" do - click_button "Save" - - page.current_path.should == project_snippet_path(project, @snippet) - page.should have_content "login function" - page.should have_content "test.rb" - end - end - end -end diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb index 23b18fbf0eb..0f206f47234 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) { 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_snippet_spec.rb b/spec/models/project_snippet_spec.rb new file mode 100644 index 00000000000..716fd81c91b --- /dev/null +++ b/spec/models/project_snippet_spec.rb @@ -0,0 +1,30 @@ +# == Schema Information +# +# Table name: snippets +# +# id :integer not null, primary key +# title :string(255) +# content :text +# author_id :integer not null +# project_id :integer not null +# created_at :datetime not null +# updated_at :datetime not null +# file_name :string(255) +# expires_at :datetime +# + +require 'spec_helper' + +describe ProjectSnippet do + describe "Associations" do + it { should belong_to(:project) } + end + + describe "Mass assignment" do + it { should_not allow_mass_assignment_of(:project_id) } + end + + describe "Validation" do + it { should validate_presence_of(:project) } + end +end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 04b4ce1763e..2e3870b1b65 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -36,7 +36,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(:snippets).class_name('ProjectSnippet').dependent(:destroy) } it { should have_many(:deploy_keys_projects).dependent(:destroy) } it { should have_many(:deploy_keys) } it { should have_many(:hooks).dependent(:destroy) } diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index e4d1934829f..52355c38f0c 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -17,19 +17,16 @@ require 'spec_helper' describe Snippet do describe "Associations" do - it { should belong_to(:project) } it { should belong_to(:author).class_name('User') } it { should have_many(:notes).dependent(:destroy) } end describe "Mass assignment" do it { should_not allow_mass_assignment_of(:author_id) } - it { should_not allow_mass_assignment_of(:project_id) } end describe "Validation" do it { should validate_presence_of(:author) } - it { should validate_presence_of(:project) } it { should validate_presence_of(:title) } it { should ensure_length_of(:title).is_within(0..255) } diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 7559c4cc3a1..9673854da53 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -41,6 +41,7 @@ require 'spec_helper' describe User do describe "Associations" do it { should have_one(:namespace) } + it { should have_many(:snippets).class_name('Snippet').dependent(:destroy) } it { should have_many(:users_projects).dependent(:destroy) } it { should have_many(:groups) } it { should have_many(:keys).dependent(:destroy) } diff --git a/spec/requests/api/notes_spec.rb b/spec/requests/api/notes_spec.rb index 78d55a7b4ed..11296aea73e 100644 --- a/spec/requests/api/notes_spec.rb +++ b/spec/requests/api/notes_spec.rb @@ -7,7 +7,7 @@ describe API::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 de0631d5b70..031b1412b0c 100644 --- a/spec/requests/api/projects_spec.rb +++ b/spec/requests/api/projects_spec.rb @@ -10,7 +10,7 @@ describe API::API do let(:admin) { create(:admin) } let!(:project) { create(:project_with_code, creator_id: user.id) } 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) } diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb index f20a1ca51a4..94f9480a4d0 100644 --- a/spec/routing/project_routing_spec.rb +++ b/spec/routing/project_routing_spec.rb @@ -258,13 +258,37 @@ end # project_snippet GET /:project_id/snippets/:id(.:format) snippets#show # PUT /:project_id/snippets/:id(.:format) snippets#update # DELETE /:project_id/snippets/:id(.:format) snippets#destroy -describe SnippetsController, "routing" do +describe Project::SnippetsController, "routing" do it "to #raw" do - get("/gitlabhq/snippets/1/raw").should route_to('snippets#raw', project_id: 'gitlabhq', id: '1') + get("/gitlabhq/snippets/1/raw").should route_to('projects/snippets#raw', project_id: 'gitlabhq', id: '1') end - it_behaves_like "RESTful project resources" do - let(:controller) { 'snippets' } + it "to #index" do + get("/gitlabhq/snippets").should route_to("projects/snippets#index", project_id: 'gitlabhq') + end + + it "to #create" do + post("/gitlabhq/snippets").should route_to("projects/snippets#create", project_id: 'gitlabhq') + end + + it "to #new" do + get("/gitlabhq/snippets/new").should route_to("projects/snippets#new", project_id: 'gitlabhq') + end + + it "to #edit" do + get("/gitlabhq/snippets/1/edit").should route_to("projects/snippets#edit", project_id: 'gitlabhq', id: '1') + end + + it "to #show" do + get("/gitlabhq/snippets/1").should route_to("projects/snippets#show", project_id: 'gitlabhq', id: '1') + end + + it "to #update" do + put("/gitlabhq/snippets/1").should route_to("projects/snippets#update", project_id: 'gitlabhq', id: '1') + end + + it "to #destroy" do + delete("/gitlabhq/snippets/1").should route_to("projects/snippets#destroy", project_id: 'gitlabhq', id: '1') end end diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb index b6135b4ca81..aa3952f74b6 100644 --- a/spec/routing/routing_spec.rb +++ b/spec/routing/routing_spec.rb @@ -19,6 +19,51 @@ describe "Mounted Apps", "routing" do end end +# snippets GET /snippets(.:format) snippets#index +# POST /snippets(.:format) snippets#create +# new_snippet GET /snippets/new(.:format) snippets#new +# edit_snippet GET /snippets/:id/edit(.:format) snippets#edit +# snippet GET /snippets/:id(.:format) snippets#show +# PUT /snippets/:id(.:format) snippets#update +# DELETE /snippets/:id(.:format) snippets#destroy +describe SnippetsController, "routing" do + it "to #user_index" do + get("/s/User").should route_to('snippets#user_index', username: 'User') + end + + it "to #raw" do + get("/snippets/1/raw").should route_to('snippets#raw', id: '1') + end + + it "to #index" do + get("/snippets").should route_to('snippets#index') + end + + it "to #create" do + post("/snippets").should route_to('snippets#create') + end + + it "to #new" do + get("/snippets/new").should route_to('snippets#new') + end + + it "to #edit" do + get("/snippets/1/edit").should route_to('snippets#edit', id: '1') + end + + it "to #show" do + get("/snippets/1").should route_to('snippets#show', id: '1') + end + + it "to #update" do + put("/snippets/1").should route_to('snippets#update', id: '1') + end + + it "to #destroy" do + delete("/snippets/1").should route_to('snippets#destroy', id: '1') + end +end + # help GET /help(.:format) help#index # help_permissions GET /help/permissions(.:format) help#permissions # help_workflow GET /help/workflow(.:format) help#workflow |