Welcome to mirror list, hosted at ThFree Co, Russian Federation.

unsubscribe_links_spec.rb « features « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 28699bc2c24cdedffffbdcbb72525d850ce6cf75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
76
77
78
79
80
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe 'Unsubscribe links', :sidekiq_inline, feature_category: :shared do
  include Warden::Test::Helpers

  let_it_be(:project) { create(:project, :public) }
  let_it_be(:author) { create(:user).tap { |u| project.add_reporter(u) } }
  let_it_be(:recipient) { create(:user) }

  let(:params) { { title: 'A bug!', description: 'Fix it!', assignee_ids: [recipient.id] } }
  let(:issue) { Issues::CreateService.new(container: project, current_user: author, params: params, spam_params: nil).execute[:issue] }

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

  before do
    perform_enqueued_jobs { issue }
  end

  context 'when logged out' do
    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(page).to have_current_path unsubscribe_sent_notification_path(SentNotification.last), ignore_query: true
        expect(page).to have_text(%(Unsubscribe from issue))
        expect(page).to have_text(%(Are you sure you want to unsubscribe from the issue: #{issue.title} (#{issue.to_reference})?))
        expect(issue.subscribed?(recipient, project)).to be_truthy

        click_link 'Unsubscribe'

        expect(issue.subscribed?(recipient, project)).to be_falsey
        expect(page).to have_current_path new_user_session_path, ignore_query: true
      end

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

        expect(page).to have_current_path unsubscribe_sent_notification_path(SentNotification.last), ignore_query: true
        expect(issue.subscribed?(recipient, project)).to be_truthy

        click_link 'Cancel'

        expect(issue.subscribed?(recipient, project)).to be_truthy
        expect(page).to have_current_path new_user_session_path, ignore_query: true
      end
    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, project)).to be_falsey
    end
  end

  context 'when logged in' do
    before do
      sign_in(recipient)
    end

    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, project)).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, project)).to be_falsey
    end
  end
end