@@ -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
69106end
0 commit comments