dry_crud 6.0.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/MIT-LICENSE +2 -2
- data/README.rdoc +7 -6
- data/VERSION +1 -1
- data/app/assets/stylesheets/sample.scss +45 -24
- data/app/controllers/crud_controller.rb +24 -26
- data/app/controllers/dry_crud/generic_model.rb +6 -12
- data/app/controllers/dry_crud/nestable.rb +1 -4
- data/app/controllers/dry_crud/rememberable.rb +1 -4
- data/app/controllers/dry_crud/render_callbacks.rb +4 -12
- data/app/controllers/dry_crud/searchable.rb +3 -10
- data/app/controllers/dry_crud/sortable.rb +3 -10
- data/app/controllers/list_controller.rb +1 -3
- data/app/helpers/actions_helper.rb +13 -15
- data/app/helpers/dry_crud/form/builder.rb +56 -62
- data/app/helpers/dry_crud/form/control.rb +12 -19
- data/app/helpers/dry_crud/table/actions.rb +15 -20
- data/app/helpers/dry_crud/table/builder.rb +12 -15
- data/app/helpers/dry_crud/table/col.rb +5 -8
- data/app/helpers/dry_crud/table/sorting.rb +3 -6
- data/app/helpers/form_helper.rb +11 -15
- data/app/helpers/format_helper.rb +18 -20
- data/app/helpers/i18n_helper.rb +13 -15
- data/app/helpers/table_helper.rb +16 -19
- data/app/helpers/utility_helper.rb +12 -14
- data/app/views/crud/new.html.erb +1 -1
- data/app/views/crud/new.html.haml +1 -1
- data/app/views/layouts/application.html.erb +8 -6
- data/app/views/layouts/application.html.haml +6 -5
- data/app/views/list/_search.html.erb +1 -3
- data/app/views/list/_search.html.haml +1 -2
- data/app/views/shared/_error_messages.html.erb +2 -2
- data/lib/dry_crud/engine.rb +1 -3
- data/lib/dry_crud.rb +1 -1
- data/lib/generators/dry_crud/dry_crud_generator.rb +18 -18
- data/lib/generators/dry_crud/dry_crud_generator_base.rb +8 -8
- data/lib/generators/dry_crud/file_generator.rb +6 -6
- data/lib/generators/dry_crud/templates/config/initializers/field_error_proc.rb +1 -1
- data/lib/generators/dry_crud/templates/spec/controllers/crud_test_models_controller_spec.rb +122 -122
- data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/form/builder_spec.rb +55 -60
- data/lib/generators/dry_crud/templates/spec/helpers/dry_crud/table/builder_spec.rb +24 -26
- data/lib/generators/dry_crud/templates/spec/helpers/form_helper_spec.rb +16 -18
- data/lib/generators/dry_crud/templates/spec/helpers/format_helper_spec.rb +90 -94
- data/lib/generators/dry_crud/templates/spec/helpers/i18n_helper_spec.rb +33 -34
- data/lib/generators/dry_crud/templates/spec/helpers/table_helper_spec.rb +59 -61
- data/lib/generators/dry_crud/templates/spec/helpers/utility_helper_spec.rb +20 -23
- data/lib/generators/dry_crud/templates/spec/support/crud_controller_examples.rb +66 -68
- data/lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb +11 -13
- data/lib/generators/dry_crud/templates/test/controllers/crud_test_models_controller_test.rb +63 -65
- data/lib/generators/dry_crud/templates/test/helpers/custom_assertions_test.rb +25 -27
- data/lib/generators/dry_crud/templates/test/helpers/dry_crud/form/builder_test.rb +74 -74
- data/lib/generators/dry_crud/templates/test/helpers/dry_crud/table/builder_test.rb +21 -21
- data/lib/generators/dry_crud/templates/test/helpers/form_helper_test.rb +21 -23
- data/lib/generators/dry_crud/templates/test/helpers/format_helper_test.rb +68 -70
- data/lib/generators/dry_crud/templates/test/helpers/i18n_helper_test.rb +26 -28
- data/lib/generators/dry_crud/templates/test/helpers/table_helper_test.rb +28 -30
- data/lib/generators/dry_crud/templates/test/helpers/utility_helper_test.rb +17 -19
- data/lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb +13 -15
- data/lib/generators/dry_crud/templates/test/support/crud_test_helper.rb +15 -19
- data/lib/generators/dry_crud/templates/test/support/crud_test_model.rb +9 -14
- data/lib/generators/dry_crud/templates/test/support/crud_test_models_controller.rb +16 -20
- data/lib/generators/dry_crud/templates/test/support/custom_assertions.rb +8 -10
- metadata +9 -10
@@ -1,13 +1,12 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require "test_helper"
|
2
|
+
require "support/crud_test_helper"
|
3
|
+
require "support/crud_test_model"
|
4
|
+
require "support/crud_controller_test_helper"
|
5
5
|
|
6
6
|
# Tests all actions of the CrudController based on a dummy model
|
7
7
|
# (CrudTestModel). This is useful to test the general behavior
|
8
8
|
# of CrudController.
|
9
9
|
class CrudTestModelsControllerTest < ActionController::TestCase
|
10
|
-
|
11
10
|
include CrudControllerTestHelper
|
12
11
|
include CrudTestHelper
|
13
12
|
|
@@ -20,13 +19,13 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
20
19
|
def test_setup
|
21
20
|
assert_equal 6, CrudTestModel.count
|
22
21
|
assert_equal CrudTestModelsController, @controller.class
|
23
|
-
assert_recognizes({ controller:
|
24
|
-
action:
|
25
|
-
|
26
|
-
assert_recognizes({ controller:
|
27
|
-
action:
|
28
|
-
id:
|
29
|
-
|
22
|
+
assert_recognizes({ controller: "crud_test_models",
|
23
|
+
action: "index" },
|
24
|
+
"/crud_test_models")
|
25
|
+
assert_recognizes({ controller: "crud_test_models",
|
26
|
+
action: "show",
|
27
|
+
id: "1" },
|
28
|
+
"/crud_test_models/1")
|
30
29
|
end
|
31
30
|
|
32
31
|
def test_index
|
@@ -39,14 +38,14 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
39
38
|
def test_index_js
|
40
39
|
get :index, params: test_params, xhr: true
|
41
40
|
assert_response :success
|
42
|
-
assert_equal
|
41
|
+
assert_equal "index js", @response.body
|
43
42
|
assert entries.present?
|
44
43
|
end
|
45
44
|
|
46
45
|
def test_index_search
|
47
46
|
super
|
48
47
|
assert_equal 1, entries.size
|
49
|
-
assert_equal({
|
48
|
+
assert_equal({ "q" => "AAAA" }, session[:list_params]["/crud_test_models"])
|
50
49
|
end
|
51
50
|
|
52
51
|
def test_index_with_custom_options
|
@@ -58,65 +57,65 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
58
57
|
end
|
59
58
|
|
60
59
|
def test_index_search_with_custom_options
|
61
|
-
get :index, params: { q:
|
60
|
+
get :index, params: { q: "DDD", filter: true }
|
62
61
|
assert_response :success
|
63
62
|
assert entries.present?
|
64
63
|
assert_equal 1, entries.size
|
65
|
-
assert_equal [CrudTestModel.find_by(name:
|
66
|
-
assert_equal({
|
64
|
+
assert_equal [ CrudTestModel.find_by(name: "BBBBB") ], entries
|
65
|
+
assert_equal({ "q" => "DDD" }, session[:list_params]["/crud_test_models"])
|
67
66
|
end
|
68
67
|
|
69
68
|
def test_sort_given_column
|
70
|
-
get :index, params: { sort:
|
69
|
+
get :index, params: { sort: "children", sort_dir: "asc" }
|
71
70
|
assert_response :success
|
72
71
|
assert entries.present?
|
73
72
|
assert_equal 6, entries.size
|
74
73
|
assert_equal CrudTestModel.all.sort_by(&:children), entries
|
75
|
-
assert_equal({
|
76
|
-
session[:list_params][
|
74
|
+
assert_equal({ "sort" => "children", "sort_dir" => "asc" },
|
75
|
+
session[:list_params]["/crud_test_models"])
|
77
76
|
end
|
78
77
|
|
79
78
|
def test_sort_virtual_column
|
80
|
-
get :index, params: { sort:
|
79
|
+
get :index, params: { sort: "chatty", sort_dir: "desc" }
|
81
80
|
assert_response :success
|
82
81
|
assert entries.present?
|
83
82
|
assert_equal 6, entries.size
|
84
|
-
assert_equal({
|
85
|
-
session[:list_params][
|
83
|
+
assert_equal({ "sort" => "chatty", "sort_dir" => "desc" },
|
84
|
+
session[:list_params]["/crud_test_models"])
|
86
85
|
|
87
86
|
# sort order is ambiguous, use index
|
88
87
|
names = entries.map(&:name)
|
89
|
-
assert names.index(
|
90
|
-
assert names.index(
|
91
|
-
assert names.index(
|
92
|
-
assert names.index(
|
93
|
-
assert names.index(
|
94
|
-
assert names.index(
|
88
|
+
assert names.index("BBBBB") < names.index("AAAAA")
|
89
|
+
assert names.index("BBBBB") < names.index("DDDDD")
|
90
|
+
assert names.index("EEEEE") < names.index("AAAAA")
|
91
|
+
assert names.index("EEEEE") < names.index("DDDDD")
|
92
|
+
assert names.index("AAAAA") < names.index("CCCCC")
|
93
|
+
assert names.index("DDDDD") < names.index("CCCCC")
|
95
94
|
end
|
96
95
|
|
97
96
|
def test_sort_with_search
|
98
|
-
get :index, params: { q:
|
97
|
+
get :index, params: { q: "DDD", sort: "chatty", sort_dir: "asc" }
|
99
98
|
assert_response :success
|
100
99
|
assert entries.present?
|
101
100
|
assert_equal 3, entries.size
|
102
101
|
assert_equal %w[CCCCC DDDDD BBBBB], entries.map(&:name)
|
103
|
-
assert_equal({
|
104
|
-
session[:list_params][
|
102
|
+
assert_equal({ "sort" => "chatty", "sort_dir" => "asc", "q" => "DDD" },
|
103
|
+
session[:list_params]["/crud_test_models"])
|
105
104
|
end
|
106
105
|
|
107
106
|
def test_index_returning
|
108
107
|
session[:list_params] = {}
|
109
|
-
session[:list_params][
|
110
|
-
|
111
|
-
|
108
|
+
session[:list_params]["/crud_test_models"] = { "q" => "DDD",
|
109
|
+
"sort" => "chatty",
|
110
|
+
"sort_dir" => "desc" }
|
112
111
|
get :index, params: { returning: true }
|
113
112
|
assert_response :success
|
114
113
|
assert entries.present?
|
115
114
|
assert_equal 3, entries.size
|
116
115
|
assert_equal %w[BBBBB DDDDD CCCCC], entries.map(&:name)
|
117
|
-
assert_equal
|
118
|
-
assert_equal
|
119
|
-
assert_equal
|
116
|
+
assert_equal "DDD", @controller.params[:q]
|
117
|
+
assert_equal "chatty", @controller.params[:sort]
|
118
|
+
assert_equal "desc", @controller.params[:sort_dir]
|
120
119
|
end
|
121
120
|
|
122
121
|
def test_new
|
@@ -128,7 +127,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
128
127
|
def test_show_with_custom
|
129
128
|
get :show, params: test_params(id: crud_test_models(:BBBBB).id)
|
130
129
|
assert_response :success
|
131
|
-
assert_equal
|
130
|
+
assert_equal "custom html", @response.body
|
132
131
|
end
|
133
132
|
|
134
133
|
def test_create
|
@@ -147,8 +146,8 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
147
146
|
|
148
147
|
def test_update
|
149
148
|
super
|
150
|
-
assert_equal I18n.t(
|
151
|
-
model:
|
149
|
+
assert_equal I18n.t("crud.update.flash.success",
|
150
|
+
model: "Crud Test Model <i>foo</i>"),
|
152
151
|
flash[:notice]
|
153
152
|
assert flash[:alert].blank?
|
154
153
|
assert_equal %i[before_update before_save after_save after_update],
|
@@ -159,42 +158,42 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
159
158
|
super
|
160
159
|
assert_equal %i[before_destroy after_destroy],
|
161
160
|
@controller.called_callbacks
|
162
|
-
assert_equal I18n.t(
|
163
|
-
model:
|
161
|
+
assert_equal I18n.t("crud.destroy.flash.success",
|
162
|
+
model: "Crud Test Model <i>AAAAA</i>"),
|
164
163
|
flash[:notice]
|
165
164
|
end
|
166
165
|
|
167
166
|
def test_create_with_before_callback
|
168
|
-
assert_no_difference(
|
167
|
+
assert_no_difference("CrudTestModel.count") do
|
169
168
|
post :create,
|
170
|
-
params: { crud_test_model: { name:
|
169
|
+
params: { crud_test_model: { name: "illegal", children: 2 } }
|
171
170
|
end
|
172
171
|
assert_response :success
|
173
172
|
assert entry.new_record?
|
174
173
|
assert flash[:alert].present?
|
175
|
-
assert_equal
|
174
|
+
assert_equal "illegal", entry.name
|
176
175
|
assert_equal %i[before_render_new before_render_form],
|
177
176
|
@controller.called_callbacks
|
178
177
|
end
|
179
178
|
|
180
179
|
def test_create_with_before_callback_redirect
|
181
180
|
@controller.should_redirect = true
|
182
|
-
assert_no_difference(
|
181
|
+
assert_no_difference("CrudTestModel.count") do
|
183
182
|
post :create,
|
184
|
-
params: { crud_test_model: { name:
|
183
|
+
params: { crud_test_model: { name: "illegal", children: 2 } }
|
185
184
|
end
|
186
|
-
assert_redirected_to action:
|
185
|
+
assert_redirected_to action: "index"
|
187
186
|
assert_nil @controller.called_callbacks
|
188
187
|
end
|
189
188
|
|
190
189
|
def test_new_with_before_render_callback_redirect_does_not_set_companions
|
191
190
|
@controller.should_redirect = true
|
192
191
|
get :new
|
193
|
-
assert_redirected_to action:
|
192
|
+
assert_redirected_to action: "index"
|
194
193
|
end
|
195
194
|
|
196
195
|
def test_create_with_failure
|
197
|
-
assert_no_difference(
|
196
|
+
assert_no_difference("CrudTestModel.count") do
|
198
197
|
post :create, params: { crud_test_model: { children: 2 } }
|
199
198
|
end
|
200
199
|
assert_response :success
|
@@ -208,8 +207,8 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
208
207
|
end
|
209
208
|
|
210
209
|
def test_create_with_failure_json
|
211
|
-
assert_no_difference(
|
212
|
-
post :create, params: { crud_test_model: { children: 2 }, format:
|
210
|
+
assert_no_difference("CrudTestModel.count") do
|
211
|
+
post :create, params: { crud_test_model: { children: 2 }, format: "json" }
|
213
212
|
end
|
214
213
|
assert_response :unprocessable_entity
|
215
214
|
assert entry.new_record?
|
@@ -234,7 +233,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
234
233
|
id: test_entry.id,
|
235
234
|
crud_test_model: {
|
236
235
|
rating: 20,
|
237
|
-
other_ids: [OtherCrudTestModel.first.id]
|
236
|
+
other_ids: [ OtherCrudTestModel.first.id ]
|
238
237
|
}
|
239
238
|
}
|
240
239
|
assert_response :success
|
@@ -252,7 +251,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
252
251
|
put :update,
|
253
252
|
params: { id: test_entry.id,
|
254
253
|
crud_test_model: { rating: 20 },
|
255
|
-
format:
|
254
|
+
format: "json" }
|
256
255
|
assert_response :unprocessable_entity
|
257
256
|
assert entry.changed?
|
258
257
|
assert flash[:notice].blank?
|
@@ -262,7 +261,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
262
261
|
|
263
262
|
def test_destroy_failure
|
264
263
|
assert_no_difference("#{model_class.name}.count") do
|
265
|
-
@request.env[
|
264
|
+
@request.env["HTTP_REFERER"] =
|
266
265
|
crud_test_model_url(crud_test_models(:BBBBB))
|
267
266
|
delete :destroy, params: test_params(id: crud_test_models(:BBBBB).id)
|
268
267
|
end
|
@@ -274,7 +273,7 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
274
273
|
def test_destroy_failure_callback
|
275
274
|
e = crud_test_models(:AAAAA)
|
276
275
|
# rubocop:disable Rails/SkipsModelValidations
|
277
|
-
e.update_attribute(:name,
|
276
|
+
e.update_attribute(:name, "illegal")
|
278
277
|
# rubocop:enable Rails/SkipsModelValidations
|
279
278
|
assert_no_difference("#{model_class.name}.count") do
|
280
279
|
delete :destroy, params: test_params(id: e.id)
|
@@ -287,15 +286,15 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
287
286
|
def test_destroy_failure_json
|
288
287
|
assert_no_difference("#{model_class.name}.count") do
|
289
288
|
delete :destroy, params: test_params(id: crud_test_models(:BBBBB).id,
|
290
|
-
format:
|
289
|
+
format: "json")
|
291
290
|
end
|
292
291
|
assert_response :unprocessable_entity
|
293
292
|
assert flash[:notice].blank?
|
294
293
|
end
|
295
294
|
|
296
295
|
def test_models_label
|
297
|
-
assert_equal
|
298
|
-
assert_equal
|
296
|
+
assert_equal "Crud Test Models", @controller.models_label
|
297
|
+
assert_equal "Crud Test Model", @controller.models_label(plural: false)
|
299
298
|
end
|
300
299
|
|
301
300
|
private
|
@@ -305,24 +304,23 @@ class CrudTestModelsControllerTest < ActionController::TestCase
|
|
305
304
|
end
|
306
305
|
|
307
306
|
def new_entry_attrs
|
308
|
-
{ name:
|
307
|
+
{ name: "foo",
|
309
308
|
children: 42,
|
310
309
|
companion_id: 3,
|
311
310
|
rating: 8.5,
|
312
311
|
income: 2.42,
|
313
|
-
birthdate:
|
312
|
+
birthdate: "31-12-1999".to_date,
|
314
313
|
human: true,
|
315
314
|
remarks: "some custom\n\tremarks" }
|
316
315
|
end
|
317
316
|
|
318
317
|
def edit_entry_attrs
|
319
|
-
{ name:
|
318
|
+
{ name: "foo",
|
320
319
|
children: 42,
|
321
320
|
rating: 8.5,
|
322
321
|
income: 2.42,
|
323
|
-
birthdate:
|
322
|
+
birthdate: "31-12-1999".to_date,
|
324
323
|
human: true,
|
325
324
|
remarks: "some custom\n\tremarks" }
|
326
325
|
end
|
327
|
-
|
328
326
|
end
|
@@ -1,73 +1,72 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
1
|
+
require "test_helper"
|
2
|
+
require "support/custom_assertions"
|
3
|
+
require "support/crud_test_helper"
|
4
|
+
require "support/crud_test_model"
|
5
5
|
|
6
6
|
# Test CustomAssertions
|
7
7
|
class CustomAssertionsTest < ActiveSupport::TestCase
|
8
|
-
|
9
8
|
include CustomAssertions
|
10
9
|
include CrudTestHelper
|
11
10
|
|
12
11
|
setup :reset_db, :setup_db, :create_test_data
|
13
12
|
teardown :reset_db
|
14
13
|
|
15
|
-
test
|
14
|
+
test "assert count succeeds if count matches" do
|
16
15
|
assert_nothing_raised do
|
17
|
-
assert_count 3,
|
16
|
+
assert_count 3, "ba", "barbabapa"
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
21
|
-
test
|
20
|
+
test "assert count succeeds if count is zero" do
|
22
21
|
assert_nothing_raised do
|
23
|
-
assert_count 0,
|
22
|
+
assert_count 0, "bo", "barbabapa"
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
|
-
test
|
28
|
-
assert_raise(
|
29
|
-
assert_count 2,
|
26
|
+
test "assert count fails if count does not match" do
|
27
|
+
assert_raise(Minitest::Assertion) do
|
28
|
+
assert_count 2, "ba", "barbabapa"
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
33
|
-
test
|
32
|
+
test "assert valid record succeeds" do
|
34
33
|
assert_nothing_raised do
|
35
|
-
assert_valid crud_test_models(
|
34
|
+
assert_valid crud_test_models("AAAAA")
|
36
35
|
end
|
37
36
|
end
|
38
37
|
|
39
|
-
test
|
40
|
-
assert_raise(
|
38
|
+
test "assert valid record fails for invalid" do
|
39
|
+
assert_raise(Minitest::Assertion) do
|
41
40
|
assert_valid invalid_record
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
45
|
-
test
|
44
|
+
test "assert not valid succeeds if record invalid" do
|
46
45
|
assert_nothing_raised do
|
47
46
|
assert_not_valid invalid_record
|
48
47
|
end
|
49
48
|
end
|
50
49
|
|
51
|
-
test
|
50
|
+
test "assert not valid succeds if record invalid and invalid attrs given" do
|
52
51
|
assert_nothing_raised do
|
53
52
|
assert_not_valid invalid_record, :name, :rating
|
54
53
|
end
|
55
54
|
end
|
56
55
|
|
57
|
-
test
|
58
|
-
assert_raise(
|
59
|
-
assert_not_valid crud_test_models(
|
56
|
+
test "assert not valid fails if record valid" do
|
57
|
+
assert_raise(Minitest::Assertion) do
|
58
|
+
assert_not_valid crud_test_models("AAAAA")
|
60
59
|
end
|
61
60
|
end
|
62
61
|
|
63
|
-
test
|
64
|
-
assert_raise(
|
62
|
+
test "assert not valid fails if record invalid and valid attrs given" do
|
63
|
+
assert_raise(Minitest::Assertion) do
|
65
64
|
assert_not_valid invalid_record, :name, :rating, :children
|
66
65
|
end
|
67
66
|
end
|
68
67
|
|
69
|
-
test
|
70
|
-
assert_raise(
|
68
|
+
test "assert not valid fails if not all invalid attrs given" do
|
69
|
+
assert_raise(Minitest::Assertion) do
|
71
70
|
assert_not_valid invalid_record, :name
|
72
71
|
end
|
73
72
|
end
|
@@ -75,10 +74,9 @@ class CustomAssertionsTest < ActiveSupport::TestCase
|
|
75
74
|
private
|
76
75
|
|
77
76
|
def invalid_record
|
78
|
-
m = crud_test_models(
|
77
|
+
m = crud_test_models("AAAAA")
|
79
78
|
m.name = nil
|
80
79
|
m.rating = 42
|
81
80
|
m
|
82
81
|
end
|
83
|
-
|
84
82
|
end
|