From fa34901237cc244fe8b828d079af891e63de1c8f Mon Sep 17 00:00:00 2001 From: Ciro Santilli Date: Thu, 2 Oct 2014 18:42:54 +0200 Subject: Make Spinach test names consistent - do not add Feature to feature titles - titleize feature titles - put steps on the same path as .feature files - make feature titles match their path --- features/steps/project/browse_branches.rb | 85 ------ features/steps/project/browse_commits.rb | 91 ------- .../steps/project/browse_commits_user_lookup.rb | 48 ---- features/steps/project/browse_files.rb | 176 ------------- features/steps/project/browse_git_repo.rb | 19 -- features/steps/project/browse_tags.rb | 82 ------ features/steps/project/comments_on_commit_diffs.rb | 6 - features/steps/project/comments_on_commits.rb | 6 - features/steps/project/commits/branches.rb | 85 ++++++ features/steps/project/commits/comments.rb | 6 + features/steps/project/commits/commits.rb | 91 +++++++ features/steps/project/commits/diff_comments.rb | 6 + features/steps/project/commits/tags.rb | 82 ++++++ features/steps/project/commits/user_lookup.rb | 48 ++++ features/steps/project/create.rb | 2 +- features/steps/project/filter_labels.rb | 79 ------ features/steps/project/fork.rb | 2 +- features/steps/project/issues.rb | 236 ----------------- features/steps/project/issues/filter_labels.rb | 79 ++++++ features/steps/project/issues/issues.rb | 236 +++++++++++++++++ features/steps/project/issues/labels.rb | 101 ++++++++ features/steps/project/issues/milestones.rb | 59 +++++ features/steps/project/labels.rb | 101 -------- features/steps/project/markdown_render.rb | 288 --------------------- features/steps/project/milestones.rb | 59 ----- features/steps/project/multiselect_blob.rb | 58 ----- features/steps/project/project.rb | 2 +- features/steps/project/search_code.rb | 19 -- features/steps/project/source/browse_files.rb | 176 +++++++++++++ features/steps/project/source/git_blame.rb | 19 ++ features/steps/project/source/markdown_render.rb | 288 +++++++++++++++++++++ features/steps/project/source/multiselect_blob.rb | 58 +++++ features/steps/project/source/search_code.rb | 19 ++ 33 files changed, 1356 insertions(+), 1356 deletions(-) delete mode 100644 features/steps/project/browse_branches.rb delete mode 100644 features/steps/project/browse_commits.rb delete mode 100644 features/steps/project/browse_commits_user_lookup.rb delete mode 100644 features/steps/project/browse_files.rb delete mode 100644 features/steps/project/browse_git_repo.rb delete mode 100644 features/steps/project/browse_tags.rb delete mode 100644 features/steps/project/comments_on_commit_diffs.rb delete mode 100644 features/steps/project/comments_on_commits.rb create mode 100644 features/steps/project/commits/branches.rb create mode 100644 features/steps/project/commits/comments.rb create mode 100644 features/steps/project/commits/commits.rb create mode 100644 features/steps/project/commits/diff_comments.rb create mode 100644 features/steps/project/commits/tags.rb create mode 100644 features/steps/project/commits/user_lookup.rb delete mode 100644 features/steps/project/filter_labels.rb delete mode 100644 features/steps/project/issues.rb create mode 100644 features/steps/project/issues/filter_labels.rb create mode 100644 features/steps/project/issues/issues.rb create mode 100644 features/steps/project/issues/labels.rb create mode 100644 features/steps/project/issues/milestones.rb delete mode 100644 features/steps/project/labels.rb delete mode 100644 features/steps/project/markdown_render.rb delete mode 100644 features/steps/project/milestones.rb delete mode 100644 features/steps/project/multiselect_blob.rb delete mode 100644 features/steps/project/search_code.rb create mode 100644 features/steps/project/source/browse_files.rb create mode 100644 features/steps/project/source/git_blame.rb create mode 100644 features/steps/project/source/markdown_render.rb create mode 100644 features/steps/project/source/multiselect_blob.rb create mode 100644 features/steps/project/source/search_code.rb (limited to 'features/steps/project') diff --git a/features/steps/project/browse_branches.rb b/features/steps/project/browse_branches.rb deleted file mode 100644 index 3b1e51f179a..00000000000 --- a/features/steps/project/browse_branches.rb +++ /dev/null @@ -1,85 +0,0 @@ -class Spinach::Features::ProjectBrowseBranches < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I click link "All"' do - click_link "All" - end - - step 'I should see "Shop" all branches list' do - page.should have_content "Branches" - page.should have_content "master" - end - - step 'I click link "Protected"' do - click_link "Protected" - end - - step 'I should see "Shop" protected branches list' do - within ".protected-branches-list" do - page.should have_content "stable" - page.should_not have_content "master" - end - end - - step 'project "Shop" has protected branches' do - project = Project.find_by(name: "Shop") - project.protected_branches.create(name: "stable") - end - - step 'I click new branch link' do - click_link "New branch" - end - - step 'I submit new branch form' do - fill_in 'branch_name', with: 'deploy_keys' - fill_in 'ref', with: 'master' - click_button 'Create branch' - end - - step 'I submit new branch form with invalid name' do - fill_in 'branch_name', with: '1.0 stable' - fill_in 'ref', with: 'master' - click_button 'Create branch' - end - - step 'I submit new branch form with invalid reference' do - fill_in 'branch_name', with: 'foo' - fill_in 'ref', with: 'foo' - click_button 'Create branch' - end - - step 'I submit new branch form with branch that already exists' do - fill_in 'branch_name', with: 'master' - fill_in 'ref', with: 'master' - click_button 'Create branch' - end - - step 'I should see new branch created' do - page.should have_content 'deploy_keys' - end - - step 'I should see new an error that branch is invalid' do - page.should have_content 'Branch name invalid' - end - - step 'I should see new an error that ref is invalid' do - page.should have_content 'Invalid reference name' - end - - step 'I should see new an error that branch already exists' do - page.should have_content 'Branch already exists' - end - - step "I click branch 'improve/awesome' delete link" do - within '.js-branch-improve\/awesome' do - find('.btn-remove').click - sleep 0.05 - end - end - - step "I should not see branch 'improve/awesome'" do - all(visible: true).should_not have_content 'improve/awesome' - end -end diff --git a/features/steps/project/browse_commits.rb b/features/steps/project/browse_commits.rb deleted file mode 100644 index 2048818e88c..00000000000 --- a/features/steps/project/browse_commits.rb +++ /dev/null @@ -1,91 +0,0 @@ -class Spinach::Features::ProjectBrowseCommits < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - include RepoHelpers - - step 'I see project commits' do - commit = @project.repository.commit - page.should have_content(@project.name) - page.should have_content(commit.message[0..20]) - page.should have_content(commit.id.to_s[0..5]) - end - - step 'I click atom feed link' do - click_link "Feed" - end - - step 'I see commits atom feed' do - commit = @project.repository.commit - response_headers['Content-Type'].should have_content("application/atom+xml") - body.should have_selector("title", text: "Recent commits to #{@project.name}") - body.should have_selector("author email", text: commit.author_email) - body.should have_selector("entry summary", text: commit.description[0..10]) - end - - step 'I click on commit link' do - visit project_commit_path(@project, sample_commit.id) - end - - step 'I see commit info' do - page.should have_content sample_commit.message - page.should have_content "Showing #{sample_commit.files_changed_count} changed files" - end - - step 'I fill compare fields with refs' do - fill_in "from", with: sample_commit.parent_id - fill_in "to", with: sample_commit.id - click_button "Compare" - end - - step 'I see compared refs' do - page.should have_content "Compare View" - page.should have_content "Commits (1)" - page.should have_content "Showing 2 changed files" - end - - step 'I see breadcrumb links' do - page.should have_selector('ul.breadcrumb') - page.should have_selector('ul.breadcrumb a', count: 4) - end - - step 'I see commits stats' do - page.should have_content 'Top 50 Committers' - page.should have_content 'Committers' - page.should have_content 'Total commits' - page.should have_content 'Authors' - end - - step 'I visit big commit page' do - Commit::DIFF_SAFE_FILES = 20 - visit project_commit_path(@project, sample_big_commit.id) - end - - step 'I see big commit warning' do - page.should have_content sample_big_commit.message - page.should have_content "Too many changes" - Commit::DIFF_SAFE_FILES = 100 - end - - step 'I visit a commit with an image that changed' do - visit project_commit_path(@project, sample_image_commit.id) - end - - step 'The diff links to both the previous and current image' do - links = all('.two-up span div a') - links[0]['href'].should =~ %r{blob/#{sample_image_commit.old_blob_id}} - links[1]['href'].should =~ %r{blob/#{sample_image_commit.new_blob_id}} - end - - step 'I click side-by-side diff button' do - click_link "Side-by-side Diff" - end - - step 'I see side-by-side diff button' do - page.should have_content "Side-by-side Diff" - end - - step 'I see inline diff button' do - page.should have_content "Inline Diff" - end -end diff --git a/features/steps/project/browse_commits_user_lookup.rb b/features/steps/project/browse_commits_user_lookup.rb deleted file mode 100644 index 196c69eda65..00000000000 --- a/features/steps/project/browse_commits_user_lookup.rb +++ /dev/null @@ -1,48 +0,0 @@ -class Spinach::Features::ProjectBrowseCommitsUserLookup < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I click on commit link' do - visit project_commit_path(@project, sample_commit.id) - end - - step 'I click on another commit link' do - visit project_commit_path(@project, sample_commit.parent_id) - end - - step 'I have user with primary email' do - user_primary - end - - step 'I have user with secondary email' do - user_secondary - end - - step 'I see author based on primary email' do - check_author_link(sample_commit.author_email, user_primary) - end - - step 'I see author based on secondary email' do - check_author_link(sample_commit.author_email, user_secondary) - end - - def check_author_link(email, user) - author_link = find('.commit-author-link') - author_link['href'].should == user_path(user) - author_link['data-original-title'].should == email - find('.commit-author-name').text.should == user.name - end - - def user_primary - @user_primary ||= create(:user, email: 'dmitriy.zaporozhets@gmail.com') - end - - def user_secondary - @user_secondary ||= begin - user = create(:user, email: 'dzaporozhets@example.com') - create(:email, { user: user, email: 'dmitriy.zaporozhets@gmail.com' }) - user - end - end -end diff --git a/features/steps/project/browse_files.rb b/features/steps/project/browse_files.rb deleted file mode 100644 index 4310f519032..00000000000 --- a/features/steps/project/browse_files.rb +++ /dev/null @@ -1,176 +0,0 @@ -class Spinach::Features::ProjectBrowseFiles < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - include RepoHelpers - - step 'I should see files from repository' do - page.should have_content "VERSION" - page.should have_content ".gitignore" - page.should have_content "LICENSE" - end - - step 'I should see files from repository for "6d39438"' do - current_path.should == project_tree_path(@project, "6d39438") - page.should have_content ".gitignore" - page.should have_content "LICENSE" - end - - step 'I see the ".gitignore"' do - page.should have_content '.gitignore' - end - - step 'I don\'t see the ".gitignore"' do - page.should_not have_content '.gitignore' - end - - step 'I click on ".gitignore" file in repo' do - click_link ".gitignore" - end - - step 'I should see its content' do - page.should have_content old_gitignore_content - end - - step 'I should see its new content' do - page.should have_content new_gitignore_content - end - - step 'I click link "Raw"' do - click_link 'Raw' - end - - step 'I should see raw file content' do - source.should == sample_blob.data - end - - step 'I click button "Edit"' do - click_link 'Edit' - end - - step 'I can edit code' do - set_new_content - evaluate_script('editor.getValue()').should == new_gitignore_content - end - - step 'I edit code' do - set_new_content - end - - step 'I fill the new file name' do - fill_in :file_name, with: new_file_name - end - - step 'I fill the commit message' do - fill_in :commit_message, with: 'Not yet a commit message.' - end - - step 'I click link "Diff"' do - click_link 'Diff' - end - - step 'I click on "Commit changes"' do - click_button 'Commit changes' - end - - step 'I click on "Remove"' do - click_link 'Remove' - end - - step 'I click on "Remove file"' do - click_button 'Remove file' - end - - step 'I see diff' do - page.should have_css '.line_holder.new' - end - - step 'I click on "new file" link in repo' do - click_link 'new-file-link' - end - - step 'I can see new file page' do - page.should have_content "New file" - page.should have_content "File name" - page.should have_content "Commit message" - end - - step 'I click on files directory' do - click_link 'files' - end - - step 'I click on History link' do - click_link 'History' - end - - step 'I see Browse dir link' do - page.should have_link 'Browse Dir »' - page.should_not have_link 'Browse Code »' - end - - step 'I click on readme file' do - within '.tree-table' do - click_link 'README.md' - end - end - - step 'I see Browse file link' do - page.should have_link 'Browse File »' - page.should_not have_link 'Browse Code »' - end - - step 'I see Browse code link' do - page.should have_link 'Browse Code »' - page.should_not have_link 'Browse File »' - page.should_not have_link 'Browse Dir »' - end - - step 'I click on Permalink' do - click_link 'Permalink' - end - - step 'I am redirected to the files URL' do - current_path.should == project_tree_path(@project, 'master') - end - - step 'I am redirected to the ".gitignore"' do - expect(current_path).to eq(project_blob_path(@project, 'master/.gitignore')) - end - - step 'I am redirected to the permalink URL' do - expect(current_path).to eq(project_blob_path( - @project, @project.repository.commit.sha + '/.gitignore')) - end - - step 'I am redirected to the new file' do - expect(current_path).to eq(project_blob_path( - @project, 'master/' + new_file_name)) - end - - step "I don't see the permalink link" do - expect(page).not_to have_link('permalink') - end - - private - - def set_new_content - execute_script("editor.setValue('#{new_gitignore_content}')") - end - - # Content of the gitignore file on the seed repository. - def old_gitignore_content - '*.rbc' - end - - # Constant value that differs from the content - # of the gitignore of the seed repository. - def new_gitignore_content - old_gitignore_content + 'a' - end - - # Constant value that is a valid filename and - # not a filename present at root of the seed repository. - def new_file_name - 'not_a_file.md' - end -end diff --git a/features/steps/project/browse_git_repo.rb b/features/steps/project/browse_git_repo.rb deleted file mode 100644 index d8703aadb81..00000000000 --- a/features/steps/project/browse_git_repo.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Spinach::Features::ProjectBrowseGitRepo < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I click on ".gitignore" file in repo' do - click_link ".gitignore" - end - - step 'I click Blame button' do - click_link 'Blame' - end - - step 'I should see git file blame' do - page.should have_content "*.rb" - page.should have_content "Dmitriy Zaporozhets" - page.should have_content "Initial commit" - end -end diff --git a/features/steps/project/browse_tags.rb b/features/steps/project/browse_tags.rb deleted file mode 100644 index 722c0a91076..00000000000 --- a/features/steps/project/browse_tags.rb +++ /dev/null @@ -1,82 +0,0 @@ -class Spinach::Features::ProjectBrowseTags < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I should see "Shop" all tags list' do - page.should have_content "Tags" - page.should have_content "v1.0.0" - end - - step 'I click new tag link' do - click_link 'New tag' - end - - step 'I submit new tag form' do - fill_in 'tag_name', with: 'v7.0' - fill_in 'ref', with: 'master' - click_button 'Create tag' - end - - step 'I submit new tag form with invalid name' do - fill_in 'tag_name', with: 'v 1.0' - fill_in 'ref', with: 'master' - click_button 'Create tag' - end - - step 'I submit new tag form with invalid reference' do - fill_in 'tag_name', with: 'foo' - fill_in 'ref', with: 'foo' - click_button 'Create tag' - end - - step 'I submit new tag form with tag that already exists' do - fill_in 'tag_name', with: 'v1.0.0' - fill_in 'ref', with: 'master' - click_button 'Create tag' - end - - step 'I should see new tag created' do - page.should have_content 'v7.0' - end - - step 'I should see new an error that tag is invalid' do - page.should have_content 'Tag name invalid' - end - - step 'I should see new an error that tag ref is invalid' do - page.should have_content 'Invalid reference name' - end - - step 'I should see new an error that tag already exists' do - page.should have_content 'Tag already exists' - end - - step "I delete tag 'v1.1.0'" do - within '.tags' do - first('.btn-remove').click - sleep 0.05 - end - end - - step "I should not see tag 'v1.1.0'" do - within '.tags' do - all(visible: true).should_not have_content 'v1.1.0' - end - end - - step 'I delete all tags' do - within '.tags' do - all('.btn-remove').each do |remove| - remove.click - sleep 0.05 - end - end - end - - step 'I should see tags info message' do - within '.tags' do - page.should have_content 'Repository has no tags yet.' - end - end -end diff --git a/features/steps/project/comments_on_commit_diffs.rb b/features/steps/project/comments_on_commit_diffs.rb deleted file mode 100644 index 50b978a5d23..00000000000 --- a/features/steps/project/comments_on_commit_diffs.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Spinach::Features::CommentsOnCommitDiffs < Spinach::FeatureSteps - include SharedAuthentication - include SharedDiffNote - include SharedPaths - include SharedProject -end diff --git a/features/steps/project/comments_on_commits.rb b/features/steps/project/comments_on_commits.rb deleted file mode 100644 index 03e6867c7b1..00000000000 --- a/features/steps/project/comments_on_commits.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Spinach::Features::CommentsOnCommits < Spinach::FeatureSteps - include SharedAuthentication - include SharedNote - include SharedPaths - include SharedProject -end diff --git a/features/steps/project/commits/branches.rb b/features/steps/project/commits/branches.rb new file mode 100644 index 00000000000..07f7e5796a3 --- /dev/null +++ b/features/steps/project/commits/branches.rb @@ -0,0 +1,85 @@ +class Spinach::Features::ProjectCommitsBranches < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I click link "All"' do + click_link "All" + end + + step 'I should see "Shop" all branches list' do + page.should have_content "Branches" + page.should have_content "master" + end + + step 'I click link "Protected"' do + click_link "Protected" + end + + step 'I should see "Shop" protected branches list' do + within ".protected-branches-list" do + page.should have_content "stable" + page.should_not have_content "master" + end + end + + step 'project "Shop" has protected branches' do + project = Project.find_by(name: "Shop") + project.protected_branches.create(name: "stable") + end + + step 'I click new branch link' do + click_link "New branch" + end + + step 'I submit new branch form' do + fill_in 'branch_name', with: 'deploy_keys' + fill_in 'ref', with: 'master' + click_button 'Create branch' + end + + step 'I submit new branch form with invalid name' do + fill_in 'branch_name', with: '1.0 stable' + fill_in 'ref', with: 'master' + click_button 'Create branch' + end + + step 'I submit new branch form with invalid reference' do + fill_in 'branch_name', with: 'foo' + fill_in 'ref', with: 'foo' + click_button 'Create branch' + end + + step 'I submit new branch form with branch that already exists' do + fill_in 'branch_name', with: 'master' + fill_in 'ref', with: 'master' + click_button 'Create branch' + end + + step 'I should see new branch created' do + page.should have_content 'deploy_keys' + end + + step 'I should see new an error that branch is invalid' do + page.should have_content 'Branch name invalid' + end + + step 'I should see new an error that ref is invalid' do + page.should have_content 'Invalid reference name' + end + + step 'I should see new an error that branch already exists' do + page.should have_content 'Branch already exists' + end + + step "I click branch 'improve/awesome' delete link" do + within '.js-branch-improve\/awesome' do + find('.btn-remove').click + sleep 0.05 + end + end + + step "I should not see branch 'improve/awesome'" do + all(visible: true).should_not have_content 'improve/awesome' + end +end diff --git a/features/steps/project/commits/comments.rb b/features/steps/project/commits/comments.rb new file mode 100644 index 00000000000..3d4d8ad6368 --- /dev/null +++ b/features/steps/project/commits/comments.rb @@ -0,0 +1,6 @@ +class Spinach::Features::ProjectCommitsComments < Spinach::FeatureSteps + include SharedAuthentication + include SharedNote + include SharedPaths + include SharedProject +end diff --git a/features/steps/project/commits/commits.rb b/features/steps/project/commits/commits.rb new file mode 100644 index 00000000000..c054e0e8282 --- /dev/null +++ b/features/steps/project/commits/commits.rb @@ -0,0 +1,91 @@ +class Spinach::Features::ProjectCommits < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + include RepoHelpers + + step 'I see project commits' do + commit = @project.repository.commit + page.should have_content(@project.name) + page.should have_content(commit.message[0..20]) + page.should have_content(commit.id.to_s[0..5]) + end + + step 'I click atom feed link' do + click_link "Feed" + end + + step 'I see commits atom feed' do + commit = @project.repository.commit + response_headers['Content-Type'].should have_content("application/atom+xml") + body.should have_selector("title", text: "Recent commits to #{@project.name}") + body.should have_selector("author email", text: commit.author_email) + body.should have_selector("entry summary", text: commit.description[0..10]) + end + + step 'I click on commit link' do + visit project_commit_path(@project, sample_commit.id) + end + + step 'I see commit info' do + page.should have_content sample_commit.message + page.should have_content "Showing #{sample_commit.files_changed_count} changed files" + end + + step 'I fill compare fields with refs' do + fill_in "from", with: sample_commit.parent_id + fill_in "to", with: sample_commit.id + click_button "Compare" + end + + step 'I see compared refs' do + page.should have_content "Compare View" + page.should have_content "Commits (1)" + page.should have_content "Showing 2 changed files" + end + + step 'I see breadcrumb links' do + page.should have_selector('ul.breadcrumb') + page.should have_selector('ul.breadcrumb a', count: 4) + end + + step 'I see commits stats' do + page.should have_content 'Top 50 Committers' + page.should have_content 'Committers' + page.should have_content 'Total commits' + page.should have_content 'Authors' + end + + step 'I visit big commit page' do + Commit::DIFF_SAFE_FILES = 20 + visit project_commit_path(@project, sample_big_commit.id) + end + + step 'I see big commit warning' do + page.should have_content sample_big_commit.message + page.should have_content "Too many changes" + Commit::DIFF_SAFE_FILES = 100 + end + + step 'I visit a commit with an image that changed' do + visit project_commit_path(@project, sample_image_commit.id) + end + + step 'The diff links to both the previous and current image' do + links = all('.two-up span div a') + links[0]['href'].should =~ %r{blob/#{sample_image_commit.old_blob_id}} + links[1]['href'].should =~ %r{blob/#{sample_image_commit.new_blob_id}} + end + + step 'I click side-by-side diff button' do + click_link "Side-by-side Diff" + end + + step 'I see side-by-side diff button' do + page.should have_content "Side-by-side Diff" + end + + step 'I see inline diff button' do + page.should have_content "Inline Diff" + end +end diff --git a/features/steps/project/commits/diff_comments.rb b/features/steps/project/commits/diff_comments.rb new file mode 100644 index 00000000000..b9d8cf2c5a5 --- /dev/null +++ b/features/steps/project/commits/diff_comments.rb @@ -0,0 +1,6 @@ +class Spinach::Features::ProjectCommitsDiffComments < Spinach::FeatureSteps + include SharedAuthentication + include SharedDiffNote + include SharedPaths + include SharedProject +end diff --git a/features/steps/project/commits/tags.rb b/features/steps/project/commits/tags.rb new file mode 100644 index 00000000000..3465fcbfd07 --- /dev/null +++ b/features/steps/project/commits/tags.rb @@ -0,0 +1,82 @@ +class Spinach::Features::ProjectCommitsTags < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I should see "Shop" all tags list' do + page.should have_content "Tags" + page.should have_content "v1.0.0" + end + + step 'I click new tag link' do + click_link 'New tag' + end + + step 'I submit new tag form' do + fill_in 'tag_name', with: 'v7.0' + fill_in 'ref', with: 'master' + click_button 'Create tag' + end + + step 'I submit new tag form with invalid name' do + fill_in 'tag_name', with: 'v 1.0' + fill_in 'ref', with: 'master' + click_button 'Create tag' + end + + step 'I submit new tag form with invalid reference' do + fill_in 'tag_name', with: 'foo' + fill_in 'ref', with: 'foo' + click_button 'Create tag' + end + + step 'I submit new tag form with tag that already exists' do + fill_in 'tag_name', with: 'v1.0.0' + fill_in 'ref', with: 'master' + click_button 'Create tag' + end + + step 'I should see new tag created' do + page.should have_content 'v7.0' + end + + step 'I should see new an error that tag is invalid' do + page.should have_content 'Tag name invalid' + end + + step 'I should see new an error that tag ref is invalid' do + page.should have_content 'Invalid reference name' + end + + step 'I should see new an error that tag already exists' do + page.should have_content 'Tag already exists' + end + + step "I delete tag 'v1.1.0'" do + within '.tags' do + first('.btn-remove').click + sleep 0.05 + end + end + + step "I should not see tag 'v1.1.0'" do + within '.tags' do + all(visible: true).should_not have_content 'v1.1.0' + end + end + + step 'I delete all tags' do + within '.tags' do + all('.btn-remove').each do |remove| + remove.click + sleep 0.05 + end + end + end + + step 'I should see tags info message' do + within '.tags' do + page.should have_content 'Repository has no tags yet.' + end + end +end diff --git a/features/steps/project/commits/user_lookup.rb b/features/steps/project/commits/user_lookup.rb new file mode 100644 index 00000000000..0622fef43bb --- /dev/null +++ b/features/steps/project/commits/user_lookup.rb @@ -0,0 +1,48 @@ +class Spinach::Features::ProjectCommitsUserLookup < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I click on commit link' do + visit project_commit_path(@project, sample_commit.id) + end + + step 'I click on another commit link' do + visit project_commit_path(@project, sample_commit.parent_id) + end + + step 'I have user with primary email' do + user_primary + end + + step 'I have user with secondary email' do + user_secondary + end + + step 'I see author based on primary email' do + check_author_link(sample_commit.author_email, user_primary) + end + + step 'I see author based on secondary email' do + check_author_link(sample_commit.author_email, user_secondary) + end + + def check_author_link(email, user) + author_link = find('.commit-author-link') + author_link['href'].should == user_path(user) + author_link['data-original-title'].should == email + find('.commit-author-name').text.should == user.name + end + + def user_primary + @user_primary ||= create(:user, email: 'dmitriy.zaporozhets@gmail.com') + end + + def user_secondary + @user_secondary ||= begin + user = create(:user, email: 'dzaporozhets@example.com') + create(:email, { user: user, email: 'dmitriy.zaporozhets@gmail.com' }) + user + end + end +end diff --git a/features/steps/project/create.rb b/features/steps/project/create.rb index bcd2524c205..e1062a6ce39 100644 --- a/features/steps/project/create.rb +++ b/features/steps/project/create.rb @@ -1,4 +1,4 @@ -class Spinach::Features::CreateProject < Spinach::FeatureSteps +class Spinach::Features::ProjectCreate < Spinach::FeatureSteps include SharedAuthentication include SharedPaths diff --git a/features/steps/project/filter_labels.rb b/features/steps/project/filter_labels.rb deleted file mode 100644 index aaa0cfe3379..00000000000 --- a/features/steps/project/filter_labels.rb +++ /dev/null @@ -1,79 +0,0 @@ -class Spinach::Features::ProjectFilterLabels < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I should see "bug" in labels filter' do - within ".labels-filter" do - page.should have_content "bug" - end - end - - step 'I should see "feature" in labels filter' do - within ".labels-filter" do - page.should have_content "feature" - end - end - - step 'I should see "enhancement" in labels filter' do - within ".labels-filter" do - page.should have_content "enhancement" - end - end - - step 'I should see "Bugfix1" in issues list' do - within ".issues-list" do - page.should have_content "Bugfix1" - end - end - - step 'I should see "Bugfix2" in issues list' do - within ".issues-list" do - page.should have_content "Bugfix2" - end - end - - step 'I should not see "Bugfix2" in issues list' do - within ".issues-list" do - page.should_not have_content "Bugfix2" - end - end - - step 'I should not see "Feature1" in issues list' do - within ".issues-list" do - page.should_not have_content "Feature1" - end - end - - step 'I click link "bug"' do - within ".labels-filter" do - click_link "bug" - end - end - - step 'I click link "feature"' do - within ".labels-filter" do - click_link "feature" - end - end - - step 'project "Shop" has issue "Bugfix1" with labels: "bug", "feature"' do - project = Project.find_by(name: "Shop") - issue = create(:issue, title: "Bugfix1", project: project) - issue.labels << project.labels.find_by(title: 'bug') - issue.labels << project.labels.find_by(title: 'feature') - end - - step 'project "Shop" has issue "Bugfix2" with labels: "bug", "enhancement"' do - project = Project.find_by(name: "Shop") - issue = create(:issue, title: "Bugfix2", project: project) - issue.labels << project.labels.find_by(title: 'bug') - issue.labels << project.labels.find_by(title: 'enhancement') - end - - step 'project "Shop" has issue "Feature1" with labels: "feature"' do - project = Project.find_by(name: "Shop") - issue = create(:issue, title: "Feature1", project: project) - issue.labels << project.labels.find_by(title: 'feature') - end -end diff --git a/features/steps/project/fork.rb b/features/steps/project/fork.rb index 791c6b1ffb9..da50ba9ced0 100644 --- a/features/steps/project/fork.rb +++ b/features/steps/project/fork.rb @@ -1,4 +1,4 @@ -class Spinach::Features::ForkProject < Spinach::FeatureSteps +class Spinach::Features::ProjectFork < Spinach::FeatureSteps include SharedAuthentication include SharedPaths include SharedProject diff --git a/features/steps/project/issues.rb b/features/steps/project/issues.rb deleted file mode 100644 index b55b3c6c8a2..00000000000 --- a/features/steps/project/issues.rb +++ /dev/null @@ -1,236 +0,0 @@ -class Spinach::Features::ProjectIssues < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedNote - include SharedPaths - include SharedMarkdown - - step 'I should see "Release 0.4" in issues' do - page.should have_content "Release 0.4" - end - - step 'I should not see "Release 0.3" in issues' do - page.should_not have_content "Release 0.3" - end - - step 'I should not see "Tweet control" in issues' do - page.should_not have_content "Tweet control" - end - - step 'I click link "Closed"' do - click_link "Closed" - end - - step 'I should see "Release 0.3" in issues' do - page.should have_content "Release 0.3" - end - - step 'I should not see "Release 0.4" in issues' do - page.should_not have_content "Release 0.4" - end - - step 'I click link "All"' do - click_link "All" - end - - step 'I click link "Release 0.4"' do - click_link "Release 0.4" - end - - step 'I should see issue "Release 0.4"' do - page.should have_content "Release 0.4" - end - - step 'I click link "New Issue"' do - click_link "New Issue" - end - - step 'I submit new issue "500 error on profile"' do - fill_in "issue_title", with: "500 error on profile" - click_button "Submit new issue" - end - - step 'I submit new issue "500 error on profile" with label \'bug\'' do - fill_in "issue_title", with: "500 error on profile" - select 'bug', from: "Labels" - click_button "Submit new issue" - end - - step 'I click link "500 error on profile"' do - click_link "500 error on profile" - end - - step 'I should see label \'bug\' with issue' do - within '.issue-show-labels' do - page.should have_content 'bug' - end - end - - step 'I should see issue "500 error on profile"' do - issue = Issue.find_by(title: "500 error on profile") - page.should have_content issue.title - page.should have_content issue.author_name - page.should have_content issue.project.name - end - - step 'I fill in issue search with "Re"' do - filter_issue "Re" - end - - step 'I fill in issue search with "Bu"' do - filter_issue "Bu" - end - - step 'I fill in issue search with ".3"' do - filter_issue ".3" - end - - step 'I fill in issue search with "Something"' do - filter_issue "Something" - end - - step 'I fill in issue search with ""' do - filter_issue "" - end - - step 'project "Shop" has milestone "v2.2"' do - - milestone = create(:milestone, title: "v2.2", project: project) - - 3.times { create(:issue, project: project, milestone: milestone) } - end - - step 'project "Shop" has milestone "v3.0"' do - - milestone = create(:milestone, title: "v3.0", project: project) - - 3.times { create(:issue, project: project, milestone: milestone) } - end - - When 'I select milestone "v3.0"' do - select "v3.0", from: "milestone_id" - end - - step 'I should see selected milestone with title "v3.0"' do - issues_milestone_selector = "#issue_milestone_id_chzn > a" - find(issues_milestone_selector).should have_content("v3.0") - end - - When 'I select first assignee from "Shop" project' do - - first_assignee = project.users.first - select first_assignee.name, from: "assignee_id" - end - - step 'I should see first assignee from "Shop" as selected assignee' do - issues_assignee_selector = "#issue_assignee_id_chzn > a" - - assignee_name = project.users.first.name - find(issues_assignee_selector).should have_content(assignee_name) - end - - step 'project "Shop" have "Release 0.4" open issue' do - - create(:issue, - title: "Release 0.4", - project: project, - author: project.users.first, - description: "# Description header" - ) - end - - step 'project "Shop" have "Tweet control" open issue' do - create(:issue, - title: "Tweet control", - project: project, - author: project.users.first) - end - - step 'project "Shop" have "Release 0.3" closed issue' do - create(:closed_issue, - title: "Release 0.3", - project: project, - author: project.users.first) - end - - step 'empty project "Empty Project"' do - create :empty_project, name: 'Empty Project', namespace: @user.namespace - end - - When 'I visit empty project page' do - project = Project.find_by(name: 'Empty Project') - visit project_path(project) - end - - step 'I see empty project details with ssh clone info' do - project = Project.find_by(name: 'Empty Project') - all(:css, '.git-empty .clone').each do |element| - element.text.should include(project.url_to_repo) - end - end - - When "I visit empty project's issues page" do - project = Project.find_by(name: 'Empty Project') - visit project_issues_path(project) - end - - step 'I leave a comment with code block' do - within(".js-main-target-form") do - fill_in "note[note]", with: "```\nCommand [1]: /usr/local/bin/git , see [text](doc/text)\n```" - click_button "Add Comment" - sleep 0.05 - end - end - - step 'The code block should be unchanged' do - page.should have_content("```\nCommand [1]: /usr/local/bin/git , see [text](doc/text)\n```") - end - - step 'project \'Shop\' has issue \'Bugfix1\' with description: \'Description for issue1\'' do - issue = create(:issue, title: 'Bugfix1', description: 'Description for issue1', project: project) - end - - step 'project \'Shop\' has issue \'Feature1\' with description: \'Feature submitted for issue1\'' do - issue = create(:issue, title: 'Feature1', description: 'Feature submitted for issue1', project: project) - end - - step 'I fill in issue search with \'Description for issue1\'' do - filter_issue 'Description for issue' - end - - step 'I fill in issue search with \'issue1\'' do - filter_issue 'issue1' - end - - step 'I fill in issue search with \'Rock and roll\'' do - filter_issue 'Description for issue' - end - - step 'I should see \'Bugfix1\' in issues' do - page.should have_content 'Bugfix1' - end - - step 'I should see \'Feature1\' in issues' do - page.should have_content 'Feature1' - end - - step 'I should not see \'Bugfix1\' in issues' do - page.should_not have_content 'Bugfix1' - end - - step 'issue \'Release 0.4\' has label \'bug\'' do - label = project.labels.create!(name: 'bug', color: '#990000') - issue = Issue.find_by!(title: 'Release 0.4') - issue.labels << label - end - - step 'I click label \'bug\'' do - within ".issues-list" do - click_link 'bug' - end - end - - def filter_issue(text) - fill_in 'issue_search', with: text - end -end diff --git a/features/steps/project/issues/filter_labels.rb b/features/steps/project/issues/filter_labels.rb new file mode 100644 index 00000000000..e62fa9c84c8 --- /dev/null +++ b/features/steps/project/issues/filter_labels.rb @@ -0,0 +1,79 @@ +class Spinach::Features::ProjectIssuesFilterLabels < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I should see "bug" in labels filter' do + within ".labels-filter" do + page.should have_content "bug" + end + end + + step 'I should see "feature" in labels filter' do + within ".labels-filter" do + page.should have_content "feature" + end + end + + step 'I should see "enhancement" in labels filter' do + within ".labels-filter" do + page.should have_content "enhancement" + end + end + + step 'I should see "Bugfix1" in issues list' do + within ".issues-list" do + page.should have_content "Bugfix1" + end + end + + step 'I should see "Bugfix2" in issues list' do + within ".issues-list" do + page.should have_content "Bugfix2" + end + end + + step 'I should not see "Bugfix2" in issues list' do + within ".issues-list" do + page.should_not have_content "Bugfix2" + end + end + + step 'I should not see "Feature1" in issues list' do + within ".issues-list" do + page.should_not have_content "Feature1" + end + end + + step 'I click link "bug"' do + within ".labels-filter" do + click_link "bug" + end + end + + step 'I click link "feature"' do + within ".labels-filter" do + click_link "feature" + end + end + + step 'project "Shop" has issue "Bugfix1" with labels: "bug", "feature"' do + project = Project.find_by(name: "Shop") + issue = create(:issue, title: "Bugfix1", project: project) + issue.labels << project.labels.find_by(title: 'bug') + issue.labels << project.labels.find_by(title: 'feature') + end + + step 'project "Shop" has issue "Bugfix2" with labels: "bug", "enhancement"' do + project = Project.find_by(name: "Shop") + issue = create(:issue, title: "Bugfix2", project: project) + issue.labels << project.labels.find_by(title: 'bug') + issue.labels << project.labels.find_by(title: 'enhancement') + end + + step 'project "Shop" has issue "Feature1" with labels: "feature"' do + project = Project.find_by(name: "Shop") + issue = create(:issue, title: "Feature1", project: project) + issue.labels << project.labels.find_by(title: 'feature') + end +end diff --git a/features/steps/project/issues/issues.rb b/features/steps/project/issues/issues.rb new file mode 100644 index 00000000000..b55b3c6c8a2 --- /dev/null +++ b/features/steps/project/issues/issues.rb @@ -0,0 +1,236 @@ +class Spinach::Features::ProjectIssues < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedNote + include SharedPaths + include SharedMarkdown + + step 'I should see "Release 0.4" in issues' do + page.should have_content "Release 0.4" + end + + step 'I should not see "Release 0.3" in issues' do + page.should_not have_content "Release 0.3" + end + + step 'I should not see "Tweet control" in issues' do + page.should_not have_content "Tweet control" + end + + step 'I click link "Closed"' do + click_link "Closed" + end + + step 'I should see "Release 0.3" in issues' do + page.should have_content "Release 0.3" + end + + step 'I should not see "Release 0.4" in issues' do + page.should_not have_content "Release 0.4" + end + + step 'I click link "All"' do + click_link "All" + end + + step 'I click link "Release 0.4"' do + click_link "Release 0.4" + end + + step 'I should see issue "Release 0.4"' do + page.should have_content "Release 0.4" + end + + step 'I click link "New Issue"' do + click_link "New Issue" + end + + step 'I submit new issue "500 error on profile"' do + fill_in "issue_title", with: "500 error on profile" + click_button "Submit new issue" + end + + step 'I submit new issue "500 error on profile" with label \'bug\'' do + fill_in "issue_title", with: "500 error on profile" + select 'bug', from: "Labels" + click_button "Submit new issue" + end + + step 'I click link "500 error on profile"' do + click_link "500 error on profile" + end + + step 'I should see label \'bug\' with issue' do + within '.issue-show-labels' do + page.should have_content 'bug' + end + end + + step 'I should see issue "500 error on profile"' do + issue = Issue.find_by(title: "500 error on profile") + page.should have_content issue.title + page.should have_content issue.author_name + page.should have_content issue.project.name + end + + step 'I fill in issue search with "Re"' do + filter_issue "Re" + end + + step 'I fill in issue search with "Bu"' do + filter_issue "Bu" + end + + step 'I fill in issue search with ".3"' do + filter_issue ".3" + end + + step 'I fill in issue search with "Something"' do + filter_issue "Something" + end + + step 'I fill in issue search with ""' do + filter_issue "" + end + + step 'project "Shop" has milestone "v2.2"' do + + milestone = create(:milestone, title: "v2.2", project: project) + + 3.times { create(:issue, project: project, milestone: milestone) } + end + + step 'project "Shop" has milestone "v3.0"' do + + milestone = create(:milestone, title: "v3.0", project: project) + + 3.times { create(:issue, project: project, milestone: milestone) } + end + + When 'I select milestone "v3.0"' do + select "v3.0", from: "milestone_id" + end + + step 'I should see selected milestone with title "v3.0"' do + issues_milestone_selector = "#issue_milestone_id_chzn > a" + find(issues_milestone_selector).should have_content("v3.0") + end + + When 'I select first assignee from "Shop" project' do + + first_assignee = project.users.first + select first_assignee.name, from: "assignee_id" + end + + step 'I should see first assignee from "Shop" as selected assignee' do + issues_assignee_selector = "#issue_assignee_id_chzn > a" + + assignee_name = project.users.first.name + find(issues_assignee_selector).should have_content(assignee_name) + end + + step 'project "Shop" have "Release 0.4" open issue' do + + create(:issue, + title: "Release 0.4", + project: project, + author: project.users.first, + description: "# Description header" + ) + end + + step 'project "Shop" have "Tweet control" open issue' do + create(:issue, + title: "Tweet control", + project: project, + author: project.users.first) + end + + step 'project "Shop" have "Release 0.3" closed issue' do + create(:closed_issue, + title: "Release 0.3", + project: project, + author: project.users.first) + end + + step 'empty project "Empty Project"' do + create :empty_project, name: 'Empty Project', namespace: @user.namespace + end + + When 'I visit empty project page' do + project = Project.find_by(name: 'Empty Project') + visit project_path(project) + end + + step 'I see empty project details with ssh clone info' do + project = Project.find_by(name: 'Empty Project') + all(:css, '.git-empty .clone').each do |element| + element.text.should include(project.url_to_repo) + end + end + + When "I visit empty project's issues page" do + project = Project.find_by(name: 'Empty Project') + visit project_issues_path(project) + end + + step 'I leave a comment with code block' do + within(".js-main-target-form") do + fill_in "note[note]", with: "```\nCommand [1]: /usr/local/bin/git , see [text](doc/text)\n```" + click_button "Add Comment" + sleep 0.05 + end + end + + step 'The code block should be unchanged' do + page.should have_content("```\nCommand [1]: /usr/local/bin/git , see [text](doc/text)\n```") + end + + step 'project \'Shop\' has issue \'Bugfix1\' with description: \'Description for issue1\'' do + issue = create(:issue, title: 'Bugfix1', description: 'Description for issue1', project: project) + end + + step 'project \'Shop\' has issue \'Feature1\' with description: \'Feature submitted for issue1\'' do + issue = create(:issue, title: 'Feature1', description: 'Feature submitted for issue1', project: project) + end + + step 'I fill in issue search with \'Description for issue1\'' do + filter_issue 'Description for issue' + end + + step 'I fill in issue search with \'issue1\'' do + filter_issue 'issue1' + end + + step 'I fill in issue search with \'Rock and roll\'' do + filter_issue 'Description for issue' + end + + step 'I should see \'Bugfix1\' in issues' do + page.should have_content 'Bugfix1' + end + + step 'I should see \'Feature1\' in issues' do + page.should have_content 'Feature1' + end + + step 'I should not see \'Bugfix1\' in issues' do + page.should_not have_content 'Bugfix1' + end + + step 'issue \'Release 0.4\' has label \'bug\'' do + label = project.labels.create!(name: 'bug', color: '#990000') + issue = Issue.find_by!(title: 'Release 0.4') + issue.labels << label + end + + step 'I click label \'bug\'' do + within ".issues-list" do + click_link 'bug' + end + end + + def filter_issue(text) + fill_in 'issue_search', with: text + end +end diff --git a/features/steps/project/issues/labels.rb b/features/steps/project/issues/labels.rb new file mode 100644 index 00000000000..3e3e90824b4 --- /dev/null +++ b/features/steps/project/issues/labels.rb @@ -0,0 +1,101 @@ +class Spinach::Features::ProjectIssuesLabels < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I visit \'bug\' label edit page' do + visit edit_project_label_path(project, bug_label) + end + + step 'I remove label \'bug\'' do + within "#label_#{bug_label.id}" do + click_link 'Remove' + end + end + + step 'I delete all labels' do + within '.labels' do + all('.btn-remove').each do |remove| + remove.click + sleep 0.05 + end + end + end + + step 'I should see labels help message' do + within '.labels' do + page.should have_content 'Create first label or generate default set of '\ + 'labels' + end + end + + step 'I submit new label \'support\'' do + fill_in 'Title', with: 'support' + fill_in 'Background Color', with: '#F95610' + click_button 'Save' + end + + step 'I submit new label \'bug\'' do + fill_in 'Title', with: 'bug' + fill_in 'Background Color', with: '#F95610' + click_button 'Save' + end + + step 'I submit new label with invalid color' do + fill_in 'Title', with: 'support' + fill_in 'Background Color', with: '#12' + click_button 'Save' + end + + step 'I should see label label exist error message' do + within '.label-form' do + page.should have_content 'Title has already been taken' + end + end + + step 'I should see label color error message' do + within '.label-form' do + page.should have_content 'Color is invalid' + end + end + + step 'I should see label \'feature\'' do + within '.manage-labels-list' do + page.should have_content 'feature' + end + end + + step 'I should see label \'bug\'' do + within '.manage-labels-list' do + page.should have_content 'bug' + end + end + + step 'I should not see label \'bug\'' do + within '.manage-labels-list' do + page.should_not have_content 'bug' + end + end + + step 'I should see label \'support\'' do + within '.manage-labels-list' do + page.should have_content 'support' + end + end + + step 'I change label \'bug\' to \'fix\'' do + fill_in 'Title', with: 'fix' + fill_in 'Background Color', with: '#F15610' + click_button 'Save' + end + + step 'I should see label \'fix\'' do + within '.manage-labels-list' do + page.should have_content 'fix' + end + end + + def bug_label + project.labels.find_or_create_by(title: 'bug') + end +end diff --git a/features/steps/project/issues/milestones.rb b/features/steps/project/issues/milestones.rb new file mode 100644 index 00000000000..89d7af3c9ee --- /dev/null +++ b/features/steps/project/issues/milestones.rb @@ -0,0 +1,59 @@ +class Spinach::Features::ProjectIssuesMilestones < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + include SharedMarkdown + + step 'I should see milestone "v2.2"' do + milestone = @project.milestones.find_by(title: "v2.2") + page.should have_content(milestone.title[0..10]) + page.should have_content(milestone.expires_at) + page.should have_content("Browse Issues") + end + + step 'I click link "v2.2"' do + click_link "v2.2" + end + + step 'I click link "New Milestone"' do + click_link "New Milestone" + end + + step 'I submit new milestone "v2.3"' do + fill_in "milestone_title", with: "v2.3" + click_button "Create milestone" + end + + step 'I should see milestone "v2.3"' do + milestone = @project.milestones.find_by(title: "v2.3") + page.should have_content(milestone.title[0..10]) + page.should have_content(milestone.expires_at) + page.should have_content("Browse Issues") + end + + step 'project "Shop" has milestone "v2.2"' do + project = Project.find_by(name: "Shop") + milestone = create(:milestone, + title: "v2.2", + project: project, + description: "# Description header" + ) + 3.times { create(:issue, project: project, milestone: milestone) } + end + + step 'the milestone has open and closed issues' do + project = Project.find_by(name: "Shop") + milestone = project.milestones.find_by(title: 'v2.2') + + # 3 Open issues created above; create one closed issue + create(:closed_issue, project: project, milestone: milestone) + end + + When 'I click link "All Issues"' do + click_link 'All Issues' + end + + step 'I should see 3 issues' do + page.should have_selector('#tab-issues li.issue-row', count: 4) + end +end diff --git a/features/steps/project/labels.rb b/features/steps/project/labels.rb deleted file mode 100644 index b287e183b91..00000000000 --- a/features/steps/project/labels.rb +++ /dev/null @@ -1,101 +0,0 @@ -class Spinach::Features::ProjectLabels < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I visit \'bug\' label edit page' do - visit edit_project_label_path(project, bug_label) - end - - step 'I remove label \'bug\'' do - within "#label_#{bug_label.id}" do - click_link 'Remove' - end - end - - step 'I delete all labels' do - within '.labels' do - all('.btn-remove').each do |remove| - remove.click - sleep 0.05 - end - end - end - - step 'I should see labels help message' do - within '.labels' do - page.should have_content 'Create first label or generate default set of '\ - 'labels' - end - end - - step 'I submit new label \'support\'' do - fill_in 'Title', with: 'support' - fill_in 'Background Color', with: '#F95610' - click_button 'Save' - end - - step 'I submit new label \'bug\'' do - fill_in 'Title', with: 'bug' - fill_in 'Background Color', with: '#F95610' - click_button 'Save' - end - - step 'I submit new label with invalid color' do - fill_in 'Title', with: 'support' - fill_in 'Background Color', with: '#12' - click_button 'Save' - end - - step 'I should see label label exist error message' do - within '.label-form' do - page.should have_content 'Title has already been taken' - end - end - - step 'I should see label color error message' do - within '.label-form' do - page.should have_content 'Color is invalid' - end - end - - step 'I should see label \'feature\'' do - within '.manage-labels-list' do - page.should have_content 'feature' - end - end - - step 'I should see label \'bug\'' do - within '.manage-labels-list' do - page.should have_content 'bug' - end - end - - step 'I should not see label \'bug\'' do - within '.manage-labels-list' do - page.should_not have_content 'bug' - end - end - - step 'I should see label \'support\'' do - within '.manage-labels-list' do - page.should have_content 'support' - end - end - - step 'I change label \'bug\' to \'fix\'' do - fill_in 'Title', with: 'fix' - fill_in 'Background Color', with: '#F15610' - click_button 'Save' - end - - step 'I should see label \'fix\'' do - within '.manage-labels-list' do - page.should have_content 'fix' - end - end - - def bug_label - project.labels.find_or_create_by(title: 'bug') - end -end diff --git a/features/steps/project/markdown_render.rb b/features/steps/project/markdown_render.rb deleted file mode 100644 index a8631af2e05..00000000000 --- a/features/steps/project/markdown_render.rb +++ /dev/null @@ -1,288 +0,0 @@ -# If you need to modify the existing seed repository for your tests, -# it is recommended that you make the changes on the `markdown` branch of the seed project repository, -# which should only be used by tests in this file. See `/spec/factories.rb#project` for more info. -class Spinach::Features::ProjectMarkdownRender < Spinach::FeatureSteps - include SharedAuthentication - include SharedPaths - include SharedMarkdown - - step 'I own project "Delta"' do - @project = Project.find_by(name: "Delta") - @project ||= create(:project, name: "Delta", namespace: @user.namespace) - @project.team << [@user, :master] - end - - step 'I should see files from repository in markdown' do - current_path.should == project_tree_path(@project, "markdown") - page.should have_content "README.md" - page.should have_content "CHANGELOG" - end - - step 'I should see rendered README which contains correct links' do - page.should have_content "Welcome to GitLab GitLab is a free project and repository management application" - page.should have_link "GitLab API doc" - page.should have_link "GitLab API website" - page.should have_link "Rake tasks" - page.should have_link "backup and restore procedure" - page.should have_link "GitLab API doc directory" - page.should have_link "Maintenance" - end - - step 'I click on Gitlab API in README' do - click_link "GitLab API doc" - end - - step 'I should see correct document rendered' do - current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") - page.should have_content "All API requests require authentication" - end - - step 'I click on Rake tasks in README' do - click_link "Rake tasks" - end - - step 'I should see correct directory rendered' do - current_path.should == project_tree_path(@project, "markdown/doc/raketasks") - page.should have_content "backup_restore.md" - page.should have_content "maintenance.md" - end - - step 'I click on GitLab API doc directory in README' do - click_link "GitLab API doc directory" - end - - step 'I should see correct doc/api directory rendered' do - current_path.should == project_tree_path(@project, "markdown/doc/api") - page.should have_content "README.md" - page.should have_content "users.md" - end - - step 'I click on Maintenance in README' do - click_link "Maintenance" - end - - step 'I should see correct maintenance file rendered' do - current_path.should == project_blob_path(@project, "markdown/doc/raketasks/maintenance.md") - page.should have_content "bundle exec rake gitlab:env:info RAILS_ENV=production" - end - - step 'I click on link "empty" in the README' do - within('.readme-holder') do - click_link "empty" - end - end - - step 'I click on link "id" in the README' do - within('.readme-holder') do - click_link "#id" - end - end - - step 'I navigate to the doc/api/README' do - within '.tree-table' do - click_link "doc" - end - - within '.tree-table' do - click_link "api" - end - - within '.tree-table' do - click_link "README.md" - end - end - - step 'I see correct file rendered' do - current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") - page.should have_content "Contents" - page.should have_link "Users" - page.should have_link "Rake tasks" - end - - step 'I click on users in doc/api/README' do - click_link "Users" - end - - step 'I should see the correct document file' do - current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") - page.should have_content "Get a list of users." - end - - step 'I click on raketasks in doc/api/README' do - click_link "Rake tasks" - end - - # Markdown branch - - When 'I visit markdown branch' do - visit project_tree_path(@project, "markdown") - end - - When 'I visit markdown branch "README.md" blob' do - visit project_blob_path(@project, "markdown/README.md") - end - - When 'I visit markdown branch "d" tree' do - visit project_tree_path(@project, "markdown/d") - end - - When 'I visit markdown branch "d/README.md" blob' do - visit project_blob_path(@project, "markdown/d/README.md") - end - - step 'I should see files from repository in markdown branch' do - current_path.should == project_tree_path(@project, "markdown") - page.should have_content "README.md" - page.should have_content "CHANGELOG" - end - - step 'I see correct file rendered in markdown branch' do - current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") - page.should have_content "Contents" - page.should have_link "Users" - page.should have_link "Rake tasks" - end - - step 'I should see correct document rendered for markdown branch' do - current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") - page.should have_content "All API requests require authentication" - end - - step 'I should see correct directory rendered for markdown branch' do - current_path.should == project_tree_path(@project, "markdown/doc/raketasks") - page.should have_content "backup_restore.md" - page.should have_content "maintenance.md" - end - - step 'I should see the users document file in markdown branch' do - current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") - page.should have_content "Get a list of users." - end - - # Expected link contents - - step 'The link with text "empty" should have url "tree/markdown"' do - find('a', text: /^empty$/)['href'] == current_host + project_tree_path(@project, "markdown") - end - - step 'The link with text "empty" should have url "blob/markdown/README.md"' do - find('a', text: /^empty$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") - end - - step 'The link with text "empty" should have url "tree/markdown/d"' do - find('a', text: /^empty$/)['href'] == current_host + project_tree_path(@project, "markdown/d") - end - - step 'The link with text "empty" should have '\ - 'url "blob/markdown/d/README.md"' do - find('a', text: /^empty$/)['href'] == current_host + project_blob_path(@project, "markdown/d/README.md") - end - - step 'The link with text "ID" should have url "tree/markdownID"' do - find('a', text: /^#id$/)['href'] == current_host + project_tree_path(@project, "markdown") + '#id' - end - - step 'The link with text "/ID" should have url "tree/markdownID"' do - find('a', text: /^\/#id$/)['href'] == current_host + project_tree_path(@project, "markdown") + '#id' - end - - step 'The link with text "README.mdID" '\ - 'should have url "blob/markdown/README.mdID"' do - find('a', text: /^README.md#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id' - end - - step 'The link with text "d/README.mdID" should have '\ - 'url "blob/markdown/d/README.mdID"' do - find('a', text: /^d\/README.md#id$/)['href'] == current_host + project_blob_path(@project, "d/markdown/README.md") + '#id' - end - - step 'The link with text "ID" should have url "blob/markdown/README.mdID"' do - find('a', text: /^#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id' - end - - step 'The link with text "/ID" should have url "blob/markdown/README.mdID"' do - find('a', text: /^\/#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id' - end - - # Wiki - - step 'I go to wiki page' do - click_link "Wiki" - current_path.should == project_wiki_path(@project, "home") - end - - step 'I add various links to the wiki page' do - fill_in "wiki[content]", with: "[test](test)\n[GitLab API doc](api)\n[Rake tasks](raketasks)\n" - fill_in "wiki[message]", with: "Adding links to wiki" - click_button "Create page" - end - - step 'Wiki page should have added links' do - current_path.should == project_wiki_path(@project, "home") - page.should have_content "test GitLab API doc Rake tasks" - end - - step 'I add a header to the wiki page' do - fill_in "wiki[content]", with: "# Wiki header\n" - fill_in "wiki[message]", with: "Add header to wiki" - click_button "Create page" - end - - step 'Wiki header should have correct id and link' do - header_should_have_correct_id_and_link(1, 'Wiki header', 'wiki-header') - end - - step 'I click on test link' do - click_link "test" - end - - step 'I see new wiki page named test' do - current_path.should == project_wiki_path(@project, "test") - page.should have_content "Editing" - end - - When 'I go back to wiki page home' do - visit project_wiki_path(@project, "home") - current_path.should == project_wiki_path(@project, "home") - end - - step 'I click on GitLab API doc link' do - click_link "GitLab API" - end - - step 'I see Gitlab API document' do - current_path.should == project_wiki_path(@project, "api") - page.should have_content "Editing" - end - - step 'I click on Rake tasks link' do - click_link "Rake tasks" - end - - step 'I see Rake tasks directory' do - current_path.should == project_wiki_path(@project, "raketasks") - page.should have_content "Editing" - end - - step 'I go directory which contains README file' do - visit project_tree_path(@project, "markdown/doc/api") - current_path.should == project_tree_path(@project, "markdown/doc/api") - end - - step 'I click on a relative link in README' do - click_link "Users" - end - - step 'I should see the correct markdown' do - current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") - page.should have_content "List users" - end - - step 'Header "Application details" should have correct id and link' do - header_should_have_correct_id_and_link(2, 'Application details', 'application-details') - end - - step 'Header "GitLab API" should have correct id and link' do - header_should_have_correct_id_and_link(1, 'GitLab API', 'gitlab-api') - end -end diff --git a/features/steps/project/milestones.rb b/features/steps/project/milestones.rb deleted file mode 100644 index 13f917a6279..00000000000 --- a/features/steps/project/milestones.rb +++ /dev/null @@ -1,59 +0,0 @@ -class Spinach::Features::ProjectMilestones < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - include SharedMarkdown - - step 'I should see milestone "v2.2"' do - milestone = @project.milestones.find_by(title: "v2.2") - page.should have_content(milestone.title[0..10]) - page.should have_content(milestone.expires_at) - page.should have_content("Browse Issues") - end - - step 'I click link "v2.2"' do - click_link "v2.2" - end - - step 'I click link "New Milestone"' do - click_link "New Milestone" - end - - step 'I submit new milestone "v2.3"' do - fill_in "milestone_title", with: "v2.3" - click_button "Create milestone" - end - - step 'I should see milestone "v2.3"' do - milestone = @project.milestones.find_by(title: "v2.3") - page.should have_content(milestone.title[0..10]) - page.should have_content(milestone.expires_at) - page.should have_content("Browse Issues") - end - - step 'project "Shop" has milestone "v2.2"' do - project = Project.find_by(name: "Shop") - milestone = create(:milestone, - title: "v2.2", - project: project, - description: "# Description header" - ) - 3.times { create(:issue, project: project, milestone: milestone) } - end - - step 'the milestone has open and closed issues' do - project = Project.find_by(name: "Shop") - milestone = project.milestones.find_by(title: 'v2.2') - - # 3 Open issues created above; create one closed issue - create(:closed_issue, project: project, milestone: milestone) - end - - When 'I click link "All Issues"' do - click_link 'All Issues' - end - - step 'I should see 3 issues' do - page.should have_selector('#tab-issues li.issue-row', count: 4) - end -end diff --git a/features/steps/project/multiselect_blob.rb b/features/steps/project/multiselect_blob.rb deleted file mode 100644 index 611289a6162..00000000000 --- a/features/steps/project/multiselect_blob.rb +++ /dev/null @@ -1,58 +0,0 @@ -class Spinach::Features::ProjectMultiselectBlob < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - class << self - def click_line_steps(*line_numbers) - line_numbers.each do |line_number| - step "I click line #{line_number} in file" do - find("#L#{line_number}").click - end - - step "I shift-click line #{line_number} in file" do - script = "$('#L#{line_number}').trigger($.Event('click', { shiftKey: true }));" - execute_script(script) - end - end - end - - def check_state_steps(*ranges) - ranges.each do |range| - fragment = range.kind_of?(Array) ? "L#{range.first}-#{range.last}" : "L#{range}" - pluralization = range.kind_of?(Array) ? "s" : "" - - step "I should see \"#{fragment}\" as URI fragment" do - URI.parse(current_url).fragment.should == fragment - end - - step "I should see line#{pluralization} #{fragment[1..-1]} highlighted" do - ids = Array(range).map { |n| "LC#{n}" } - extra = false - - highlighted = all("#tree-content-holder .highlight .line.hll") - highlighted.each do |element| - extra ||= ids.delete(element[:id]).nil? - end - - extra.should be_false and ids.should be_empty - end - end - end - end - - click_line_steps *Array(1..5) - check_state_steps *Array(1..5), Array(1..2), Array(1..3), Array(1..4), Array(1..5), Array(3..5) - - step 'I go back in history' do - go_back - end - - step 'I go forward in history' do - go_forward - end - - step 'I click on ".gitignore" file in repo' do - click_link ".gitignore" - end -end diff --git a/features/steps/project/project.rb b/features/steps/project/project.rb index f543e47b4c2..f7fff8e64f9 100644 --- a/features/steps/project/project.rb +++ b/features/steps/project/project.rb @@ -1,4 +1,4 @@ -class Spinach::Features::ProjectFeature < Spinach::FeatureSteps +class Spinach::Features::Project < Spinach::FeatureSteps include SharedAuthentication include SharedProject include SharedPaths diff --git a/features/steps/project/search_code.rb b/features/steps/project/search_code.rb deleted file mode 100644 index 5753296251f..00000000000 --- a/features/steps/project/search_code.rb +++ /dev/null @@ -1,19 +0,0 @@ -class Spinach::Features::ProjectSearchCode < Spinach::FeatureSteps - include SharedAuthentication - include SharedProject - include SharedPaths - - step 'I search for term "coffee"' do - fill_in "search", with: "coffee" - click_button "Go" - end - - step 'I should see files from repository containing "coffee"' do - page.should have_content 'coffee' - page.should have_content 'CONTRIBUTING.md' - end - - step 'I should see empty result' do - page.should have_content "We couldn't find any matching" - end -end diff --git a/features/steps/project/source/browse_files.rb b/features/steps/project/source/browse_files.rb new file mode 100644 index 00000000000..0642302e797 --- /dev/null +++ b/features/steps/project/source/browse_files.rb @@ -0,0 +1,176 @@ +class Spinach::Features::ProjectSourceBrowseFiles < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + include RepoHelpers + + step 'I should see files from repository' do + page.should have_content "VERSION" + page.should have_content ".gitignore" + page.should have_content "LICENSE" + end + + step 'I should see files from repository for "6d39438"' do + current_path.should == project_tree_path(@project, "6d39438") + page.should have_content ".gitignore" + page.should have_content "LICENSE" + end + + step 'I see the ".gitignore"' do + page.should have_content '.gitignore' + end + + step 'I don\'t see the ".gitignore"' do + page.should_not have_content '.gitignore' + end + + step 'I click on ".gitignore" file in repo' do + click_link ".gitignore" + end + + step 'I should see its content' do + page.should have_content old_gitignore_content + end + + step 'I should see its new content' do + page.should have_content new_gitignore_content + end + + step 'I click link "Raw"' do + click_link 'Raw' + end + + step 'I should see raw file content' do + source.should == sample_blob.data + end + + step 'I click button "Edit"' do + click_link 'Edit' + end + + step 'I can edit code' do + set_new_content + evaluate_script('editor.getValue()').should == new_gitignore_content + end + + step 'I edit code' do + set_new_content + end + + step 'I fill the new file name' do + fill_in :file_name, with: new_file_name + end + + step 'I fill the commit message' do + fill_in :commit_message, with: 'Not yet a commit message.' + end + + step 'I click link "Diff"' do + click_link 'Diff' + end + + step 'I click on "Commit changes"' do + click_button 'Commit changes' + end + + step 'I click on "Remove"' do + click_link 'Remove' + end + + step 'I click on "Remove file"' do + click_button 'Remove file' + end + + step 'I see diff' do + page.should have_css '.line_holder.new' + end + + step 'I click on "new file" link in repo' do + click_link 'new-file-link' + end + + step 'I can see new file page' do + page.should have_content "New file" + page.should have_content "File name" + page.should have_content "Commit message" + end + + step 'I click on files directory' do + click_link 'files' + end + + step 'I click on History link' do + click_link 'History' + end + + step 'I see Browse dir link' do + page.should have_link 'Browse Dir »' + page.should_not have_link 'Browse Code »' + end + + step 'I click on readme file' do + within '.tree-table' do + click_link 'README.md' + end + end + + step 'I see Browse file link' do + page.should have_link 'Browse File »' + page.should_not have_link 'Browse Code »' + end + + step 'I see Browse code link' do + page.should have_link 'Browse Code »' + page.should_not have_link 'Browse File »' + page.should_not have_link 'Browse Dir »' + end + + step 'I click on Permalink' do + click_link 'Permalink' + end + + step 'I am redirected to the files URL' do + current_path.should == project_tree_path(@project, 'master') + end + + step 'I am redirected to the ".gitignore"' do + expect(current_path).to eq(project_blob_path(@project, 'master/.gitignore')) + end + + step 'I am redirected to the permalink URL' do + expect(current_path).to eq(project_blob_path( + @project, @project.repository.commit.sha + '/.gitignore')) + end + + step 'I am redirected to the new file' do + expect(current_path).to eq(project_blob_path( + @project, 'master/' + new_file_name)) + end + + step "I don't see the permalink link" do + expect(page).not_to have_link('permalink') + end + + private + + def set_new_content + execute_script("editor.setValue('#{new_gitignore_content}')") + end + + # Content of the gitignore file on the seed repository. + def old_gitignore_content + '*.rbc' + end + + # Constant value that differs from the content + # of the gitignore of the seed repository. + def new_gitignore_content + old_gitignore_content + 'a' + end + + # Constant value that is a valid filename and + # not a filename present at root of the seed repository. + def new_file_name + 'not_a_file.md' + end +end diff --git a/features/steps/project/source/git_blame.rb b/features/steps/project/source/git_blame.rb new file mode 100644 index 00000000000..e29a816c51b --- /dev/null +++ b/features/steps/project/source/git_blame.rb @@ -0,0 +1,19 @@ +class Spinach::Features::ProjectSourceGitBlame < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I click on ".gitignore" file in repo' do + click_link ".gitignore" + end + + step 'I click Blame button' do + click_link 'Blame' + end + + step 'I should see git file blame' do + page.should have_content "*.rb" + page.should have_content "Dmitriy Zaporozhets" + page.should have_content "Initial commit" + end +end diff --git a/features/steps/project/source/markdown_render.rb b/features/steps/project/source/markdown_render.rb new file mode 100644 index 00000000000..53578ee5970 --- /dev/null +++ b/features/steps/project/source/markdown_render.rb @@ -0,0 +1,288 @@ +# If you need to modify the existing seed repository for your tests, +# it is recommended that you make the changes on the `markdown` branch of the seed project repository, +# which should only be used by tests in this file. See `/spec/factories.rb#project` for more info. +class Spinach::Features::ProjectSourceMarkdownRender < Spinach::FeatureSteps + include SharedAuthentication + include SharedPaths + include SharedMarkdown + + step 'I own project "Delta"' do + @project = Project.find_by(name: "Delta") + @project ||= create(:project, name: "Delta", namespace: @user.namespace) + @project.team << [@user, :master] + end + + step 'I should see files from repository in markdown' do + current_path.should == project_tree_path(@project, "markdown") + page.should have_content "README.md" + page.should have_content "CHANGELOG" + end + + step 'I should see rendered README which contains correct links' do + page.should have_content "Welcome to GitLab GitLab is a free project and repository management application" + page.should have_link "GitLab API doc" + page.should have_link "GitLab API website" + page.should have_link "Rake tasks" + page.should have_link "backup and restore procedure" + page.should have_link "GitLab API doc directory" + page.should have_link "Maintenance" + end + + step 'I click on Gitlab API in README' do + click_link "GitLab API doc" + end + + step 'I should see correct document rendered' do + current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") + page.should have_content "All API requests require authentication" + end + + step 'I click on Rake tasks in README' do + click_link "Rake tasks" + end + + step 'I should see correct directory rendered' do + current_path.should == project_tree_path(@project, "markdown/doc/raketasks") + page.should have_content "backup_restore.md" + page.should have_content "maintenance.md" + end + + step 'I click on GitLab API doc directory in README' do + click_link "GitLab API doc directory" + end + + step 'I should see correct doc/api directory rendered' do + current_path.should == project_tree_path(@project, "markdown/doc/api") + page.should have_content "README.md" + page.should have_content "users.md" + end + + step 'I click on Maintenance in README' do + click_link "Maintenance" + end + + step 'I should see correct maintenance file rendered' do + current_path.should == project_blob_path(@project, "markdown/doc/raketasks/maintenance.md") + page.should have_content "bundle exec rake gitlab:env:info RAILS_ENV=production" + end + + step 'I click on link "empty" in the README' do + within('.readme-holder') do + click_link "empty" + end + end + + step 'I click on link "id" in the README' do + within('.readme-holder') do + click_link "#id" + end + end + + step 'I navigate to the doc/api/README' do + within '.tree-table' do + click_link "doc" + end + + within '.tree-table' do + click_link "api" + end + + within '.tree-table' do + click_link "README.md" + end + end + + step 'I see correct file rendered' do + current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") + page.should have_content "Contents" + page.should have_link "Users" + page.should have_link "Rake tasks" + end + + step 'I click on users in doc/api/README' do + click_link "Users" + end + + step 'I should see the correct document file' do + current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") + page.should have_content "Get a list of users." + end + + step 'I click on raketasks in doc/api/README' do + click_link "Rake tasks" + end + + # Markdown branch + + When 'I visit markdown branch' do + visit project_tree_path(@project, "markdown") + end + + When 'I visit markdown branch "README.md" blob' do + visit project_blob_path(@project, "markdown/README.md") + end + + When 'I visit markdown branch "d" tree' do + visit project_tree_path(@project, "markdown/d") + end + + When 'I visit markdown branch "d/README.md" blob' do + visit project_blob_path(@project, "markdown/d/README.md") + end + + step 'I should see files from repository in markdown branch' do + current_path.should == project_tree_path(@project, "markdown") + page.should have_content "README.md" + page.should have_content "CHANGELOG" + end + + step 'I see correct file rendered in markdown branch' do + current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") + page.should have_content "Contents" + page.should have_link "Users" + page.should have_link "Rake tasks" + end + + step 'I should see correct document rendered for markdown branch' do + current_path.should == project_blob_path(@project, "markdown/doc/api/README.md") + page.should have_content "All API requests require authentication" + end + + step 'I should see correct directory rendered for markdown branch' do + current_path.should == project_tree_path(@project, "markdown/doc/raketasks") + page.should have_content "backup_restore.md" + page.should have_content "maintenance.md" + end + + step 'I should see the users document file in markdown branch' do + current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") + page.should have_content "Get a list of users." + end + + # Expected link contents + + step 'The link with text "empty" should have url "tree/markdown"' do + find('a', text: /^empty$/)['href'] == current_host + project_tree_path(@project, "markdown") + end + + step 'The link with text "empty" should have url "blob/markdown/README.md"' do + find('a', text: /^empty$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + end + + step 'The link with text "empty" should have url "tree/markdown/d"' do + find('a', text: /^empty$/)['href'] == current_host + project_tree_path(@project, "markdown/d") + end + + step 'The link with text "empty" should have '\ + 'url "blob/markdown/d/README.md"' do + find('a', text: /^empty$/)['href'] == current_host + project_blob_path(@project, "markdown/d/README.md") + end + + step 'The link with text "ID" should have url "tree/markdownID"' do + find('a', text: /^#id$/)['href'] == current_host + project_tree_path(@project, "markdown") + '#id' + end + + step 'The link with text "/ID" should have url "tree/markdownID"' do + find('a', text: /^\/#id$/)['href'] == current_host + project_tree_path(@project, "markdown") + '#id' + end + + step 'The link with text "README.mdID" '\ + 'should have url "blob/markdown/README.mdID"' do + find('a', text: /^README.md#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id' + end + + step 'The link with text "d/README.mdID" should have '\ + 'url "blob/markdown/d/README.mdID"' do + find('a', text: /^d\/README.md#id$/)['href'] == current_host + project_blob_path(@project, "d/markdown/README.md") + '#id' + end + + step 'The link with text "ID" should have url "blob/markdown/README.mdID"' do + find('a', text: /^#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id' + end + + step 'The link with text "/ID" should have url "blob/markdown/README.mdID"' do + find('a', text: /^\/#id$/)['href'] == current_host + project_blob_path(@project, "markdown/README.md") + '#id' + end + + # Wiki + + step 'I go to wiki page' do + click_link "Wiki" + current_path.should == project_wiki_path(@project, "home") + end + + step 'I add various links to the wiki page' do + fill_in "wiki[content]", with: "[test](test)\n[GitLab API doc](api)\n[Rake tasks](raketasks)\n" + fill_in "wiki[message]", with: "Adding links to wiki" + click_button "Create page" + end + + step 'Wiki page should have added links' do + current_path.should == project_wiki_path(@project, "home") + page.should have_content "test GitLab API doc Rake tasks" + end + + step 'I add a header to the wiki page' do + fill_in "wiki[content]", with: "# Wiki header\n" + fill_in "wiki[message]", with: "Add header to wiki" + click_button "Create page" + end + + step 'Wiki header should have correct id and link' do + header_should_have_correct_id_and_link(1, 'Wiki header', 'wiki-header') + end + + step 'I click on test link' do + click_link "test" + end + + step 'I see new wiki page named test' do + current_path.should == project_wiki_path(@project, "test") + page.should have_content "Editing" + end + + When 'I go back to wiki page home' do + visit project_wiki_path(@project, "home") + current_path.should == project_wiki_path(@project, "home") + end + + step 'I click on GitLab API doc link' do + click_link "GitLab API" + end + + step 'I see Gitlab API document' do + current_path.should == project_wiki_path(@project, "api") + page.should have_content "Editing" + end + + step 'I click on Rake tasks link' do + click_link "Rake tasks" + end + + step 'I see Rake tasks directory' do + current_path.should == project_wiki_path(@project, "raketasks") + page.should have_content "Editing" + end + + step 'I go directory which contains README file' do + visit project_tree_path(@project, "markdown/doc/api") + current_path.should == project_tree_path(@project, "markdown/doc/api") + end + + step 'I click on a relative link in README' do + click_link "Users" + end + + step 'I should see the correct markdown' do + current_path.should == project_blob_path(@project, "markdown/doc/api/users.md") + page.should have_content "List users" + end + + step 'Header "Application details" should have correct id and link' do + header_should_have_correct_id_and_link(2, 'Application details', 'application-details') + end + + step 'Header "GitLab API" should have correct id and link' do + header_should_have_correct_id_and_link(1, 'GitLab API', 'gitlab-api') + end +end diff --git a/features/steps/project/source/multiselect_blob.rb b/features/steps/project/source/multiselect_blob.rb new file mode 100644 index 00000000000..b749ba49371 --- /dev/null +++ b/features/steps/project/source/multiselect_blob.rb @@ -0,0 +1,58 @@ +class Spinach::Features::ProjectSourceMultiselectBlob < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + class << self + def click_line_steps(*line_numbers) + line_numbers.each do |line_number| + step "I click line #{line_number} in file" do + find("#L#{line_number}").click + end + + step "I shift-click line #{line_number} in file" do + script = "$('#L#{line_number}').trigger($.Event('click', { shiftKey: true }));" + execute_script(script) + end + end + end + + def check_state_steps(*ranges) + ranges.each do |range| + fragment = range.kind_of?(Array) ? "L#{range.first}-#{range.last}" : "L#{range}" + pluralization = range.kind_of?(Array) ? "s" : "" + + step "I should see \"#{fragment}\" as URI fragment" do + URI.parse(current_url).fragment.should == fragment + end + + step "I should see line#{pluralization} #{fragment[1..-1]} highlighted" do + ids = Array(range).map { |n| "LC#{n}" } + extra = false + + highlighted = all("#tree-content-holder .highlight .line.hll") + highlighted.each do |element| + extra ||= ids.delete(element[:id]).nil? + end + + extra.should be_false and ids.should be_empty + end + end + end + end + + click_line_steps *Array(1..5) + check_state_steps *Array(1..5), Array(1..2), Array(1..3), Array(1..4), Array(1..5), Array(3..5) + + step 'I go back in history' do + go_back + end + + step 'I go forward in history' do + go_forward + end + + step 'I click on ".gitignore" file in repo' do + click_link ".gitignore" + end +end diff --git a/features/steps/project/source/search_code.rb b/features/steps/project/source/search_code.rb new file mode 100644 index 00000000000..9c2864cc936 --- /dev/null +++ b/features/steps/project/source/search_code.rb @@ -0,0 +1,19 @@ +class Spinach::Features::ProjectSourceSearchCode < Spinach::FeatureSteps + include SharedAuthentication + include SharedProject + include SharedPaths + + step 'I search for term "coffee"' do + fill_in "search", with: "coffee" + click_button "Go" + end + + step 'I should see files from repository containing "coffee"' do + page.should have_content 'coffee' + page.should have_content 'CONTRIBUTING.md' + end + + step 'I should see empty result' do + page.should have_content "We couldn't find any matching" + end +end -- cgit v1.2.1