Module: CrudControllerTestHelper
- Extended by:
- ActiveSupport::Concern
- Included in:
- CrudTestModelsControllerTest
- Defined in:
- lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb,
lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb
Overview
A module to include into your functional tests for your crud controller subclasses. Simply implement the two methods #test_entry and #test_entry_attrs to test the basic crud functionality. Override the test methods if you changed the behaviour in your subclass controller.
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- #ivar(name) ⇒ Object
-
#perform_combined_request ⇒ Object
If a combine key is given in metadata, only the first request for all examples with the same key will be performed.
-
#perform_request ⇒ Object
Performs a request based on the metadata of the action example under test.
- #remember_request ⇒ Object
- #restore_request ⇒ Object
-
#scope_params ⇒ Object
The params defining the nesting of the test entry.
-
#test_create ⇒ Object
:nodoc:.
-
#test_create_json ⇒ Object
:nodoc:.
-
#test_destroy ⇒ Object
:nodoc:.
-
#test_destroy_json ⇒ Object
:nodoc:.
-
#test_edit ⇒ Object
:nodoc:.
-
#test_index ⇒ Object
rubocop:disable Metrics/ModuleLength.
-
#test_index_json ⇒ Object
:nodoc:.
-
#test_index_search ⇒ Object
rubocop:disable Metrics/AbcSize :nodoc:.
-
#test_index_sort_asc ⇒ Object
:nodoc:.
-
#test_index_sort_desc ⇒ Object
:nodoc:.
-
#test_new ⇒ Object
:nodoc:.
-
#test_show ⇒ Object
:nodoc:.
-
#test_show_json ⇒ Object
:nodoc:.
-
#test_show_with_non_existing_id_raises_record_not_found ⇒ Object
:nodoc:.
-
#test_update ⇒ Object
:nodoc:.
-
#test_update_json ⇒ Object
:nodoc:.
Instance Method Details
#ivar(name) ⇒ Object
58 59 60 |
# File 'lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb', line 58 def ivar(name) controller.instance_variable_get("@#{name}") end |
#perform_combined_request ⇒ Object
If a combine key is given in metadata, only the first request for all examples with the same key will be performed.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb', line 23 def perform_combined_request stack = RSpec.current_example.[:combine] if stack @@current_stack ||= nil if stack == @@current_stack && described_class == @@current_controller.class restore_request else perform_request @@current_stack = stack remember_request end else perform_request end end |
#perform_request ⇒ Object
Performs a request based on the metadata of the action example under test.
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb', line 7 def perform_request # rubocop:disable Metrics/AbcSize m = RSpec.current_example. example_params = respond_to?(:params) ? send(:params) : {} params = scope_params.dup params[:format] = m[:format] if m[:format] params[:id] = test_entry.id if m[:id] params.merge!(example_params) if m[:method] == :get && m[:format] == :js get m[:action], params: params, xhr: true else send(m[:method], m[:action], params: params) end end |
#remember_request ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb', line 40 def remember_request @@current_response = @response @@current_request = @request @@current_controller = @controller @@current_templates = @_templates || @templates # treat in-memory entry as committed in order to # avoid rollback of internal state. entry&.committed! end |
#restore_request ⇒ Object
51 52 53 54 55 56 |
# File 'lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb', line 51 def restore_request @response = @@current_response @_templates = @templates = @@current_templates @controller = @@current_controller @request = @@current_request end |
#scope_params ⇒ Object
The params defining the nesting of the test entry.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/generators/dry_crud/templates/spec/support/crud_controller_test_helper.rb', line 63 def scope_params params = {} # for nested controllers, add parent ids to each request Array(controller.nesting).reverse.reduce(test_entry) do |parent, p| if p.is_a?(Class) && p < ActiveRecord::Base assoc = p.name.underscore params["#{assoc}_id"] = parent.send(:"#{assoc}_id") parent.send(assoc) else parent end end params end |
#test_create ⇒ Object
:nodoc:
74 75 76 77 78 79 80 81 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 74 def test_create # :nodoc: assert_difference("#{model_class.name}.count") do post :create, params: test_params(model_identifier => new_entry_attrs) end assert_redirected_to_show entry assert_not entry.new_record? assert_attrs_equal(new_entry_attrs) end |
#test_create_json ⇒ Object
:nodoc:
83 84 85 86 87 88 89 90 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 83 def test_create_json # :nodoc: assert_difference("#{model_class.name}.count") do post :create, params: test_params(model_identifier => new_entry_attrs, format: 'json') end assert_response :success assert @response.body.starts_with?('{"id":') end |
#test_destroy ⇒ Object
:nodoc:
117 118 119 120 121 122 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 117 def test_destroy # :nodoc: assert_difference("#{model_class.name}.count", -1) do delete :destroy, params: test_params(id: test_entry.id) end assert_redirected_to_index end |
#test_destroy_json ⇒ Object
:nodoc:
124 125 126 127 128 129 130 131 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 124 def test_destroy_json # :nodoc: assert_difference("#{model_class.name}.count", -1) do delete :destroy, params: test_params(id: test_entry.id, format: 'json') end assert_response :success assert_equal '', @response.body.strip end |
#test_edit ⇒ Object
:nodoc:
92 93 94 95 96 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 92 def test_edit # :nodoc: get :edit, params: test_params(id: test_entry.id) assert_response :success assert_equal test_entry, entry end |
#test_index ⇒ Object
rubocop:disable Metrics/ModuleLength
7 8 9 10 11 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 7 def test_index # :nodoc: get :index, params: test_params assert_response :success assert entries.present? end |
#test_index_json ⇒ Object
:nodoc:
13 14 15 16 17 18 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 13 def test_index_json # :nodoc: get :index, params: test_params(format: 'json') assert_response :success assert entries.present? assert @response.body.starts_with?('[{'), @response.body end |
#test_index_search ⇒ Object
rubocop:disable Metrics/AbcSize :nodoc:
20 21 22 23 24 25 26 27 28 29 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 20 def test_index_search # rubocop:disable Metrics/AbcSize :nodoc: field = @controller.search_columns.first val = field && test_entry[field].to_s return if val.blank? # does not support search or no value in this field get :index, params: test_params(q: val[0..((val.size + 1) / 2)]) assert_response :success assert entries.present? assert entries.include?(test_entry) end |
#test_index_sort_asc ⇒ Object
:nodoc:
31 32 33 34 35 36 37 38 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 31 def test_index_sort_asc # :nodoc: col = model_class.column_names.first get :index, params: test_params(sort: col, sort_dir: 'asc') assert_response :success assert entries.present? sorted = entries.sort_by(&col.to_sym) assert_equal sorted, entries.to_a end |
#test_index_sort_desc ⇒ Object
:nodoc:
40 41 42 43 44 45 46 47 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 40 def test_index_sort_desc # :nodoc: col = model_class.column_names.first get :index, params: test_params(sort: col, sort_dir: 'desc') assert_response :success assert entries.present? sorted = entries.to_a.sort_by(&col.to_sym) assert_equal sorted.reverse, entries.to_a end |
#test_new ⇒ Object
:nodoc:
68 69 70 71 72 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 68 def test_new # :nodoc: get :new, params: test_params assert_response :success assert entry.new_record? end |
#test_show ⇒ Object
:nodoc:
49 50 51 52 53 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 49 def test_show # :nodoc: get :show, params: test_params(id: test_entry.id) assert_response :success assert_equal test_entry, entry end |
#test_show_json ⇒ Object
:nodoc:
55 56 57 58 59 60 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 55 def test_show_json # :nodoc: get :show, params: test_params(id: test_entry.id, format: 'json') assert_response :success assert_equal test_entry, entry assert @response.body.starts_with?('{') end |
#test_show_with_non_existing_id_raises_record_not_found ⇒ Object
:nodoc:
62 63 64 65 66 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 62 def test_show_with_non_existing_id_raises_record_not_found # :nodoc: assert_raise(ActiveRecord::RecordNotFound) do get :show, params: test_params(id: 9999) end end |
#test_update ⇒ Object
:nodoc:
98 99 100 101 102 103 104 105 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 98 def test_update # :nodoc: assert_no_difference("#{model_class.name}.count") do put :update, params: test_params(id: test_entry.id, model_identifier => edit_entry_attrs) end assert_attrs_equal(edit_entry_attrs) assert_redirected_to_show entry end |
#test_update_json ⇒ Object
:nodoc:
107 108 109 110 111 112 113 114 115 |
# File 'lib/generators/dry_crud/templates/test/support/crud_controller_test_helper.rb', line 107 def test_update_json # :nodoc: assert_no_difference("#{model_class.name}.count") do put :update, params: test_params(id: test_entry.id, model_identifier => edit_entry_attrs, format: 'json') end assert_response :success assert @response.body.starts_with?('{"id":') end |