File: preferences_controller_spec.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (132 lines) | stat: -rw-r--r-- 3,871 bytes parent folder | download
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Profiles::PreferencesController do
  let_it_be(:home_organization) { create(:organization) }
  let(:user) { create(:user) }

  before do
    sign_in(user)
    create(:organization_user, organization: home_organization, user: user)

    allow(subject).to receive(:current_user).and_return(user)
  end

  describe 'GET show' do
    it 'renders' do
      get :show
      expect(response).to render_template :show
    end

    it 'assigns user' do
      get :show
      expect(assigns[:user]).to eq user
    end
  end

  describe 'PATCH update' do
    def go(params: {}, format: :json)
      params.reverse_merge!(
        color_mode_id: '1',
        color_scheme_id: '1',
        dashboard: 'stars',
        home_organization_id: home_organization.id,
        theme_id: '1'
      )

      patch :update, params: { user: params }, format: format
    end

    context 'on successful update' do
      it 'responds with success' do
        go

        expect(response).to have_gitlab_http_status(:ok)
        expect(response.parsed_body['message']).to eq _('Preferences saved.')
        expect(response.parsed_body['type']).to eq('notice')
      end

      it "changes the user's preferences" do
        prefs = {
          color_mode_id: '2',
          color_scheme_id: '1',
          diffs_deletion_color: '#123456',
          diffs_addition_color: '#abcdef',
          dashboard: 'stars',
          home_organization_id: home_organization.id.to_s,
          theme_id: '2',
          first_day_of_week: '1',
          preferred_language: 'jp',
          tab_width: '5',
          project_shortcut_buttons: 'true',
          keyboard_shortcuts_enabled: 'true',
          render_whitespace_in_code: 'true',
          extensions_marketplace_enabled: '1'
        }.with_indifferent_access

        expect(user).to receive(:assign_attributes).with(ActionController::Parameters.new(prefs).permit!)
        expect(user).to receive(:save)

        go params: prefs
      end
    end

    context 'on failed update' do
      it 'responds with error' do
        expect(user).to receive(:save).and_return(false)

        go

        expect(response).to have_gitlab_http_status(:bad_request)
        expect(response.parsed_body['message']).to eq _('Failed to save preferences.')
        expect(response.parsed_body['type']).to eq('alert')
      end
    end

    context 'on invalid dashboard setting' do
      it 'responds with error' do
        prefs = { dashboard: 'invalid' }

        go params: prefs

        expect(response).to have_gitlab_http_status(:bad_request)
        expect(response.parsed_body['message']).to match(/\AFailed to save preferences \(.+\)\.\z/)
        expect(response.parsed_body['type']).to eq('alert')
      end
    end

    context 'on invalid diffs colors setting' do
      it 'responds with error for diffs_deletion_color' do
        prefs = { diffs_deletion_color: '#1234567' }

        go params: prefs

        expect(response).to have_gitlab_http_status(:bad_request)
        expect(response.parsed_body['message']).to eq _('Failed to save preferences.')
        expect(response.parsed_body['type']).to eq('alert')
      end

      it 'responds with error for diffs_addition_color' do
        prefs = { diffs_addition_color: '#1234567' }

        go params: prefs

        expect(response).to have_gitlab_http_status(:bad_request)
        expect(response.parsed_body['message']).to eq _('Failed to save preferences.')
        expect(response.parsed_body['type']).to eq('alert')
      end
    end

    context 'on enabled_following setting' do
      it 'does not update enabled_following preference of user' do
        prefs = { enabled_following: false }

        go params: prefs
        user.reload

        expect(user.enabled_following).to eq(false)
      end
    end
  end
end