edgarj 0.01.12
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +23 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/edgarj/base.js +49 -0
- data/app/assets/javascripts/edgarj/menu.js +39 -0
- data/app/assets/javascripts/edgarj/operator_selection.js +133 -0
- data/app/assets/stylesheets/edgarj/base.css +304 -0
- data/app/assets/stylesheets/edgarj/menu.css +65 -0
- data/app/controllers/edgarj/authentication_mixin.rb.sample +30 -0
- data/app/controllers/edgarj/controller_mixin_common.rb +80 -0
- data/app/controllers/edgarj/controller_mixin_for_app.rb +71 -0
- data/app/controllers/edgarj/edgarj_controller.rb +535 -0
- data/app/controllers/edgarj/model_permissions_controller.rb +8 -0
- data/app/controllers/edgarj/permission_mixin.rb +84 -0
- data/app/controllers/edgarj/popup_controller.rb +128 -0
- data/app/controllers/edgarj/rescue_mixin.rb +37 -0
- data/app/controllers/edgarj/user_group_users_controller.rb +8 -0
- data/app/controllers/edgarj/user_groups_controller.rb +9 -0
- data/app/controllers/edgarj/user_groups_popup_controller.rb +8 -0
- data/app/helpers/edgarj/assoc_helper.rb +369 -0
- data/app/helpers/edgarj/common_helper.rb +37 -0
- data/app/helpers/edgarj/edgarj_helper.rb +20 -0
- data/app/helpers/edgarj/field_helper.rb +397 -0
- data/app/helpers/edgarj/form_drawer.rb +322 -0
- data/app/helpers/edgarj/list_drawer.rb +169 -0
- data/app/helpers/edgarj/menu_helper.rb +92 -0
- data/app/helpers/edgarj/model_permissions_helper.rb +9 -0
- data/app/helpers/edgarj/popup_helper.rb +40 -0
- data/app/helpers/edgarj/search_helper.rb +14 -0
- data/app/helpers/edgarj/sessions_helper.rb +9 -0
- data/app/helpers/edgarj/user_group_users_helper.rb +9 -0
- data/app/helpers/edgarj/user_groups_helper.rb +9 -0
- data/app/helpers/edgarj/user_groups_popup_helper.rb +9 -0
- data/app/models/edgarj/drawer/base.rb +234 -0
- data/app/models/edgarj/drawer/normal.rb +6 -0
- data/app/models/edgarj/drawer/popup.rb +47 -0
- data/app/models/edgarj/drawer.rb +13 -0
- data/app/models/edgarj/model_permission.rb +41 -0
- data/app/models/edgarj/page_info.rb +47 -0
- data/app/models/edgarj/search.rb +81 -0
- data/app/models/edgarj/search_form.rb +255 -0
- data/app/models/edgarj/search_popup.rb +44 -0
- data/app/models/edgarj/sssn.rb +120 -0
- data/app/models/edgarj/user_group.rb +67 -0
- data/app/models/edgarj/user_group_user.rb +18 -0
- data/app/models/edgarj.rb +5 -0
- data/app/views/edgarj/edgarj/_form.html.erb +25 -0
- data/app/views/edgarj/edgarj/_list.html.erb +52 -0
- data/app/views/edgarj/edgarj/_message_popup.html.erb +15 -0
- data/app/views/edgarj/edgarj/_search_form.html.erb +64 -0
- data/app/views/edgarj/edgarj/_search_operator.html.erb +17 -0
- data/app/views/edgarj/edgarj/_search_operator_selection.html.erb +12 -0
- data/app/views/edgarj/edgarj/clear.js.erb +1 -0
- data/app/views/edgarj/edgarj/create.js.erb +4 -0
- data/app/views/edgarj/edgarj/destroy.js.erb +2 -0
- data/app/views/edgarj/edgarj/index.html.erb +37 -0
- data/app/views/edgarj/edgarj/index.js.erb +1 -0
- data/app/views/edgarj/edgarj/message_popup.js.erb +3 -0
- data/app/views/edgarj/edgarj/page_info_save.js.erb +1 -0
- data/app/views/edgarj/edgarj/search.js.erb +4 -0
- data/app/views/edgarj/edgarj/search_clear.js.erb +1 -0
- data/app/views/edgarj/edgarj/show.js.erb +1 -0
- data/app/views/edgarj/edgarj/top.html.erb +4 -0
- data/app/views/edgarj/edgarj/update.js.erb +4 -0
- data/app/views/edgarj/popup/_index.html.erb +16 -0
- data/app/views/edgarj/popup/_list.html.erb +42 -0
- data/app/views/edgarj/popup/_message_popup.html.erb +15 -0
- data/app/views/edgarj/popup/_search.html.erb +42 -0
- data/app/views/edgarj/popup/_search_save_popup.html.erb +16 -0
- data/app/views/edgarj/popup/index.js.erb +5 -0
- data/app/views/edgarj/popup/message_popup.js.erb +3 -0
- data/app/views/edgarj/popup/page_info_save.js.erb +1 -0
- data/app/views/edgarj/popup/search.js.erb +15 -0
- data/app/views/edgarj/popup/view_status_save.js.erb +1 -0
- data/config/routes.rb +15 -0
- data/config/settings.yml +5 -0
- data/db/migrate/20131118084600_create_edgar_sssns.rb +14 -0
- data/db/migrate/20131123124730_create_edgar_page_infos.rb +15 -0
- data/db/migrate/20140116062252_create_edgar_user_groups.rb +18 -0
- data/db/migrate/20140116062327_create_edgar_user_group_users.rb +10 -0
- data/db/migrate/20140206222308_create_edgar_model_permissions.rb +14 -0
- data/db/migrate/20141209053055_rename_edgar_to_edgarj.rb +17 -0
- data/lib/core_ext/active_record.rb +123 -0
- data/lib/core_ext/resources.rb +71 -0
- data/lib/edgarj/engine.rb +64 -0
- data/lib/edgarj/enum_cache.rb +46 -0
- data/lib/edgarj/templates/rails/helper/helper.rb +10 -0
- data/lib/edgarj/templates/test_unit/scaffold/functional_test.rb +575 -0
- data/lib/edgarj/version.rb +3 -0
- data/lib/edgarj.rb +14 -0
- data/lib/generators/edgarj/popup_scaffold/USAGE +6 -0
- data/lib/generators/edgarj/popup_scaffold/popup_scaffold_generator.rb +35 -0
- data/lib/generators/edgarj/popup_scaffold/templates/controller.rb +13 -0
- data/lib/generators/edgarj/popup_scaffold/templates/functional_test.rb +197 -0
- data/lib/generators/edgarj/popup_scaffold/templates/helper.rb +9 -0
- data/lib/generators/edgarj/scaffold/USAGE +17 -0
- data/lib/generators/edgarj/scaffold/scaffold_generator.rb +40 -0
- data/lib/generators/edgarj/scaffold/templates/controller.rb +13 -0
- data/lib/tasks/edgarj_tasks.rake +32 -0
- data/lib/tasks/pakcage.rake +18 -0
- data/locale/en.yml +94 -0
- data/locale/ja.yml +100 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +21 -0
- data/test/dummy/app/assets/javascripts/authors.js +2 -0
- data/test/dummy/app/assets/stylesheets/application.css +16 -0
- data/test/dummy/app/assets/stylesheets/authors.css +4 -0
- data/test/dummy/app/assets/stylesheets/scaffold.css +56 -0
- data/test/dummy/app/controllers/application_controller.rb +15 -0
- data/test/dummy/app/controllers/authors_controller.rb +6 -0
- data/test/dummy/app/controllers/authors_popup_controller.rb +6 -0
- data/test/dummy/app/controllers/books_controller.rb +6 -0
- data/test/dummy/app/controllers/dummy_auth_mixin.rb +36 -0
- data/test/dummy/app/decorators/models/edgarj/user_group_decorator.rb +1 -0
- data/test/dummy/app/helpers/application_helper.rb +3 -0
- data/test/dummy/app/helpers/authors_helper.rb +7 -0
- data/test/dummy/app/helpers/authors_popup_helper.rb +7 -0
- data/test/dummy/app/helpers/books_helper.rb +7 -0
- data/test/dummy/app/models/author.rb +32 -0
- data/test/dummy/app/models/book.rb +5 -0
- data/test/dummy/app/models/user.rb +13 -0
- data/test/dummy/app/views/layouts/application.html.erb +32 -0
- data/test/dummy/app/views/layouts/login.html.erb +20 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +15 -0
- data/test/dummy/config/edgarj/menu_config.rb +28 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +42 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +34 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/strong_parameter.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +26 -0
- data/test/dummy/config/routes.rb +60 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20131107120635_create_authors.rb +9 -0
- data/test/dummy/db/migrate/20131218011851_create_books.rb +10 -0
- data/test/dummy/db/migrate/20140201000000_add_user_group_id_to_authors.rb +5 -0
- data/test/dummy/db/migrate/20140807065420_create_users.rb +10 -0
- data/test/dummy/db/schema.rb +93 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/test/functional/authors_controller_test.rb +631 -0
- data/test/dummy/test/functional/books_controller_test.rb +516 -0
- data/test/dummy/test/helpers/authors_helper_test.rb +4 -0
- data/test/dummy/test/unit/author_test.rb +7 -0
- data/test/dummy/test/unit/book_test.rb +7 -0
- data/test/edgar_test.rb +7 -0
- data/test/fixtures/authors.yml +32 -0
- data/test/fixtures/books.yml +56 -0
- data/test/fixtures/edgarj/model_permissions.yml +97 -0
- data/test/fixtures/edgarj/page_infos.yml +84 -0
- data/test/fixtures/edgarj/sssns.yml +38 -0
- data/test/fixtures/edgarj/user_group_users.yml +114 -0
- data/test/fixtures/edgarj/user_groups.yml +95 -0
- data/test/fixtures/users.yml +49 -0
- data/test/functional/edgarj/edgarj_controller_test.rb +24 -0
- data/test/functional/edgarj/model_permissions_controller_test.rb +554 -0
- data/test/functional/edgarj/user_group_users_controller_test.rb +567 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/support/edgarj/controller_supporter.rb +23 -0
- data/test/test_helper.rb +23 -0
- data/test/unit/edgarj/model_permission_test.rb +27 -0
- data/test/unit/edgarj/page_info_test.rb +7 -0
- data/test/unit/edgarj/sssn_test.rb +10 -0
- data/test/unit/edgarj/user_group_test.rb +32 -0
- data/test/unit/edgarj/user_group_user_test.rb +9 -0
- data/test/unit/helpers/edgarj/model_permissions_helper_test.rb +6 -0
- data/test/unit/helpers/edgarj/user_group_users_helper_test.rb +6 -0
- metadata +456 -0
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Edgarj
|
|
4
|
+
class UserGroupUsersControllerTest < ActionController::TestCase
|
|
5
|
+
context 'root user' do
|
|
6
|
+
setup do
|
|
7
|
+
login_as(:root)
|
|
8
|
+
@user_group_user = edgarj_user_group_users(:role_admin)
|
|
9
|
+
@pi = create_page_info(@sssn, 'user_group_users', UserGroupUser)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
should 'get index' do
|
|
13
|
+
get :index
|
|
14
|
+
assert_response :success
|
|
15
|
+
assert_not_nil assigns(:list)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
should 'paginate' do
|
|
19
|
+
xhr :get, :index, page: 2
|
|
20
|
+
assert_response :success
|
|
21
|
+
assert_not_nil assigns(:list)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
should 'sort' do
|
|
25
|
+
xhr :put, :page_info_save,
|
|
26
|
+
id: @pi.id,
|
|
27
|
+
edgarj_page_info: {
|
|
28
|
+
dir: 'asc',
|
|
29
|
+
order_by: 'created_at'
|
|
30
|
+
}
|
|
31
|
+
assert_response :success
|
|
32
|
+
assert_not_nil assigns(:list)
|
|
33
|
+
assert_equal 'asc', assigns(:page_info).dir
|
|
34
|
+
assert_equal 'created_at', assigns(:page_info).order_by
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
should 'create user_group_user' do
|
|
38
|
+
assert_difference('UserGroupUser.count') do
|
|
39
|
+
xhr :post, :create, edgarj_user_group_user: {
|
|
40
|
+
user_group_id: @user_group_user.user_group_id,
|
|
41
|
+
user_id: users(:book_admin).id,
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
assert_response :success
|
|
45
|
+
assert assigns(:record)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
should 'not create invalid user_group_user' do
|
|
49
|
+
assert_no_difference('UserGroupUser.count') do
|
|
50
|
+
xhr :post, :create, edgarj_user_group_user: {
|
|
51
|
+
user_group_id: @user_group_user.user_group_id,
|
|
52
|
+
user_id: @user_group_user.user_id
|
|
53
|
+
# duplicated user_id
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
assert_response :success
|
|
57
|
+
assert assigns(:record)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# ここで 以下エラーが発生:
|
|
61
|
+
# ActionController::RoutingError No route matches {:controller=>"users", :action=>"show", :id=>..
|
|
62
|
+
# /ido/maeken/repo/edgarj/app/helpers/edgarj/assoc_helper.rb:206:in `draw_belongs_to_field'
|
|
63
|
+
should 'show user_group_user in HTML' do
|
|
64
|
+
skip 'hi'
|
|
65
|
+
get :show, id: @user_group_user
|
|
66
|
+
assert_response :success
|
|
67
|
+
assert_not_nil assigns(:record)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
should 'show user_group_user in JS' do
|
|
71
|
+
xhr :get, :show, id: @user_group_user
|
|
72
|
+
assert_response :success
|
|
73
|
+
assert_not_nil assigns(:record)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
should 'update user_group_user' do
|
|
77
|
+
xhr :put, :update, id: @user_group_user, edgarj_user_group_user: {
|
|
78
|
+
user_id: users(:book_admin).id
|
|
79
|
+
}
|
|
80
|
+
assert_response :success
|
|
81
|
+
assert assigns(:record)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
should 'destroy user_group_user' do
|
|
85
|
+
assert_difference('UserGroupUser.count', -1) do
|
|
86
|
+
xhr :delete, :destroy, id: @user_group_user
|
|
87
|
+
end
|
|
88
|
+
assert_response :success
|
|
89
|
+
assert assigns(:record)
|
|
90
|
+
assert assigns(:list)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
should 'clear user_group_user' do
|
|
94
|
+
assert_no_difference('UserGroupUser.count') do
|
|
95
|
+
xhr :get, :clear
|
|
96
|
+
end
|
|
97
|
+
assert_response :success
|
|
98
|
+
assert_not_nil assigns(:record)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
should 'csv_download user_group_users' do
|
|
102
|
+
get :csv_download
|
|
103
|
+
assert_response :success
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
should 'search' do
|
|
107
|
+
xhr :get, :search, edgarj_search_form: {}
|
|
108
|
+
assert_response :success
|
|
109
|
+
assert assigns(:list).count >= 1
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
should 'search_clear user_group_user' do
|
|
113
|
+
xhr :get, :search_clear
|
|
114
|
+
assert_response :success
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
should 'search_save user_group_user' do
|
|
118
|
+
skip 'search_save'
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
should 'search_load user_group_user' do
|
|
122
|
+
skip 'search_load'
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# All of tests in this context is skipped because it is required
|
|
127
|
+
# to prepare read-only user.
|
|
128
|
+
# When complete the preparation, delete the skip lines.
|
|
129
|
+
context 'read-only user' do
|
|
130
|
+
setup do
|
|
131
|
+
# prepare fixtures of model_permissions, user_groups, and
|
|
132
|
+
# user_group_users for read-only user of the
|
|
133
|
+
# UserGroupUsersController and login by him/her.
|
|
134
|
+
#
|
|
135
|
+
login_as(:user_group_user_reader)
|
|
136
|
+
@pi = create_page_info(@sssn, 'user_group_users', UserGroupUser)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
should 'get index' do
|
|
140
|
+
skip 'get index'
|
|
141
|
+
get :index
|
|
142
|
+
assert_response :success
|
|
143
|
+
assert_not_nil assigns(:list)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
should 'paginate' do
|
|
147
|
+
skip 'paginate'
|
|
148
|
+
xhr :get, :index, page: 2
|
|
149
|
+
assert_response :success
|
|
150
|
+
assert_not_nil assigns(:list)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
should 'sort' do
|
|
154
|
+
skip 'sort'
|
|
155
|
+
xhr :put, :page_info_save,
|
|
156
|
+
id: @pi.id,
|
|
157
|
+
edgarj_page_info: {
|
|
158
|
+
dir: 'asc',
|
|
159
|
+
order_by: 'created_at'
|
|
160
|
+
}
|
|
161
|
+
assert_response :success
|
|
162
|
+
assert_not_nil assigns(:list)
|
|
163
|
+
assert_equal 'asc', assigns(:page_info).dir
|
|
164
|
+
assert_equal 'created_at', assigns(:page_info).order_by
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
should 'not create user_group_user' do
|
|
168
|
+
skip 'not create user_group_user'
|
|
169
|
+
assert_no_difference('UserGroupUser.count') do
|
|
170
|
+
xhr :post, :create, edgarj_user_group_user: { }
|
|
171
|
+
end
|
|
172
|
+
assert_template 'message_popup'
|
|
173
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
should 'not create invalid user_group_user' do
|
|
177
|
+
skip 'not create invalid user_group_user'
|
|
178
|
+
assert_no_difference('UserGroupUser.count') do
|
|
179
|
+
#xhr :post, :create, invalid resource attributes...
|
|
180
|
+
end
|
|
181
|
+
assert_template 'message_popup'
|
|
182
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
should 'show user_group_user in HTML' do
|
|
186
|
+
skip 'show user_group_user in HTML'
|
|
187
|
+
get :show, id: @user_group_user
|
|
188
|
+
assert_response :success
|
|
189
|
+
assert_not_nil assigns(:record)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
should 'show user_group_user in JS' do
|
|
193
|
+
skip 'show user_group_user in JS'
|
|
194
|
+
xhr :get, :show, id: @user_group_user
|
|
195
|
+
assert_response :success
|
|
196
|
+
assert_not_nil assigns(:record)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
should 'not update user_group_user' do
|
|
200
|
+
skip 'not update user_group_user'
|
|
201
|
+
xhr :put, :update, id: @user_group_user, edgarj_user_group_user: { }
|
|
202
|
+
assert_template 'message_popup'
|
|
203
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
204
|
+
old_user_group_user = @user_group_user
|
|
205
|
+
assert_equal(
|
|
206
|
+
old_user_group_user,
|
|
207
|
+
@user_group_user.reload)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
should 'not destroy user_group_user' do
|
|
211
|
+
skip 'not destroy user_group_user'
|
|
212
|
+
assert_no_difference('UserGroupUser.count') do
|
|
213
|
+
xhr :delete, :destroy, id: @user_group_user
|
|
214
|
+
end
|
|
215
|
+
assert_template 'message_popup'
|
|
216
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
should 'clear user_group_user' do
|
|
220
|
+
skip 'clear user_group_user'
|
|
221
|
+
assert_no_difference('UserGroupUser.count') do
|
|
222
|
+
xhr :get, :clear
|
|
223
|
+
end
|
|
224
|
+
assert_response :success
|
|
225
|
+
assert_not_nil assigns(:record)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
should 'csv_download user_group_users' do
|
|
229
|
+
skip 'csv_download user_group_users'
|
|
230
|
+
get :csv_download
|
|
231
|
+
assert_response :success
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
should 'search' do
|
|
235
|
+
skip 'search user_group_users'
|
|
236
|
+
xhr :get, :search, edgarj_search_form: {}
|
|
237
|
+
assert_response :success
|
|
238
|
+
assert assigns(:list).count >= 1
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
should 'search_clear user_group_user' do
|
|
242
|
+
skip 'search_clear user_group_user'
|
|
243
|
+
xhr :get, :search_clear
|
|
244
|
+
assert_response :success
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
should 'search_save user_group_user' do
|
|
248
|
+
skip 'search_save'
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
should 'search_load user_group_user' do
|
|
252
|
+
skip 'search_load'
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# All of tests in this context is skipped because it is required
|
|
257
|
+
# to prepare 'permitted but user_scoped' user.
|
|
258
|
+
# When complete the preparation, delete the skip lines.
|
|
259
|
+
context 'permitted and user_scoped user' do
|
|
260
|
+
setup do
|
|
261
|
+
# prepare fixtures of model_permissions, user_groups, and
|
|
262
|
+
# user_group_users for permitted and user_scoped user of the
|
|
263
|
+
# UserGroupUsersController and login by him/her.
|
|
264
|
+
#
|
|
265
|
+
#login_as(:permitted_n_user_scoped_on_user_group_users)
|
|
266
|
+
#@pi = create_page_info(@sssn, 'user_group_users', UserGroupUser)
|
|
267
|
+
|
|
268
|
+
@user_group_user = edgarj_user_group_users(:role_user_group_user_reader)
|
|
269
|
+
@user_group_user_scoped_out = edgarj_user_group_users(:role_admin)
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
should 'search 1 hit since role and user_scoped satisfy' do
|
|
273
|
+
skip 'search 1 hit since role and user_scoped satisfy'
|
|
274
|
+
xhr :get, :search, edgarj_search_form: {_id: @user_group_user.id}
|
|
275
|
+
assert_response :success
|
|
276
|
+
assert_equal 1, assigns(:list).count
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
should 'not search 1 hit since key is out-of-scope' do
|
|
280
|
+
skip 'not search 1 hit since key is out-of-scope'
|
|
281
|
+
xhr :get, :search, edgarj_search_form: {_id: @user_group_user_scoped_out.id}
|
|
282
|
+
assert_response :success
|
|
283
|
+
assert_equal 0, assigns(:list).count
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
should 'show assigned user_group_user in HTML' do
|
|
287
|
+
skip 'show assigned user_group_user in HTML'
|
|
288
|
+
get :show, id: @user_group_user
|
|
289
|
+
assert_response :success
|
|
290
|
+
assert_not_nil assigns(:record)
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
should 'show assigned user_group_user in JS' do
|
|
294
|
+
skip 'show assigned user_group_user in JS'
|
|
295
|
+
xhr :get, :show, id: @user_group_user
|
|
296
|
+
assert_response :success
|
|
297
|
+
assert_not_nil assigns(:record)
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
should 'not show non-assigned user_group_user in HTML' do
|
|
301
|
+
skip 'not show non-assigned user_group_user in HTML'
|
|
302
|
+
get :show, id: @user_group_user_scoped_out
|
|
303
|
+
assert_response :redirect
|
|
304
|
+
assert_nil assigns(:record)
|
|
305
|
+
assert_equal I18n.t('edgarj.default.not_found'), flash[:error]
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
should 'not show non-assigned user_group_user in JS' do
|
|
309
|
+
skip 'not show non-assigned user_group_user in JS'
|
|
310
|
+
xhr :get, :show, id: @user_group_user_scoped_out
|
|
311
|
+
assert_response :success
|
|
312
|
+
assert_nil assigns(:record)
|
|
313
|
+
assert_equal I18n.t('edgarj.default.not_found'), flash[:error]
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
should 'update user_group_user' do
|
|
317
|
+
skip 'update user_group_user'
|
|
318
|
+
xhr :put, :update, id: @user_group_user, edgarj_user_group_user: { }
|
|
319
|
+
assert_response :success
|
|
320
|
+
assert assigns(:record)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
should 'not update user_group_user' do
|
|
324
|
+
skip 'not update user_group_user'
|
|
325
|
+
xhr :put, :update, id: @user_group_user, edgarj_user_group_user: { }
|
|
326
|
+
assert_nil assigns(:record)
|
|
327
|
+
assert_equal I18n.t('edgarj.default.not_found'), flash[:error]
|
|
328
|
+
old_user_group_user = @user_group_user
|
|
329
|
+
assert_equal(
|
|
330
|
+
old_user_group_user,
|
|
331
|
+
@user_group_user.reload)
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
should 'destroy user_group_user' do
|
|
335
|
+
skip 'destroy user_group_user'
|
|
336
|
+
assert_difference('UserGroupUser.count', -1) do
|
|
337
|
+
xhr :delete, :destroy, id: @user_group_user
|
|
338
|
+
end
|
|
339
|
+
assert_response :success
|
|
340
|
+
assert assigns(:record)
|
|
341
|
+
assert assigns(:list)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
should 'not destroy user_group_user' do
|
|
345
|
+
skip 'not destroy user_group_user'
|
|
346
|
+
assert_no_difference('UserGroupUser.count') do
|
|
347
|
+
xhr :delete, :destroy, id: @user_group_user_scoped_out
|
|
348
|
+
end
|
|
349
|
+
assert_equal I18n.t('edgarj.default.not_found'), flash[:error]
|
|
350
|
+
end
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
context 'not-permitted user' do
|
|
354
|
+
setup do
|
|
355
|
+
login_as(:not_permitted)
|
|
356
|
+
@user_group_user = edgarj_user_group_users(:role_admin)
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
should 'not get index' do
|
|
360
|
+
get :index
|
|
361
|
+
|
|
362
|
+
assert_redirected_to top_path
|
|
363
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
should 'not paginate' do
|
|
367
|
+
xhr :get, :index, page: 2
|
|
368
|
+
|
|
369
|
+
assert_template 'message_popup'
|
|
370
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
should 'not sort' do
|
|
374
|
+
xhr :put, :page_info_save,
|
|
375
|
+
id: edgarj_page_infos(:root_zip_address),
|
|
376
|
+
edgarj_page_info: {
|
|
377
|
+
dir: 'asc',
|
|
378
|
+
order_by: 'name'
|
|
379
|
+
}
|
|
380
|
+
assert_template 'message_popup'
|
|
381
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
should 'not create user_group_user' do
|
|
385
|
+
assert_no_difference('UserGroupUser.count') do
|
|
386
|
+
xhr :post, :create, edgarj_user_group_user: { }
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
assert_template 'message_popup'
|
|
390
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
should 'not show user_group_user in HTML' do
|
|
394
|
+
get :show, id: @user_group_user
|
|
395
|
+
assert_redirected_to top_path
|
|
396
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
should 'not show user_group_user in JS' do
|
|
400
|
+
xhr :get, :show, id: @user_group_user
|
|
401
|
+
|
|
402
|
+
assert_template 'message_popup'
|
|
403
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
should 'not update user_group_user' do
|
|
407
|
+
xhr :put, :update, id: @user_group_user, edgarj_user_group_user: { }
|
|
408
|
+
assert_template 'message_popup'
|
|
409
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
410
|
+
old_user_group_user = @user_group_user
|
|
411
|
+
assert_equal(
|
|
412
|
+
old_user_group_user,
|
|
413
|
+
@user_group_user.reload)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
should 'not destroy user_group_user' do
|
|
417
|
+
assert_no_difference('UserGroupUser.count') do
|
|
418
|
+
xhr :delete, :destroy, id: @user_group_user
|
|
419
|
+
end
|
|
420
|
+
assert_template 'message_popup'
|
|
421
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
should 'not clear' do
|
|
425
|
+
assert_no_difference('UserGroupUser.count') do
|
|
426
|
+
xhr :get, :clear
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
assert_template 'message_popup'
|
|
430
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
should 'not csv_download' do
|
|
434
|
+
get :csv_download
|
|
435
|
+
|
|
436
|
+
assert_redirected_to top_path
|
|
437
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
438
|
+
end
|
|
439
|
+
|
|
440
|
+
should 'not search' do
|
|
441
|
+
xhr :get, :search, edgarj_search_form: {_id: @user_group_user.id}
|
|
442
|
+
|
|
443
|
+
assert_template 'message_popup'
|
|
444
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
should 'not search_clear' do
|
|
448
|
+
xhr :get, :search_clear
|
|
449
|
+
|
|
450
|
+
assert_template 'message_popup'
|
|
451
|
+
assert_equal I18n.t('edgarj.default.permission_no'), flash[:error]
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
should 'not search_save' do
|
|
455
|
+
skip 'search_save'
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
should 'not search_load' do
|
|
459
|
+
skip 'search_load'
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
# test Edgarj::AuthenticationMixin
|
|
463
|
+
|
|
464
|
+
should 'current_user' do
|
|
465
|
+
get :index
|
|
466
|
+
assert_equal users(:not_permitted), @controller.send(:current_user)
|
|
467
|
+
end
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
context 'not-login' do
|
|
471
|
+
setup do
|
|
472
|
+
@user_group_user = edgarj_user_group_users(:role_admin)
|
|
473
|
+
end
|
|
474
|
+
|
|
475
|
+
should 'not get index' do
|
|
476
|
+
get :index
|
|
477
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
478
|
+
end
|
|
479
|
+
|
|
480
|
+
should 'not paginate' do
|
|
481
|
+
xhr :get, :index, page: 2
|
|
482
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
483
|
+
end
|
|
484
|
+
|
|
485
|
+
should 'not sort' do
|
|
486
|
+
xhr :put, :page_info_save,
|
|
487
|
+
# ensure what happens when not-login user puts with
|
|
488
|
+
# current edgarj_page_info-id
|
|
489
|
+
id: edgarj_page_infos(:root_zip_address),
|
|
490
|
+
edgarj_page_info: {
|
|
491
|
+
dir: 'asc',
|
|
492
|
+
order_by: 'name'
|
|
493
|
+
}
|
|
494
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
495
|
+
end
|
|
496
|
+
|
|
497
|
+
should 'not create user_group_user' do
|
|
498
|
+
assert_no_difference('UserGroupUser.count') do
|
|
499
|
+
xhr :post, :create, edgarj_user_group_user: { name: @user_group_user.name }
|
|
500
|
+
end
|
|
501
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
502
|
+
end
|
|
503
|
+
|
|
504
|
+
should 'not create user_group_user invalid' do
|
|
505
|
+
assert_no_difference('UserGroupUser.count') do
|
|
506
|
+
xhr :post, :create, edgarj_user_group_user: { name: nil }
|
|
507
|
+
end
|
|
508
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
509
|
+
end
|
|
510
|
+
|
|
511
|
+
should 'not show user_group_user in HTML' do
|
|
512
|
+
get :show, id: @user_group_user
|
|
513
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
should 'not show user_group_user in JS' do
|
|
517
|
+
xhr :get, :show, id: @user_group_user
|
|
518
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
should 'not update user_group_user' do
|
|
522
|
+
assert_no_difference('UserGroupUser.count') do
|
|
523
|
+
xhr :put, :update, id: @user_group_user, edgarj_user_group_user: { name: @user_group_user.name }
|
|
524
|
+
end
|
|
525
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
should 'not destroy user_group_user' do
|
|
529
|
+
assert_no_difference('UserGroupUser.count') do
|
|
530
|
+
xhr :delete, :destroy, id: @user_group_user
|
|
531
|
+
end
|
|
532
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
should 'not clear' do
|
|
536
|
+
assert_no_difference('UserGroupUser.count') do
|
|
537
|
+
xhr :get, :clear
|
|
538
|
+
end
|
|
539
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
should 'not csv_download' do
|
|
543
|
+
get :csv_download
|
|
544
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
545
|
+
end
|
|
546
|
+
|
|
547
|
+
should 'not search' do
|
|
548
|
+
xhr :get, :search, edgarj_search_form: {_id: edgarj_user_group_users(:role_admin).id}
|
|
549
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
550
|
+
end
|
|
551
|
+
|
|
552
|
+
should 'not search_clear' do
|
|
553
|
+
xhr :get, :search_clear
|
|
554
|
+
assert_equal I18n.t('edgarj.default.login_failed'), flash[:error]
|
|
555
|
+
end
|
|
556
|
+
|
|
557
|
+
should 'not search_save' do
|
|
558
|
+
skip 'search_save'
|
|
559
|
+
end
|
|
560
|
+
|
|
561
|
+
should 'not search_load' do
|
|
562
|
+
skip 'search_load'
|
|
563
|
+
end
|
|
564
|
+
end
|
|
565
|
+
end
|
|
566
|
+
end
|
|
567
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Edgarj::ControllerSupporter
|
|
2
|
+
def login_as(user_symbol)
|
|
3
|
+
@sssn = edgarj_sssns(user_symbol)
|
|
4
|
+
@sssn.data # because need to Edgarj::Sssn#loaded? be true to
|
|
5
|
+
# 'save' not return false
|
|
6
|
+
@sssn.update_attribute(:session_id, @request.session_options[:id])
|
|
7
|
+
@request.session[:user_id] = user_symbol ? Edgarj::label(user_symbol) : nil
|
|
8
|
+
@request.session[:sssn] = true
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def create_page_info(sssn, view, model_class)
|
|
12
|
+
pi = Edgarj::PageInfo.create!(
|
|
13
|
+
sssn_id: sssn.id,
|
|
14
|
+
view: view,
|
|
15
|
+
lines: 10,
|
|
16
|
+
order_by: '',
|
|
17
|
+
dir: '',
|
|
18
|
+
page: 1)
|
|
19
|
+
pi.record = Edgarj::SearchForm.new(model_class, {})
|
|
20
|
+
pi.save!
|
|
21
|
+
pi
|
|
22
|
+
end
|
|
23
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Configure Rails Environment
|
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
|
3
|
+
|
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
|
5
|
+
require "rails/test_help"
|
|
6
|
+
require 'shoulda-context'
|
|
7
|
+
|
|
8
|
+
Rails.backtrace_cleaner.remove_silencers!
|
|
9
|
+
|
|
10
|
+
# Load support files
|
|
11
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
12
|
+
|
|
13
|
+
# Load fixtures from the engine
|
|
14
|
+
# https://github.com/rails/rails/issues/4971#issuecomment-20129088
|
|
15
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
|
|
16
|
+
|
|
17
|
+
class ActiveSupport::TestCase
|
|
18
|
+
fixtures :all
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class ActionController::TestCase
|
|
22
|
+
include Edgarj::ControllerSupporter
|
|
23
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class Edgarj::ModelPermissionTest < ActiveSupport::TestCase
|
|
4
|
+
test 'permitted?' do
|
|
5
|
+
f = Edgarj::ModelPermission::FlagsBitset
|
|
6
|
+
TESTS = [
|
|
7
|
+
# test pattern is as follows:
|
|
8
|
+
#
|
|
9
|
+
#expect fixture requested_flag(s)
|
|
10
|
+
#------ ------- -----------------
|
|
11
|
+
[true, :book_reader, f::READ], # exact match
|
|
12
|
+
[false, :book_reader, f::DELETE], # exact not match
|
|
13
|
+
[true, :customer_read_update, f::READ], # flag is included
|
|
14
|
+
[true, :customer_read_update, f::READ + f::UPDATE], # flags are included
|
|
15
|
+
[false, :customer_read_update, f::DELETE], # flag is not included
|
|
16
|
+
[false, :customer_read_update, f::READ + f::DELETE], # some flags are not included
|
|
17
|
+
# partially -> FALSE
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
for t in TESTS do
|
|
21
|
+
assert_equal(
|
|
22
|
+
t[0],
|
|
23
|
+
!!edgarj_model_permissions(t[1]).permitted?(t[2]),
|
|
24
|
+
t.inspect)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|