notification_settings_controller_spec.rb 4.68 KB
Newer Older
1 2 3 4
require 'spec_helper'

describe NotificationSettingsController do
  let(:project) { create(:empty_project) }
5
  let(:group) { create(:group, :internal) }
6 7 8 9 10 11 12 13 14 15
  let(:user) { create(:user) }

  before do
    project.team << [user, :developer]
  end

  describe '#create' do
    context 'when not authorized' do
      it 'redirects to sign in page' do
        post :create,
16
             project_id: project.id,
17 18 19 20 21 22 23
             notification_setting: { level: :participating }

        expect(response).to redirect_to(new_user_session_path)
      end
    end

    context 'when authorized' do
24 25 26 27 28 29 30 31 32 33
      let(:custom_events) do
        events = {}

        NotificationSetting::EMAIL_EVENTS.each do |event|
          events[event.to_s] = true
        end

        events
      end

34 35 36 37
      before do
        sign_in(user)
      end

38 39
      context 'for projects' do
        let(:notification_setting) { user.notification_settings_for(project) }
40

41 42
        it 'creates notification setting' do
          post :create,
43
               project_id: project.id,
44
               notification_setting: { level: :participating }
45

46 47 48 49 50 51 52 53 54 55
          expect(response.status).to eq 200
          expect(notification_setting.level).to eq("participating")
          expect(notification_setting.user_id).to eq(user.id)
          expect(notification_setting.source_id).to eq(project.id)
          expect(notification_setting.source_type).to eq("Project")
        end

        context 'with custom settings' do
          it 'creates notification setting' do
            post :create,
56
                 project_id: project.id,
57
                 notification_setting: { level: :custom }.merge(custom_events)
58

59 60 61
            expect(response.status).to eq 200
            expect(notification_setting.level).to eq("custom")
            expect(notification_setting.events).to eq(custom_events)
62 63
          end
        end
64 65 66 67
      end

      context 'for groups' do
        let(:notification_setting) { user.notification_settings_for(group) }
68

69
        it 'creates notification setting' do
70
          post :create,
71
               namespace_id: group.id,
72
               notification_setting: { level: :watch }
73 74

          expect(response.status).to eq 200
75 76 77 78 79 80 81 82 83
          expect(notification_setting.level).to eq("watch")
          expect(notification_setting.user_id).to eq(user.id)
          expect(notification_setting.source_id).to eq(group.id)
          expect(notification_setting.source_type).to eq("Namespace")
        end

        context 'with custom settings' do
          it 'creates notification setting' do
            post :create,
84
                 namespace_id: group.id,
85 86 87 88 89 90
                 notification_setting: { level: :custom }.merge(custom_events)

            expect(response.status).to eq 200
            expect(notification_setting.level).to eq("custom")
            expect(notification_setting.events).to eq(custom_events)
          end
91 92 93 94 95
        end
      end
    end

    context 'not authorized' do
96
      let(:private_project) { create(:empty_project, :private) }
97 98 99 100

      before do
        sign_in(user)
      end
101 102 103

      it 'returns 404' do
        post :create,
104
             project_id: private_project.id,
105 106
             notification_setting: { level: :participating }

107
        expect(response).to have_http_status(404)
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
      end
    end
  end

  describe '#update' do
    let(:notification_setting) { user.global_notification_setting }

    context 'when not authorized' do
      it 'redirects to sign in page' do
        put :update,
            id: notification_setting,
            notification_setting: { level: :participating }

        expect(response).to redirect_to(new_user_session_path)
      end
    end

    context 'when authorized' do
126 127 128
      before do
        sign_in(user)
      end
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159

      it 'returns success' do
        put :update,
            id: notification_setting,
            notification_setting: { level: :participating }

        expect(response.status).to eq 200
      end

      context 'and setting custom notification setting' do
        let(:custom_events) do
          events = {}

          NotificationSetting::EMAIL_EVENTS.each do |event|
            events[event] = "true"
          end
        end

        it 'returns success' do
          put :update,
              id: notification_setting,
              notification_setting: { level: :participating, events: custom_events }

          expect(response.status).to eq 200
        end
      end
    end

    context 'not authorized' do
      let(:other_user) { create(:user) }

160 161 162
      before do
        sign_in(other_user)
      end
163 164 165 166 167 168

      it 'returns 404' do
        put :update,
            id: notification_setting,
            notification_setting: { level: :participating }

169
        expect(response).to have_http_status(404)
170 171 172 173
      end
    end
  end
end