BigW Consortium Gitlab

unsubscribe_links_spec.rb 2.57 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
require 'spec_helper'

describe 'Unsubscribe links', feature: true do
  include Warden::Test::Helpers

  let(:recipient) { create(:user) }
  let(:author) { create(:user) }
  let(:project) { create(:empty_project, :public) }
  let(:params) { { title: 'A bug!', description: 'Fix it!', assignee: recipient } }
  let(:issue) { Issues::CreateService.new(project, author, params).execute }

  let(:mail) { ActionMailer::Base.deliveries.last }
  let(:body) { Capybara::Node::Simple.new(mail.default_part_body.to_s) }
14
  let(:header_link) { mail.header['List-Unsubscribe'].to_s[1..-2] } # Strip angle brackets
15 16 17 18 19 20 21
  let(:body_link) { body.find_link('unsubscribe')['href'] }

  before do
    perform_enqueued_jobs { issue }
  end

  context 'when logged out' do
22 23 24 25 26
    context 'when visiting the link from the body' do
      it 'shows the unsubscribe confirmation page and redirects to root path when confirming' do
        visit body_link

        expect(current_path).to eq unsubscribe_sent_notification_path(SentNotification.last)
27 28
        expect(page).to have_text(%(Unsubscribe from issue #{issue.title} (#{issue.to_reference})))
        expect(page).to have_text(%(Are you sure you want to unsubscribe from issue #{issue.title} (#{issue.to_reference})?))
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
        expect(issue.subscribed?(recipient)).to be_truthy

        click_link 'Unsubscribe'

        expect(issue.subscribed?(recipient)).to be_falsey
        expect(current_path).to eq new_user_session_path
      end

      it 'shows the unsubscribe confirmation page and redirects to root path when canceling' do
        visit body_link

        expect(current_path).to eq unsubscribe_sent_notification_path(SentNotification.last)
        expect(issue.subscribed?(recipient)).to be_truthy

        click_link 'Cancel'
44

45 46 47
        expect(issue.subscribed?(recipient)).to be_truthy
        expect(current_path).to eq new_user_session_path
      end
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    end

    it 'unsubscribes from the issue when visiting the link from the header' do
      visit header_link

      expect(page).to have_text('unsubscribed')
      expect(issue.subscribed?(recipient)).to be_falsey
    end
  end

  context 'when logged in' do
    before { login_as(recipient) }

    it 'unsubscribes from the issue when visiting the link from the email body' do
      visit body_link

      expect(page).to have_text('unsubscribed')
      expect(issue.subscribed?(recipient)).to be_falsey
    end

    it 'unsubscribes from the issue when visiting the link from the header' do
      visit header_link

      expect(page).to have_text('unsubscribed')
      expect(issue.subscribed?(recipient)).to be_falsey
    end
  end
end