require 'spec_helper' describe 'Dashboard Todos', feature: true do let(:user) { create(:user) } let(:author) { create(:user) } let(:project) { create(:project) } let(:issue) { create(:issue) } describe 'GET /dashboard/todos' do context 'User does not have todos' do before do login_as(user) visit dashboard_todos_path end it 'shows "All done" message' do expect(page).to have_content "You're all done!" end end context 'User has a todo', js: true do before do create(:todo, :mentioned, user: user, project: project, target: issue, author: author) login_as(user) visit dashboard_todos_path end it 'todo is present' do expect(page).to have_selector('.todos-list .todo', count: 1) end describe 'deleting the todo' do before do first('.done-todo').click end it 'is removed from the list' do expect(page).not_to have_selector('.todos-list .todo') end it 'shows "All done" message' do expect(page).to have_content("You're all done!") end end end context 'User has Todos with labels spanning multiple projects' do before do label1 = create(:label, project: project) note1 = create(:note_on_issue, note: "Hello #{label1.to_reference(format: :name)}", noteable_id: issue.id, noteable_type: 'Issue', project: issue.project) create(:todo, :mentioned, project: project, target: issue, user: user, note_id: note1.id) project2 = create(:project) label2 = create(:label, project: project2) issue2 = create(:issue, project: project2) note2 = create(:note_on_issue, note: "Test #{label2.to_reference(format: :name)}", noteable_id: issue2.id, noteable_type: 'Issue', project: project2) create(:todo, :mentioned, project: project2, target: issue2, user: user, note_id: note2.id) login_as(user) visit dashboard_todos_path end it 'shows page with two Todos' do expect(page).to have_selector('.todos-list .todo', count: 2) end end context 'User has multiple pages of Todos' do before do allow(Todo).to receive(:default_per_page).and_return(1) # Create just enough records to cause us to paginate create_list(:todo, 2, :mentioned, user: user, project: project, target: issue, author: author) login_as(user) end it 'is paginated' do visit dashboard_todos_path expect(page).to have_selector('.gl-pagination') end it 'is has the right number of pages' do visit dashboard_todos_path expect(page).to have_selector('.gl-pagination .page', count: 2) end describe 'completing last todo from last page', js: true do it 'redirects to the previous page' do visit dashboard_todos_path(page: 2) expect(page).to have_css("#todo_#{Todo.last.id}") click_link('Done') expect(current_path).to eq dashboard_todos_path expect(page).to have_css("#todo_#{Todo.first.id}") end end end end end