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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
require 'test_helper'
class Widget
extend ActiveModel::Naming
include ActiveModel::Conversion
end
class WidgetsController < InheritedResources::Base
end
# test usage of `permitted_params`
class StrongParametersTest < ActionController::TestCase
def setup
draw_routes do
resources :widgets
end
@controller = WidgetsController.new
@controller.stubs(:widget_url).returns("/")
@controller.stubs(:permitted_params).returns(widget: {permitted: 'param'})
class << @controller
private :permitted_params
end
end
def teardown
clear_routes
end
def test_permitted_params_from_new
Widget.expects(:new).with(permitted: 'param')
get :new, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
def test_permitted_params_from_create
Widget.expects(:new).with(permitted: 'param').returns(mock(save: true))
post :create, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
def test_permitted_params_from_update
mock_widget = mock
mock_widget.stubs(:class).returns(Widget)
mock_widget.expects(:update).with(permitted: 'param')
mock_widget.stubs(:persisted?).returns(true)
mock_widget.stubs(:to_model).returns(mock_widget)
mock_widget.stubs(:model_name).returns(Widget.model_name)
Widget.expects(:find).with('42').returns(mock_widget)
put :update, params: { id: '42', widget: {permitted: 'param', prohibited: 'param'} }
end
# `permitted_params` has greater priority than `widget_params`
def test_with_permitted_and_resource_methods
@controller.stubs(:widget_params).returns(permitted: 'another_param')
class << @controller
private :widget_params
end
Widget.expects(:new).with(permitted: 'param')
get :new, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
end
# test usage of `widget_params`
class StrongParametersWithoutPermittedParamsTest < ActionController::TestCase
def setup
draw_routes do
resources :widgets
end
@controller = WidgetsController.new
@controller.stubs(:widget_url).returns("/")
@controller.stubs(:widget_params).returns(permitted: 'param')
class << @controller
private :widget_params
end
end
def teardown
clear_routes
end
def test_permitted_params_from_new
Widget.expects(:new).with(permitted: 'param')
get :new, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
def test_permitted_params_from_create
Widget.expects(:new).with(permitted: 'param').returns(mock(save: true))
post :create, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
def test_permitted_params_from_update
mock_widget = mock
mock_widget.stubs(:class).returns(Widget)
mock_widget.expects(:update).with(permitted: 'param')
mock_widget.stubs(:persisted?).returns(true)
mock_widget.stubs(:to_model).returns(mock_widget)
mock_widget.stubs(:model_name).returns(Widget.model_name)
Widget.expects(:find).with('42').returns(mock_widget)
put :update, params: { id: '42', widget: {permitted: 'param', prohibited: 'param'} }
end
end
# test usage of `widget_params` integrated with strong parameters (not using stubs)
class StrongParametersIntegrationTest < ActionController::TestCase
def setup
draw_routes do
resources :widgets
end
@controller = WidgetsController.new
@controller.stubs(:widget_url).returns("/")
class << @controller
define_method :widget_params do
params.require(:widget).permit(:permitted)
end
private :widget_params
end
end
def teardown
clear_routes
end
def test_permitted_empty_params_from_new
Widget.expects(:new).with({})
get :new, params: {}
end
def test_permitted_params_from_new
Widget.expects(:new).with('permitted' => 'param')
get :new, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
def test_permitted_params_from_create
Widget.expects(:new).with('permitted' => 'param').returns(mock(save: true))
post :create, params: { widget: { permitted: 'param', prohibited: 'param' } }
end
def test_permitted_params_from_update
mock_widget = mock
mock_widget.stubs(:class).returns(Widget)
mock_widget.expects(:update).with('permitted' => 'param')
mock_widget.stubs(:persisted?).returns(true)
mock_widget.stubs(:to_model).returns(mock_widget)
mock_widget.stubs(:model_name).returns(Widget.model_name)
Widget.expects(:find).with('42').returns(mock_widget)
put :update, params: { id: '42', widget: {permitted: 'param', prohibited: 'param'} }
end
end
|