diff --git a/features/project/commits/commit_comments.feature b/features/project/commits/commit_comments.feature index 5acf541..a1aa745 100644 --- a/features/project/commits/commit_comments.feature +++ b/features/project/commits/commit_comments.feature @@ -1,10 +1,48 @@ -Feature: Project Comment commit +Feature: Comments on commits Background: Given I sign in as a user And I own project "Shop" - Given I visit project commit page + And I visit project commit page @javascript - Scenario: I comment commit + Scenario: I can comment on a commit Given I leave a comment like "XML attached" - Then I should see comment "XML attached" + Then I should see a comment saying "XML attached" + + @javascript + Scenario: I can't cancel the main form + Then I should not see the cancel comment button + + @javascript + Scenario: I can't preview without text + Given I haven't written any comment text + Then I should not see the comment preview button + + @javascript + Scenario: I can preview with text + Given I write a comment like "Nice" + Then I should see the comment preview button + + @javascript + Scenario: I preview a comment + Given I preview a comment text like "Bug fixed :smile:" + Then I should see the comment preview + And I should not see the comment text field + + @javascript + Scenario: I can edit after preview + Given I preview a comment text like "Bug fixed :smile:" + Then I should see the comment edit button + + @javascript + Scenario: I have a reset form after posting from preview + Given I preview a comment text like "Bug fixed :smile:" + And I submit the comment + Then I should see an empty comment text field + And I should not see the comment preview + + @javascript + Scenario: I can delete a comment + Given I leave a comment like "XML attached" + And I delete a comment + Then I should not see a comment saying "XML attached" diff --git a/features/steps/project/comments_on_commits.rb b/features/steps/project/comments_on_commits.rb new file mode 100644 index 0000000..56bb12a --- /dev/null +++ b/features/steps/project/comments_on_commits.rb @@ -0,0 +1,6 @@ +class CommentsOnCommits < Spinach::FeatureSteps + include SharedAuthentication + include SharedNote + include SharedPaths + include SharedProject +end diff --git a/features/steps/project/project_comment_commit.rb b/features/steps/project/project_comment_commit.rb deleted file mode 100644 index cb8385e..0000000 --- a/features/steps/project/project_comment_commit.rb +++ /dev/null @@ -1,6 +0,0 @@ -class ProjectCommentCommit < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedNote - include SharedPaths -end diff --git a/features/steps/shared/note.rb b/features/steps/shared/note.rb index 923e69b..3d5441c 100644 --- a/features/steps/shared/note.rb +++ b/features/steps/shared/note.rb @@ -1,18 +1,111 @@ module SharedNote include Spinach::DSL + Given 'I delete a comment' do + first(".js-note-delete").trigger("click") + end + + Given 'I haven\'t written any comment text' do + within(".js-main-target-form") do + fill_in "note[note]", with: "" + end + end + Given 'I leave a comment like "XML attached"' do - fill_in "note_note", :with => "XML attached" - click_button "Add Comment" + within(".js-main-target-form") do + fill_in "note[note]", with: "XML attached" + click_button "Add Comment" + end end - Then 'I should see comment "XML attached"' do - page.should have_content "XML attached" + Given 'I preview a comment text like "Bug fixed :smile:"' do + within(".js-main-target-form") do + fill_in "note[note]", with: "Bug fixed :smile:" + find(".js-note-preview-button").trigger("click") + end end + Given 'I submit the comment' do + within(".js-main-target-form") do + click_button "Add Comment" + end + end + + Given 'I write a comment like "Nice"' do + within(".js-main-target-form") do + fill_in "note[note]", with: "Nice" + end + end + + + + Then 'I should not see a comment saying "XML attached"' do + page.should_not have_css(".note") + end + + Then 'I should not see the cancel comment button' do + within(".js-main-target-form") do + should_not have_link("Cancel") + end + end + + Then 'I should not see the comment preview' do + within(".js-main-target-form") do + page.should have_css(".js-note-preview", visible: false) + end + end + + Then 'I should not see the comment preview button' do + within(".js-main-target-form") do + page.should have_css(".js-note-preview-button", visible: false) + end + end + + Then 'I should not see the comment text field' do + within(".js-main-target-form") do + page.should have_css(".js-note-text", visible: false) + end + end + + Then 'I should see a comment saying "XML attached"' do + within(".note") do + page.should have_content("XML attached") + end + end + + Then 'I should see an empty comment text field' do + within(".js-main-target-form") do + page.should have_field("note[note]", with: "") + end + end + + Then 'I should see the comment edit button' do + within(".js-main-target-form") do + page.should have_css(".js-note-edit-button", visible: true) + end + end + + Then 'I should see the comment preview' do + within(".js-main-target-form") do + page.should have_css(".js-note-preview", visible: true) + end + end + + Then 'I should see the comment preview button' do + within(".js-main-target-form") do + page.should have_css(".js-note-preview-button", visible: true) + end + end + + + + # Wall + Given 'I write new comment "my special test message"' do - fill_in "note_note", :with => "my special test message" - click_button "Add Comment" + within(".js-main-target-form") do + fill_in "note[note]", with: "my special test message" + click_button "Add Comment" + end end Then 'I should see project wall note "my special test message"' do diff --git a/spec/requests/notes_on_commits_spec.rb b/spec/requests/notes_on_commits_spec.rb index cba41c4..e301f9a 100644 --- a/spec/requests/notes_on_commits_spec.rb +++ b/spec/requests/notes_on_commits_spec.rb @@ -1,98 +1,12 @@ require 'spec_helper' -describe "On a commit", js: true do - let!(:project) { create(:project) } - let!(:commit) { project.commit("bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a") } - - before do - login_as :user - project.add_access(@user, :read, :write) - - visit project_commit_path(project, commit) - end - - subject { page } - - describe "the note form" do - # main target form creation - it { should have_css(".js-main-target-form", visible: true, count: 1) } - - # button initalization - it { within(".js-main-target-form") { should have_button("Add Comment") } } - it { within(".js-main-target-form") { should_not have_link("Cancel") } } - - # notifiactions - it { within(".js-main-target-form") { should have_unchecked_field("Project team") } } - it { within(".js-main-target-form") { should have_checked_field("Commit author") } } - - describe "without text" do - it { 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 { within(".js-main-target-form") { should_not have_css(".js-comment-button[disabled]") } } - - it { within(".js-main-target-form") { should have_css(".js-note-preview-button", visible: true) } } - end - - describe "with preview" do - before do - within(".js-main-target-form") do - fill_in "note[note]", with: "This is awesome" - find(".js-note-preview-button").trigger("click") - end - end - - it { within(".js-main-target-form") { should have_css(".js-note-preview", text: "This is awesome", visible: true) } } - - it { within(".js-main-target-form") { should have_css(".js-note-preview-button", visible: false) } } - it { within(".js-main-target-form") { should have_css(".js-note-edit-button", visible: true) } } - 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 - - # note added - it { within(".js-main-target-form") { should have_content("This is awsome!") } } - - # reset form - it { within(".js-main-target-form") { should have_no_field("note[note]", with: "This is awesome!") } } - - # return from preview - it { within(".js-main-target-form") { should have_css(".js-note-preview", visible: false) } } - it { within(".js-main-target-form") { should have_css(".js-note-text", visible: true) } } - - - it "should be removable" do - find(".js-note-delete").trigger("click") - - should_not have_css(".note") - end - end -end - - - describe "On a commit diff", js: true do let!(:project) { create(:project) } - let!(:commit) { project.commit("bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a") } + let!(:commit) { project.repository.commit("bcf03b5de6c33f3869ef70d68cf06e679d1d7f9a") } before do login_as :user - project.add_access(@user, :read, :write) + project.team << [@user, :reporter] visit project_commit_path(project, commit) end -- libgit2 0.21.2