From a0755d2f051c5a9cd31721333adee22cb40b1008 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Thu, 7 Aug 2014 20:46:17 +0300 Subject: [PATCH] Fix tests Signed-off-by: Dmitriy Zaporozhets --- spec/controllers/blob_controller_spec.rb | 4 +- spec/controllers/tree_controller_spec.rb | 4 +- spec/features/notes_on_merge_requests_spec.rb | 336 +++++++++--------- spec/models/project_wiki_spec.rb | 16 +- 4 files changed, 181 insertions(+), 179 deletions(-) diff --git a/spec/controllers/blob_controller_spec.rb b/spec/controllers/blob_controller_spec.rb index 929f6d3b46d..11d748ca77f 100644 --- a/spec/controllers/blob_controller_spec.rb +++ b/spec/controllers/blob_controller_spec.rb @@ -44,8 +44,8 @@ describe Projects::BlobController do end context 'redirect to tree' do - let(:id) { 'master/doc' } - it { should redirect_to("/#{project.path_with_namespace}/tree/master/doc") } + let(:id) { 'markdown/doc' } + it { should redirect_to("/#{project.path_with_namespace}/tree/markdown/doc") } end end end diff --git a/spec/controllers/tree_controller_spec.rb b/spec/controllers/tree_controller_spec.rb index b169c2a678f..8147fb0e6fb 100644 --- a/spec/controllers/tree_controller_spec.rb +++ b/spec/controllers/tree_controller_spec.rb @@ -26,7 +26,7 @@ describe Projects::TreeController do end context "valid branch, valid path" do - let(:id) { 'master/app/' } + let(:id) { 'master/encoding/' } it { should respond_with(:success) } end @@ -36,7 +36,7 @@ describe Projects::TreeController do end context "invalid branch, valid path" do - let(:id) { 'invalid-branch/app/' } + let(:id) { 'invalid-branch/encoding/' } it { should respond_with(:not_found) } end end diff --git a/spec/features/notes_on_merge_requests_spec.rb b/spec/features/notes_on_merge_requests_spec.rb index 3fe11849660..47776ba7f3f 100644 --- a/spec/features/notes_on_merge_requests_spec.rb +++ b/spec/features/notes_on_merge_requests_spec.rb @@ -1,197 +1,209 @@ require 'spec_helper' -describe "On a merge request", js: true, feature: true do - let!(:merge_request) { create(:merge_request, :simple) } - let!(:project) { merge_request.source_project } - let!(:note) { create(:note_on_merge_request, :with_attachment, project: project) } +describe 'Comments' do + include RepoHelpers - before do - login_as :admin - visit project_merge_request_path(project, merge_request) - end + describe "On a merge request", js: true, feature: true do + let!(:merge_request) { create(:merge_request) } + let!(:project) { merge_request.source_project } + let!(:note) { create(:note_on_merge_request, :with_attachment, project: project) } - subject { page } - - describe "the note form" do - it 'should be valid' do - should have_css(".js-main-target-form", visible: true, count: 1) - find(".js-main-target-form input[type=submit]").value.should == "Add Comment" - within(".js-main-target-form") { should_not have_link("Cancel") } - within(".js-main-target-form") { should have_css(".js-note-preview-button", visible: false) } - end - - describe "with text" do - before do - within(".js-main-target-form") do - fill_in "note[note]", with: "This is awesome" - end - end - - it 'should have enable submit button and preview button' do - within(".js-main-target-form") { should_not have_css(".js-comment-button[disabled]") } - within(".js-main-target-form") { should have_css(".js-note-preview-button", visible: true) } - end - end - end - - describe "when posting a note" do before do - within(".js-main-target-form") do - fill_in "note[note]", with: "This is awsome!" - find(".js-note-preview-button").trigger("click") - click_button "Add Comment" - end + login_as :admin + visit project_merge_request_path(project, merge_request) end - it 'should be added and form reset' do - should have_content("This is awsome!") - within(".js-main-target-form") { should have_no_field("note[note]", with: "This is awesome!") } - within(".js-main-target-form") { should have_css(".js-note-preview", visible: false) } - within(".js-main-target-form") { should have_css(".js-note-text", visible: true) } - end - end - - describe "when editing a note", js: true do - it "should contain the hidden edit form" do - within("#note_#{note.id}") { should have_css(".note-edit-form", visible: false) } - end - - describe "editing the note" do - before do - find('.note').hover - find(".js-note-edit").click - end - - it "should show the note edit form and hide the note body" do - within("#note_#{note.id}") do - find(".note-edit-form", visible: true).should be_visible - find(".note-text", visible: false).should_not be_visible - end - end - - it "should reset the edit note form textarea with the original content of the note if cancelled" do - find('.note').hover - find(".js-note-edit").click - - within(".note-edit-form") do - fill_in "note[note]", with: "Some new content" - find(".btn-cancel").click - find(".js-note-text", visible: false).text.should == note.note - end - end - - it "appends the edited at time to the note" do - find('.note').hover - find(".js-note-edit").click - - within(".note-edit-form") do - fill_in "note[note]", with: "Some new content" - find(".btn-save").click - end - - within("#note_#{note.id}") do - should have_css(".note-last-update small") - find(".note-last-update small").text.should match(/Edited less than a minute ago/) - end - end - end - - describe "deleting an attachment" do - before do - find('.note').hover - find(".js-note-edit").click - end - - it "shows the delete link" do - within(".note-attachment") do - should have_css(".js-note-attachment-delete") - end - end - - it "removes the attachment div and resets the edit form" do - find(".js-note-attachment-delete").click - should_not have_css(".note-attachment") - find(".note-edit-form", visible: false).should_not be_visible - end - end - end -end - -describe "On a merge request diff", js: true, feature: true do - let(:merge_request) { create(:merge_request, :with_diffs, :simple) } - let(:project) { merge_request.source_project } - - before do - login_as :admin - visit diffs_project_merge_request_path(project, merge_request) - end - - subject { page } - - describe "when adding a note" do - before do - find('a[data-line-code="8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_7_7"]').click - end - - describe "the notes holder" do - it { should have_css(".js-temp-notes-holder") } - - it { within(".js-temp-notes-holder") { should have_css(".new_note") } } - end + subject { page } describe "the note form" do - it "shouldn't add a second form for same row" do - find('a[data-line-code="8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_7_7"]').click - - should have_css("tr[id='8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_7_7'] + .js-temp-notes-holder form", count: 1) + it 'should be valid' do + should have_css(".js-main-target-form", visible: true, count: 1) + find(".js-main-target-form input[type=submit]").value.should == "Add Comment" + within(".js-main-target-form") { should_not have_link("Cancel") } + within(".js-main-target-form") { should have_css(".js-note-preview-button", visible: false) } end - it "should be removed when canceled" do - within(".diff-file form[rel$='8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_7_7']") do - find(".js-close-discussion-note-form").trigger("click") + describe "with text" do + before do + within(".js-main-target-form") do + fill_in "note[note]", with: "This is awesome" + end end - should have_no_css(".js-temp-notes-holder") + it 'should have enable submit button and preview button' do + within(".js-main-target-form") { should_not have_css(".js-comment-button[disabled]") } + within(".js-main-target-form") { should have_css(".js-note-preview-button", visible: true) } + end + end + end + + describe "when posting a note" do + before do + within(".js-main-target-form") do + fill_in "note[note]", with: "This is awsome!" + find(".js-note-preview-button").trigger("click") + click_button "Add Comment" + end + end + + it 'should be added and form reset' do + should have_content("This is awsome!") + within(".js-main-target-form") { should have_no_field("note[note]", with: "This is awesome!") } + within(".js-main-target-form") { should have_css(".js-note-preview", visible: false) } + within(".js-main-target-form") { should have_css(".js-note-text", visible: true) } + end + end + + describe "when editing a note", js: true do + it "should contain the hidden edit form" do + within("#note_#{note.id}") { should have_css(".note-edit-form", visible: false) } + end + + describe "editing the note" do + before do + find('.note').hover + find(".js-note-edit").click + end + + it "should show the note edit form and hide the note body" do + within("#note_#{note.id}") do + find(".note-edit-form", visible: true).should be_visible + find(".note-text", visible: false).should_not be_visible + end + end + + it "should reset the edit note form textarea with the original content of the note if cancelled" do + find('.note').hover + find(".js-note-edit").click + + within(".note-edit-form") do + fill_in "note[note]", with: "Some new content" + find(".btn-cancel").click + find(".js-note-text", visible: false).text.should == note.note + end + end + + it "appends the edited at time to the note" do + find('.note').hover + find(".js-note-edit").click + + within(".note-edit-form") do + fill_in "note[note]", with: "Some new content" + find(".btn-save").click + end + + within("#note_#{note.id}") do + should have_css(".note-last-update small") + find(".note-last-update small").text.should match(/Edited less than a minute ago/) + end + end + end + + describe "deleting an attachment" do + before do + find('.note').hover + find(".js-note-edit").click + end + + it "shows the delete link" do + within(".note-attachment") do + should have_css(".js-note-attachment-delete") + end + end + + it "removes the attachment div and resets the edit form" do + find(".js-note-attachment-delete").click + should_not have_css(".note-attachment") + find(".note-edit-form", visible: false).should_not be_visible + end end end end - describe "with muliple note forms" do + describe "On a merge request diff", js: true, feature: true do + let(:merge_request) { create(:merge_request) } + let(:project) { merge_request.source_project } + before do - find('a[data-line-code="8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_7_7"]').click - find('a[data-line-code="8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_10_10"]').click + login_as :admin + visit diffs_project_merge_request_path(project, merge_request) end - it { should have_css(".js-temp-notes-holder", count: 2) } + subject { page } - describe "previewing them separately" do + describe "when adding a note" do before do - # add two separate texts and trigger previews on both - within("tr[id='8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_7_7'] + .js-temp-notes-holder") do - fill_in "note[note]", with: "One comment on line 7" - find(".js-note-preview-button").trigger("click") + find("a[data-line-code=\"#{line_code}\"]").click + end + + describe "the notes holder" do + it { should have_css(".js-temp-notes-holder") } + + it { within(".js-temp-notes-holder") { should have_css(".new_note") } } + end + + describe "the note form" do + it "shouldn't add a second form for same row" do + find("a[data-line-code=\"#{line_code}\"]").click + + should have_css("tr[id='#{line_code}'] + .js-temp-notes-holder form", count: 1) end - within("tr[id='8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_10_10'] + .js-temp-notes-holder") do - fill_in "note[note]", with: "Another comment on line 10" - find(".js-note-preview-button").trigger("click") + + it "should be removed when canceled" do + within(".diff-file form[rel$='#{line_code}']") do + find(".js-close-discussion-note-form").trigger("click") + end + + should have_no_css(".js-temp-notes-holder") end end end - describe "posting a note" do + describe "with muliple note forms" do before do - within("tr[id='8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d_10_10'] + .js-temp-notes-holder") do - fill_in "note[note]", with: "Another comment on line 10" - click_button("Add Comment") + find("a[data-line-code=\"#{line_code}\"]").click + find("a[data-line-code=\"#{line_code_2}\"]").click + end + + it { should have_css(".js-temp-notes-holder", count: 2) } + + describe "previewing them separately" do + before do + # add two separate texts and trigger previews on both + within("tr[id='#{line_code}'] + .js-temp-notes-holder") do + fill_in "note[note]", with: "One comment on line 7" + find(".js-note-preview-button").trigger("click") + end + within("tr[id='#{line_code_2}'] + .js-temp-notes-holder") do + fill_in "note[note]", with: "Another comment on line 10" + find(".js-note-preview-button").trigger("click") + end end end - it 'should be added as discussion' do - should have_content("Another comment on line 10") - should have_css(".notes_holder") - should have_css(".notes_holder .note", count: 1) - should have_link("Reply") + describe "posting a note" do + before do + within("tr[id='#{line_code_2}'] + .js-temp-notes-holder") do + fill_in "note[note]", with: "Another comment on line 10" + click_button("Add Comment") + end + end + + it 'should be added as discussion' do + should have_content("Another comment on line 10") + should have_css(".notes_holder") + should have_css(".notes_holder .note", count: 1) + should have_link("Reply") + end end end end + + def line_code + sample_compare.changes.first[:line_code] + end + + def line_code_2 + sample_compare.changes.last[:line_code] + end end diff --git a/spec/models/project_wiki_spec.rb b/spec/models/project_wiki_spec.rb index 56ec83e3e7d..e4ee2fc5b13 100644 --- a/spec/models/project_wiki_spec.rb +++ b/spec/models/project_wiki_spec.rb @@ -41,23 +41,13 @@ describe ProjectWiki do subject.wiki.should be_a Gollum::Wiki end - before do - Gitlab::Shell.any_instance.stub(:add_repository) do - create_temp_repo("#{Rails.root}/tmp/test-git-base-path/non-existant.wiki.git") - end - project.stub(:path_with_namespace).and_return("non-existant") - end - it "creates a new wiki repo if one does not yet exist" do - wiki = ProjectWiki.new(project, user) - wiki.create_page("index", "test content").should_not == false - - FileUtils.rm_rf wiki.send(:path_to_repo) + project_wiki.create_page("index", "test content").should be_true end it "raises CouldNotCreateWikiError if it can't create the wiki repository" do - ProjectWiki.any_instance.stub(:init_repo).and_return(false) - expect { ProjectWiki.new(project, user).wiki }.to raise_exception(ProjectWiki::CouldNotCreateWikiError) + project_wiki.stub(:init_repo).and_return(false) + expect { project_wiki.send(:create_repo!) }.to raise_exception(ProjectWiki::CouldNotCreateWikiError) end end