diff options
Diffstat (limited to 'spec/features/issues/user_views_issues_spec.rb')
-rw-r--r-- | spec/features/issues/user_views_issues_spec.rb | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/spec/features/issues/user_views_issues_spec.rb b/spec/features/issues/user_views_issues_spec.rb new file mode 100644 index 00000000000..58afb4efb86 --- /dev/null +++ b/spec/features/issues/user_views_issues_spec.rb @@ -0,0 +1,116 @@ +require "spec_helper" + +describe "User views issues" do + let!(:closed_issue) { create(:closed_issue, project: project) } + let!(:open_issue1) { create(:issue, project: project) } + let!(:open_issue2) { create(:issue, project: project) } + set(:user) { create(:user) } + + shared_examples "opens issue from list" do + it "opens issue" do + click_link(issue.title) + + expect(page).to have_content(issue.title) + end + end + + shared_examples "open issues" do + context "open issues" do + let(:label) { create(:label, project: project, title: "bug") } + + before do + open_issue1.labels << label + + visit(project_issues_path(project, state: :opened)) + end + + it "shows open issues" do + expect(page).to have_content(project.name) + .and have_content(open_issue1.title) + .and have_content(open_issue2.title) + .and have_no_content(closed_issue.title) + .and have_no_selector(".js-new-board-list") + end + + it "opens issues by label" do + page.within(".issues-list") do + click_link(label.title) + end + + expect(page).to have_content(open_issue1.title) + .and have_no_content(open_issue2.title) + .and have_no_content(closed_issue.title) + end + + include_examples "opens issue from list" do + let(:issue) { open_issue1 } + end + end + end + + shared_examples "closed issues" do + context "closed issues" do + before do + visit(project_issues_path(project, state: :closed)) + end + + it "shows closed issues" do + expect(page).to have_content(project.name) + .and have_content(closed_issue.title) + .and have_no_content(open_issue1.title) + .and have_no_content(open_issue2.title) + .and have_no_selector(".js-new-board-list") + end + + include_examples "opens issue from list" do + let(:issue) { closed_issue } + end + end + end + + shared_examples "all issues" do + context "all issues" do + before do + visit(project_issues_path(project, state: :all)) + end + + it "shows all issues" do + expect(page).to have_content(project.name) + .and have_content(closed_issue.title) + .and have_content(open_issue1.title) + .and have_content(open_issue2.title) + .and have_no_selector(".js-new-board-list") + end + + include_examples "opens issue from list" do + let(:issue) { closed_issue } + end + end + end + + %w[internal public].each do |visibility| + shared_examples "#{visibility} project" do + context "when project is #{visibility}" do + let(:project) { create(:project_empty_repo, :"#{visibility}") } + + include_examples "open issues" + include_examples "closed issues" + include_examples "all issues" + end + end + end + + context "when signed in as developer" do + before do + project.add_developer(user) + sign_in(user) + end + + include_examples "public project" + include_examples "internal project" + end + + context "when not signed in" do + include_examples "public project" + end +end |