Skip to content

Commit 036ec6a

Browse files
committed
Merge branch 'develop' into art/1738/activerecord-caching
2 parents 09bdfce + e43a81c commit 036ec6a

4 files changed

Lines changed: 78 additions & 37 deletions

File tree

.github/workflows/ci-cd.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@ on:
1010

1111
env:
1212
RAILS_ENV: test
13+
RUBY_VERSION: 3.2
1314

1415
jobs:
1516
rubocop:
1617
name: Rubocop checking
1718
runs-on: ubuntu-latest
1819

19-
strategy:
20-
matrix:
21-
ruby_version: [3.1, 3.2]
22-
2320
steps:
2421
- name: Checkout repo
2522
uses: actions/checkout@v3
@@ -30,7 +27,7 @@ jobs:
3027
- name: Setup Ruby
3128
uses: ruby/setup-ruby@v1
3229
with:
33-
ruby-version: ${{ matrix.ruby_version }}
30+
ruby-version: ${{ env.RUBY_VERSION }}
3431
bundler-cache: true
3532
- run: bundle exec rubocop
3633

@@ -106,7 +103,7 @@ jobs:
106103
path: tmp/screenshots
107104
if-no-files-found: ignore
108105
- uses: codecov/codecov-action@v5
109-
if: ${{ matrix.ruby_version == 3.2 && matrix.test_type == 'test' && github.actor != 'dependabot[bot]' }}
106+
if: ${{ matrix.ruby_version == env.RUBY_VERSION && matrix.test_type == 'test' && github.actor != 'dependabot[bot]' }}
110107
with:
111108
directory: coverage
112109
fail_ci_if_error: true

app/controllers/close_reasons_controller.rb

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,21 @@ def edit; end
1616

1717
def update
1818
before = @close_reason.attributes.map { |k, v| "#{k}: #{v}" }.join(' ')
19-
@close_reason.update(close_reason_params)
20-
after = @close_reason.attributes.map { |k, v| "#{k}: #{v}" }.join(' ')
19+
if @close_reason.update(close_reason_params)
20+
after = @close_reason.attributes.map { |k, v| "#{k}: #{v}" }.join(' ')
2121

22-
AuditLog.moderator_audit(event_type: 'close_reason_update',
23-
related: @close_reason,
24-
user: current_user,
25-
comment: "from <<CloseReason #{before}>>\nto <<CloseReason #{after}>>")
22+
AuditLog.moderator_audit(event_type: 'close_reason_update',
23+
related: @close_reason,
24+
user: current_user,
25+
comment: "from <<CloseReason #{before}>>\nto <<CloseReason #{after}>>")
2626

27-
if @close_reason.community.nil?
28-
redirect_to close_reasons_path(global: 1)
27+
if @close_reason.community.nil?
28+
redirect_to close_reasons_path(global: 1)
29+
else
30+
redirect_to close_reasons_path
31+
end
2932
else
30-
redirect_to close_reasons_path
33+
render :edit, status: :bad_request
3134
end
3235
end
3336

@@ -36,14 +39,12 @@ def new
3639
end
3740

3841
def create
39-
@close_reason = CloseReason.new(name: params[:close_reason][:name],
40-
description: params[:close_reason][:description],
41-
requires_other_post: params[:close_reason][:requires_other_post],
42-
active: params[:close_reason][:active],
43-
community: params[:global] == '1' ? nil : @community)
42+
community_params = { community: params[:global] == '1' ? nil : @community }
43+
@close_reason = CloseReason.new(close_reason_params.merge(community_params))
4444

4545
if @close_reason.save
4646
attr = @close_reason.attributes_print
47+
4748
AuditLog.moderator_audit(event_type: 'close_reason_create',
4849
related: @close_reason,
4950
user: current_user,
@@ -55,7 +56,7 @@ def create
5556
redirect_to close_reasons_path
5657
end
5758
else
58-
render :new
59+
render :new, status: :bad_request
5960
end
6061
end
6162

app/models/close_reason.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,11 @@ class CloseReason < ApplicationRecord
33

44
scope :active, -> { where(active: true) }
55

6-
validates :name, uniqueness: { scope: [:community_id], case_sensitive: false }
6+
validates :name, length: { maximum: 255 },
7+
presence: true,
8+
uniqueness: { scope: [:community_id], case_sensitive: false }
9+
10+
def global?
11+
community.nil?
12+
end
713
end

test/controllers/close_reasons_controller_test.rb

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,22 @@ class CloseReasonsControllerTest < ActionController::TestCase
3333
assert_not_nil assigns(:close_reason)
3434
end
3535

36-
test 'should create close reason' do
36+
test 'should correctly create close reasons' do
3737
sign_in users(:global_admin)
38-
post :create, params: { close_reason: { name: 'test', description: 'test', requires_other_post: true,
39-
active: true } }
40-
assert_response(:found)
41-
assert_redirected_to close_reasons_path
42-
assert_not_nil assigns(:close_reason)
43-
assert_not_nil assigns(:close_reason).id
38+
39+
[false, true].each do |global|
40+
try_create_close_reason(global: global, name: global ? 'all communities' : 'per-community')
41+
42+
assert_response(:found)
43+
assert_redirected_to close_reasons_path(global: global ? '1' : nil)
44+
assert_not_nil assigns(:close_reason)&.id
45+
end
46+
end
47+
48+
test 'should not create invalid close reasons' do
49+
sign_in users(:global_admin)
50+
try_create_close_reason(name: '')
51+
assert_response(:bad_request)
4452
end
4553

4654
test 'should get edit' do
@@ -56,14 +64,43 @@ class CloseReasonsControllerTest < ActionController::TestCase
5664
assert_response(:not_found)
5765
end
5866

59-
test 'should update close reason' do
67+
test 'should correctly update close reasons' do
6068
sign_in users(:global_admin)
61-
patch :update, params: { id: close_reasons(:duplicate).id, close_reason: { name: 'test', description: 'test',
62-
requires_other_post: true,
63-
active: false } }
64-
assert_response(:found)
65-
assert_redirected_to close_reasons_path
66-
assert_not_nil assigns(:close_reason)
67-
assert_equal false, assigns(:close_reason).active
69+
70+
close_reasons.each do |reason|
71+
try_update_close_reason(reason, active: false, name: "#{reason.name} updated")
72+
73+
assert_response(:found)
74+
assert_redirected_to close_reasons_path(global: reason.global? ? '1' : nil)
75+
76+
@close_reason = assigns(:close_reason)
77+
78+
assert_not_nil @close_reason
79+
assert_equal false, @close_reason.active
80+
assert_equal "#{reason.name} updated", @close_reason.name
81+
end
82+
end
83+
84+
test 'should not update close reasons to invalid states' do
85+
sign_in users(:global_admin)
86+
try_update_close_reason(close_reasons(:duplicate), name: '')
87+
assert_response(:bad_request)
88+
end
89+
90+
private
91+
92+
def try_create_close_reason(**opts)
93+
global = opts.delete(:global) || false
94+
95+
post :create, params: { close_reason: { name: 'test',
96+
description: 'test',
97+
requires_other_post: true,
98+
active: true }.merge(opts),
99+
global: global ? '1' : '0' }
100+
end
101+
102+
def try_update_close_reason(reason, **opts)
103+
patch :update, params: { id: reason.id,
104+
close_reason: opts }
68105
end
69106
end

0 commit comments

Comments
 (0)