incline 0.1.5
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/.gitignore +13 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +186 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +208 -0
- data/Rakefile +37 -0
- data/app/assets/fonts/incline/.keep +0 -0
- data/app/assets/images/incline/.keep +0 -0
- data/app/assets/images/incline/barcode-B.svg +181 -0
- data/app/assets/javascripts/incline/activate_classed_items.js +11 -0
- data/app/assets/javascripts/incline/application.js +30 -0
- data/app/assets/javascripts/incline/bootstrap-datepicker.js +1800 -0
- data/app/assets/javascripts/incline/datatables.js +22193 -0
- data/app/assets/javascripts/incline/escapeHtml.js +10 -0
- data/app/assets/javascripts/incline/inline_actions.js +479 -0
- data/app/assets/javascripts/incline/jquery.doubleScroll.js +112 -0
- data/app/assets/javascripts/incline/jquery.number.js +764 -0
- data/app/assets/javascripts/incline/regexMask.js +27 -0
- data/app/assets/javascripts/incline/select2/i18n/en.js +3 -0
- data/app/assets/javascripts/incline/select2/select2.full.js +6436 -0
- data/app/assets/stylesheets/incline/application.css +18 -0
- data/app/assets/stylesheets/incline/bootstrap-theme.min.css +5 -0
- data/app/assets/stylesheets/incline/custom.scss +279 -0
- data/app/assets/stylesheets/incline/datatables.css +494 -0
- data/app/assets/stylesheets/incline/datepicker3.css +790 -0
- data/app/assets/stylesheets/incline/select2.css +484 -0
- data/app/controllers/incline/access_groups_controller.rb +127 -0
- data/app/controllers/incline/access_test_controller.rb +30 -0
- data/app/controllers/incline/account_activations_controller.rb +28 -0
- data/app/controllers/incline/application_controller.rb +11 -0
- data/app/controllers/incline/contact_controller.rb +34 -0
- data/app/controllers/incline/password_resets_controller.rb +113 -0
- data/app/controllers/incline/security_controller.rb +100 -0
- data/app/controllers/incline/sessions_controller.rb +50 -0
- data/app/controllers/incline/users_controller.rb +304 -0
- data/app/controllers/incline/welcome_controller.rb +19 -0
- data/app/helpers/incline/.keep +0 -0
- data/app/mailers/incline/application_mailer_base.rb +11 -0
- data/app/mailers/incline/contact_form.rb +19 -0
- data/app/mailers/incline/user_mailer.rb +45 -0
- data/app/models/incline/access_group.rb +121 -0
- data/app/models/incline/access_group_group_member.rb +12 -0
- data/app/models/incline/access_group_user_member.rb +10 -0
- data/app/models/incline/action_group.rb +12 -0
- data/app/models/incline/action_security.rb +222 -0
- data/app/models/incline/contact_message.rb +37 -0
- data/app/models/incline/disable_info.rb +20 -0
- data/app/models/incline/password_reset.rb +14 -0
- data/app/models/incline/password_reset_request.rb +14 -0
- data/app/models/incline/user.rb +437 -0
- data/app/models/incline/user_login_history.rb +30 -0
- data/app/views/incline/access_groups/_details.json.jbuilder +10 -0
- data/app/views/incline/access_groups/_form.html.erb +19 -0
- data/app/views/incline/access_groups/_list.html.erb +60 -0
- data/app/views/incline/access_groups/_messages.json.jbuilder +6 -0
- data/app/views/incline/access_groups/edit.html.erb +2 -0
- data/app/views/incline/access_groups/index.html.erb +6 -0
- data/app/views/incline/access_groups/index.json.jbuilder +16 -0
- data/app/views/incline/access_groups/new.html.erb +2 -0
- data/app/views/incline/access_groups/show.html.erb +9 -0
- data/app/views/incline/access_groups/show.json.jbuilder +11 -0
- data/app/views/incline/contact/new.html.erb +22 -0
- data/app/views/incline/contact_form/contact.html.erb +16 -0
- data/app/views/incline/contact_form/contact.text.erb +13 -0
- data/app/views/incline/password_resets/edit.html.erb +16 -0
- data/app/views/incline/password_resets/new.html.erb +12 -0
- data/app/views/incline/security/_details.json.jbuilder +7 -0
- data/app/views/incline/security/_form.html.erb +20 -0
- data/app/views/incline/security/_list.html.erb +89 -0
- data/app/views/incline/security/_messages.json.jbuilder +6 -0
- data/app/views/incline/security/edit.html.erb +2 -0
- data/app/views/incline/security/index.html.erb +6 -0
- data/app/views/incline/security/index.json.jbuilder +16 -0
- data/app/views/incline/security/show.html.erb +31 -0
- data/app/views/incline/security/show.json.jbuilder +11 -0
- data/app/views/incline/sessions/new.html.erb +26 -0
- data/app/views/incline/user_mailer/account_activation.html.erb +7 -0
- data/app/views/incline/user_mailer/account_activation.text.erb +6 -0
- data/app/views/incline/user_mailer/invalid_password_reset.html.erb +3 -0
- data/app/views/incline/user_mailer/invalid_password_reset.text.erb +5 -0
- data/app/views/incline/user_mailer/password_reset.html.erb +8 -0
- data/app/views/incline/user_mailer/password_reset.text.erb +7 -0
- data/app/views/incline/users/_details.json.jbuilder +32 -0
- data/app/views/incline/users/_form.html.erb +21 -0
- data/app/views/incline/users/_list.html.erb +102 -0
- data/app/views/incline/users/_messages.json.jbuilder +6 -0
- data/app/views/incline/users/disable_confirm.html.erb +19 -0
- data/app/views/incline/users/edit.html.erb +5 -0
- data/app/views/incline/users/index.html.erb +6 -0
- data/app/views/incline/users/index.json.jbuilder +16 -0
- data/app/views/incline/users/new.html.erb +5 -0
- data/app/views/incline/users/show.html.erb +12 -0
- data/app/views/incline/users/show.json.jbuilder +11 -0
- data/app/views/incline/welcome/home.html.erb +5 -0
- data/app/views/layouts/application.html.erb +1 -0
- data/app/views/layouts/incline/_account_menu.html.erb +18 -0
- data/app/views/layouts/incline/_app_menu_anon.html.erb +1 -0
- data/app/views/layouts/incline/_app_menu_authenticated.html.erb +1 -0
- data/app/views/layouts/incline/_footer.html.erb +13 -0
- data/app/views/layouts/incline/_header.html.erb +21 -0
- data/app/views/layouts/incline/_html_mailer.html.erb +5 -0
- data/app/views/layouts/incline/_incline_app.html.erb +25 -0
- data/app/views/layouts/incline/_messages.html.erb +3 -0
- data/app/views/layouts/incline/_shim.html.erb +3 -0
- data/app/views/layouts/incline/_text_mailer.text.erb +1 -0
- data/app/views/layouts/incline/application.html.erb +1 -0
- data/app/views/layouts/mailer.html.erb +2 -0
- data/app/views/layouts/mailer.text.erb +2 -0
- data/bin/rails +12 -0
- data/bin/test_scaffold.sh +10 -0
- data/config/routes.rb +61 -0
- data/db/migrate/20170511230126_create_incline_users.rb +26 -0
- data/db/migrate/20170515003052_create_incline_access_groups.rb +10 -0
- data/db/migrate/20170515003221_create_incline_user_login_histories.rb +12 -0
- data/db/migrate/20170515150908_create_incline_access_group_user_members.rb +11 -0
- data/db/migrate/20170515151058_create_incline_access_group_group_members.rb +11 -0
- data/db/migrate/20170517193432_add_comments_to_incline_user.rb +5 -0
- data/db/migrate/20170622132700_create_incline_action_securities.rb +16 -0
- data/db/migrate/20170622172712_create_incline_action_groups.rb +11 -0
- data/db/migrate/20170622195742_add_non_standard_to_action_security.rb +5 -0
- data/db/migrate/20170622230422_add_visible_to_action_security.rb +5 -0
- data/db/seeds.rb +81 -0
- data/exe/new_incline_app +42 -0
- data/lib/generators/incline/install_generator.rb +259 -0
- data/lib/generators/incline/templates/_app_menu_anon.html.erb +1 -0
- data/lib/generators/incline/templates/_app_menu_authenticated.html.erb +1 -0
- data/lib/generators/incline/templates/incline_application.css +17 -0
- data/lib/generators/incline/templates/incline_application.html.erb +1 -0
- data/lib/generators/incline/templates/incline_application.js +12 -0
- data/lib/generators/incline/templates/incline_database.yml +25 -0
- data/lib/generators/incline/templates/incline_email.yml +20 -0
- data/lib/generators/incline/templates/incline_mailer.html.erb +2 -0
- data/lib/generators/incline/templates/incline_mailer.text.erb +2 -0
- data/lib/generators/incline/templates/incline_users.yml +64 -0
- data/lib/generators/incline/templates/incline_version.rb +3 -0
- data/lib/incline/auth_engine_base.rb +52 -0
- data/lib/incline/data_tables_request.rb +336 -0
- data/lib/incline/date_time_formats.rb +6 -0
- data/lib/incline/engine.rb +212 -0
- data/lib/incline/errors.rb +15 -0
- data/lib/incline/extensions/action_controller_base.rb +526 -0
- data/lib/incline/extensions/action_mailer_base.rb +66 -0
- data/lib/incline/extensions/action_view_base.rb +489 -0
- data/lib/incline/extensions/active_record_base.rb +308 -0
- data/lib/incline/extensions/application.rb +137 -0
- data/lib/incline/extensions/application_configuration.rb +50 -0
- data/lib/incline/extensions/connection_adapter.rb +55 -0
- data/lib/incline/extensions/date_time_value.rb +123 -0
- data/lib/incline/extensions/date_value.rb +77 -0
- data/lib/incline/extensions/decimal_value.rb +55 -0
- data/lib/incline/extensions/erb_scaffold_generator.rb +31 -0
- data/lib/incline/extensions/float_value.rb +59 -0
- data/lib/incline/extensions/form_builder.rb +617 -0
- data/lib/incline/extensions/integer_value.rb +54 -0
- data/lib/incline/extensions/jbuilder_generator.rb +38 -0
- data/lib/incline/extensions/jbuilder_template.rb +39 -0
- data/lib/incline/extensions/main_app.rb +40 -0
- data/lib/incline/extensions/numeric.rb +63 -0
- data/lib/incline/extensions/object.rb +31 -0
- data/lib/incline/extensions/resource_route_generator.rb +53 -0
- data/lib/incline/extensions/session.rb +113 -0
- data/lib/incline/extensions/string.rb +50 -0
- data/lib/incline/extensions/test_case.rb +764 -0
- data/lib/incline/extensions/time_zone_converter.rb +40 -0
- data/lib/incline/global_status.rb +236 -0
- data/lib/incline/helpers/route_hash_formatter.rb +46 -0
- data/lib/incline/json_log_formatter.rb +96 -0
- data/lib/incline/json_logger.rb +17 -0
- data/lib/incline/log.rb +153 -0
- data/lib/incline/number_formats.rb +17 -0
- data/lib/incline/recaptcha.rb +346 -0
- data/lib/incline/user_manager.rb +212 -0
- data/lib/incline/validators/email_validator.rb +45 -0
- data/lib/incline/validators/ip_address_validator.rb +32 -0
- data/lib/incline/validators/recaptcha_validator.rb +37 -0
- data/lib/incline/validators/safe_name_validator.rb +31 -0
- data/lib/incline/version.rb +3 -0
- data/lib/incline/work_path.rb +75 -0
- data/lib/incline.rb +197 -0
- data/lib/tasks/incline_tasks.rake +4 -0
- data/lib/templates/erb/scaffold/_form.html.erb +43 -0
- data/lib/templates/erb/scaffold/_list.html.erb +81 -0
- data/lib/templates/erb/scaffold/edit.html.erb +1 -0
- data/lib/templates/erb/scaffold/index.html.erb +6 -0
- data/lib/templates/erb/scaffold/new.html.erb +1 -0
- data/lib/templates/erb/scaffold/show.html.erb +34 -0
- data/lib/templates/jbuilder/scaffold/_details.json.jbuilder +20 -0
- data/lib/templates/jbuilder/scaffold/index.json.jbuilder +16 -0
- data/lib/templates/jbuilder/scaffold/show.json.jbuilder +16 -0
- data/lib/templates/rails/scaffold_controller/controller.rb +128 -0
- data/test/controllers/incline/access_groups_controller_test.rb +65 -0
- data/test/controllers/incline/access_test_controller_test.rb +53 -0
- data/test/controllers/incline/contact_controller_test.rb +32 -0
- data/test/controllers/incline/security_controller_test.rb +39 -0
- data/test/controllers/incline/welcome_controller_test.rb +16 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +12 -0
- data/test/dummy/app/assets/stylesheets/application.css +17 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/mailers/.keep +0 -0
- data/test/dummy/app/models/.keep +0 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +1 -0
- data/test/dummy/app/views/layouts/incline/_app_menu_anon.html.erb +1 -0
- data/test/dummy/app/views/layouts/incline/_app_menu_authenticated.html.erb +1 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +2 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +2 -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/bin/setup +29 -0
- data/test/dummy/config/application.rb +38 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +34 -0
- data/test/dummy/config/email.yml +24 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +45 -0
- data/test/dummy/config/environments/production.rb +85 -0
- data/test/dummy/config/environments/test.rb +44 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -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 +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +6 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/schema.rb +108 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/extensions/action_controller_base_extensions_test.rb +21 -0
- data/test/extensions/action_mailer_base_extensions_test.rb +20 -0
- data/test/extensions/action_view_base_extensions_test.rb +267 -0
- data/test/extensions/active_record_extensions_test.rb +173 -0
- data/test/extensions/application_configuration_extensions_test.rb +46 -0
- data/test/extensions/application_extensions_test.rb +23 -0
- data/test/extensions/connection_adapter_extensions_test.rb +54 -0
- data/test/extensions/date_time_value_extensions_test.rb +104 -0
- data/test/extensions/date_value_extensions_test.rb +102 -0
- data/test/extensions/decimal_value_extensions_test.rb +85 -0
- data/test/extensions/erb_scaffold_generator_extensions_test.rb +17 -0
- data/test/extensions/float_value_extensions_test.rb +78 -0
- data/test/extensions/form_builder_extensions_test.rb +28 -0
- data/test/extensions/integer_value_extensions_test.rb +78 -0
- data/test/extensions/jbuilder_generator_extensions_test.rb +21 -0
- data/test/extensions/jbuilder_template_extensions_test.rb +47 -0
- data/test/extensions/main_app_extensions_test.rb +55 -0
- data/test/extensions/numeric_extensions_test.rb +76 -0
- data/test/extensions/object_extensions_test.rb +104 -0
- data/test/extensions/session_extensions_test.rb +69 -0
- data/test/extensions/string_extensions_test.rb +32 -0
- data/test/extensions/test_case_extensions_test.rb +538 -0
- data/test/extensions/time_zone_converter_extensions_test.rb +10 -0
- data/test/fixtures/incline/access_group_group_members.yml +1 -0
- data/test/fixtures/incline/access_group_user_members.yml +1 -0
- data/test/fixtures/incline/access_groups.yml +13 -0
- data/test/fixtures/incline/action_groups.yml +6 -0
- data/test/fixtures/incline/action_securities.yml +18 -0
- data/test/fixtures/incline/user_login_histories.yml +1 -0
- data/test/fixtures/incline/users.yml +64 -0
- data/test/incline_test.rb +63 -0
- data/test/integration/incline/users_edit_test.rb +180 -0
- data/test/integration/incline/users_login_test.rb +105 -0
- data/test/integration/incline/users_signup_test.rb +147 -0
- data/test/integration/navigation_test.rb +11 -0
- data/test/lib/data_tables_request_test.rb +245 -0
- data/test/lib/date_time_formats_test.rb +111 -0
- data/test/lib/global_status_test.rb +89 -0
- data/test/lib/json_log_formatter_test.rb +43 -0
- data/test/lib/log_test.rb +36 -0
- data/test/lib/recaptcha_test.rb +75 -0
- data/test/lib/user_manager_test.rb +47 -0
- data/test/lib/work_path_test.rb +18 -0
- data/test/models/incline/access_group_group_member_test.rb +30 -0
- data/test/models/incline/access_group_test.rb +60 -0
- data/test/models/incline/access_group_user_member_test.rb +29 -0
- data/test/models/incline/action_group_test.rb +27 -0
- data/test/models/incline/action_security_test.rb +176 -0
- data/test/models/incline/contact_message_test.rb +66 -0
- data/test/models/incline/disable_info_test.rb +29 -0
- data/test/models/incline/password_reset_request_test.rb +35 -0
- data/test/models/incline/password_reset_test.rb +51 -0
- data/test/models/incline/user_login_history_test.rb +31 -0
- data/test/models/incline/user_test.rb +91 -0
- data/test/test_helper.rb +42 -0
- data/test/validators/email_validator_test.rb +102 -0
- data/test/validators/ip_address_validator_test.rb +107 -0
- data/test/validators/recaptcha_validator_test.rb +57 -0
- data/test/validators/safe_name_validator_test.rb +101 -0
- metadata +584 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
|
2
|
+
|
|
3
|
+
one:
|
|
4
|
+
name: George Jetson
|
|
5
|
+
email: george@example.com
|
|
6
|
+
activated: true
|
|
7
|
+
enabled: true
|
|
8
|
+
system_admin: false
|
|
9
|
+
password_digest: <%= Incline::User::digest 'Password123' %>
|
|
10
|
+
activated_at: <%= 20.days.ago %>
|
|
11
|
+
last_login_at: <%= 5.hours.ago %>
|
|
12
|
+
last_login_ip: 10.20.30.40
|
|
13
|
+
|
|
14
|
+
two:
|
|
15
|
+
name: Fred Flintstone
|
|
16
|
+
email: fred@example.com
|
|
17
|
+
activated: true
|
|
18
|
+
enabled: true
|
|
19
|
+
system_admin: false
|
|
20
|
+
password_digest: <%= Incline::User::digest 'Password123' %>
|
|
21
|
+
activated_at: <%= 9.days.ago %>
|
|
22
|
+
last_login_at: <%= 3.days.ago %>
|
|
23
|
+
last_login_ip: 1:2::3:4
|
|
24
|
+
|
|
25
|
+
admin:
|
|
26
|
+
name: Sys Admin
|
|
27
|
+
email: admin@example.com
|
|
28
|
+
activated: true
|
|
29
|
+
enabled: true
|
|
30
|
+
system_admin: true
|
|
31
|
+
password_digest: <%= Incline::User::digest 'Password123' %>
|
|
32
|
+
activated_at: <%= 30.days.ago %>
|
|
33
|
+
|
|
34
|
+
basic:
|
|
35
|
+
name: Basic User
|
|
36
|
+
email: basic@example.com
|
|
37
|
+
activated: true
|
|
38
|
+
enabled: true
|
|
39
|
+
system_admin: false
|
|
40
|
+
password_digest: <%= Incline::User::digest 'Password123' %>
|
|
41
|
+
activated_at: <%= 10.days.ago %>
|
|
42
|
+
|
|
43
|
+
disabled:
|
|
44
|
+
name: Bad User
|
|
45
|
+
email: bad@example.com
|
|
46
|
+
activated: true
|
|
47
|
+
enabled: false
|
|
48
|
+
system_admin: false
|
|
49
|
+
password_digest: <%= Incline::User::digest 'Password123' %>
|
|
50
|
+
disabled_by: admin@example.com
|
|
51
|
+
disabled_at: <%= 30.days.ago %>
|
|
52
|
+
activated_at: <%= 31.days.ago %>
|
|
53
|
+
|
|
54
|
+
recently_disabled:
|
|
55
|
+
name: Recent User
|
|
56
|
+
email: recent@example.com
|
|
57
|
+
activated: true
|
|
58
|
+
enabled: false
|
|
59
|
+
system_admin: false
|
|
60
|
+
password_digest: <%= Incline::User::digest 'Password123' %>
|
|
61
|
+
disabled_by: admin@example.com
|
|
62
|
+
disabled_at: <%= 1.days.ago %>
|
|
63
|
+
activated_at: <%= 3.days.ago %>
|
|
64
|
+
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class InclineTest < ActiveSupport::TestCase
|
|
4
|
+
|
|
5
|
+
test 'modules and classes loaded' do
|
|
6
|
+
assert Object.const_defined? :Incline
|
|
7
|
+
|
|
8
|
+
assert Incline.const_defined? :NotLoggedIn
|
|
9
|
+
assert Incline.const_defined? :NotAuthorized
|
|
10
|
+
assert Incline.const_defined? :InvalidApiCall
|
|
11
|
+
|
|
12
|
+
assert Incline.const_defined? :VERSION
|
|
13
|
+
assert Incline.const_defined? :Log
|
|
14
|
+
assert Incline.const_defined? :Engine
|
|
15
|
+
assert Incline.const_defined? :WorkPath
|
|
16
|
+
assert Incline.const_defined? :JsonLogFormatter
|
|
17
|
+
assert Incline.const_defined? :JsonLogger
|
|
18
|
+
assert Incline.const_defined? :GlobalStatus
|
|
19
|
+
assert Incline.const_defined? :DataTablesRequest
|
|
20
|
+
assert Incline.const_defined? :DateTimeFormats
|
|
21
|
+
assert Incline.const_defined? :NumberFormats
|
|
22
|
+
assert Incline.const_defined? :AuthEngineBase
|
|
23
|
+
assert Incline.const_defined? :UserManager
|
|
24
|
+
assert Incline.const_defined? :Recaptcha
|
|
25
|
+
assert Incline::Recaptcha.const_defined? :Tag
|
|
26
|
+
|
|
27
|
+
assert Incline.const_defined? :Extensions
|
|
28
|
+
assert Incline::Extensions.const_defined? :Object
|
|
29
|
+
assert Incline::Extensions.const_defined? :Numeric
|
|
30
|
+
assert Incline::Extensions.const_defined? :String
|
|
31
|
+
assert Incline::Extensions.const_defined? :Application
|
|
32
|
+
assert Incline::Extensions.const_defined? :ApplicationConfiguration
|
|
33
|
+
assert Incline::Extensions.const_defined? :ActiveRecordBase
|
|
34
|
+
assert Incline::Extensions.const_defined? :ConnectionAdapter
|
|
35
|
+
assert Incline::Extensions.const_defined? :MainApp
|
|
36
|
+
assert Incline::Extensions.const_defined? :ActionControllerBase
|
|
37
|
+
assert Incline::Extensions.const_defined? :ActionMailerBase
|
|
38
|
+
assert Incline::Extensions.const_defined? :ActionViewBase
|
|
39
|
+
assert Incline::Extensions.const_defined? :Session
|
|
40
|
+
assert Incline::Extensions::Session.const_defined? :Common
|
|
41
|
+
assert Incline::Extensions::Session.const_defined? :Controller
|
|
42
|
+
assert Incline::Extensions.const_defined? :ResourceRouteGenerator
|
|
43
|
+
assert Incline::Extensions.const_defined? :ErbScaffoldGenerator
|
|
44
|
+
assert Incline::Extensions.const_defined? :JbuilderGenerator
|
|
45
|
+
assert Incline::Extensions.const_defined? :JbuilderTemplate
|
|
46
|
+
assert Incline::Extensions.const_defined? :TestCase
|
|
47
|
+
assert Incline::Extensions.const_defined? :IntegerValue
|
|
48
|
+
assert Incline::Extensions.const_defined? :FloatValue
|
|
49
|
+
assert Incline::Extensions.const_defined? :TimeZoneConverter
|
|
50
|
+
assert Incline::Extensions.const_defined? :DateTimeValue
|
|
51
|
+
assert Incline::Extensions.const_defined? :DateValue
|
|
52
|
+
assert Incline::Extensions.const_defined? :DecimalValue
|
|
53
|
+
assert Incline::Extensions.const_defined? :FormBuilder
|
|
54
|
+
|
|
55
|
+
assert Incline.const_defined? :EmailValidator
|
|
56
|
+
assert Incline.const_defined? :SafeNameValidator
|
|
57
|
+
assert Incline.const_defined? :IpAddressValidator
|
|
58
|
+
assert Incline.const_defined? :RecaptchaValidator
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Incline
|
|
4
|
+
class UsersEditTest < ActionDispatch::IntegrationTest
|
|
5
|
+
def setup
|
|
6
|
+
@user = incline_users(:one)
|
|
7
|
+
@other_user = incline_users(:two)
|
|
8
|
+
@admin = incline_users(:admin)
|
|
9
|
+
@disabled_user = incline_users(:disabled)
|
|
10
|
+
@recent_user = incline_users(:recently_disabled)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# only admin can view random users.
|
|
14
|
+
access_tests_for :show,
|
|
15
|
+
controller: 'users',
|
|
16
|
+
url_helper: 'incline.user_path(@user)',
|
|
17
|
+
allow_anon: false,
|
|
18
|
+
allow_any_user: false,
|
|
19
|
+
allow_admin: true
|
|
20
|
+
|
|
21
|
+
# and users can view themselves.
|
|
22
|
+
test 'user should be able to show self' do
|
|
23
|
+
log_in_as @user
|
|
24
|
+
get incline.user_path(@user)
|
|
25
|
+
assert_response :success
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# only admin can edit random users.
|
|
29
|
+
access_tests_for :edit,
|
|
30
|
+
controller: 'users',
|
|
31
|
+
url_helper: 'incline.edit_user_path(@user)',
|
|
32
|
+
allow_anon: false,
|
|
33
|
+
allow_any_user: false,
|
|
34
|
+
allow_admin: true
|
|
35
|
+
|
|
36
|
+
# and users can edit themselves.
|
|
37
|
+
test 'user can edit self' do
|
|
38
|
+
log_in_as @user
|
|
39
|
+
get incline.edit_user_path(@user)
|
|
40
|
+
assert_template 'incline/users/edit'
|
|
41
|
+
assert_select 'form[action=?]', incline.user_path(@user)
|
|
42
|
+
assert_select '#user_name'
|
|
43
|
+
assert_select '#user_email'
|
|
44
|
+
assert_select '#user_password'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# only admin can update random users.
|
|
48
|
+
access_tests_for :update,
|
|
49
|
+
controller: 'users',
|
|
50
|
+
url_helper: 'incline.user_path(@user)',
|
|
51
|
+
allow_anon: false,
|
|
52
|
+
allow_any_user: false,
|
|
53
|
+
allow_admin: true,
|
|
54
|
+
update_params: '{ user: { name: @user.name, email: @user.email } }',
|
|
55
|
+
success: '(system_admin? ? incline.users_path : incline.user_path(@user))'
|
|
56
|
+
|
|
57
|
+
# and users can update themselves.
|
|
58
|
+
test 'user can update self' do
|
|
59
|
+
log_in_as @user
|
|
60
|
+
patch incline.user_path(@user), user: { name: @user.name, email: @user.email }
|
|
61
|
+
assert_redirected_to incline.user_path(@user)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# only admin can destroy users.
|
|
66
|
+
access_tests_for :destroy,
|
|
67
|
+
controller: 'users',
|
|
68
|
+
url_helper: 'incline.user_path(@disabled_user)',
|
|
69
|
+
allow_anon: false,
|
|
70
|
+
allow_any_user: false,
|
|
71
|
+
allow_admin: true,
|
|
72
|
+
success: 'incline.users_path'
|
|
73
|
+
|
|
74
|
+
test 'user count should change when destroyed' do
|
|
75
|
+
log_in_as @admin
|
|
76
|
+
assert_difference 'Incline::User.count', -1 do
|
|
77
|
+
delete incline.user_path(@disabled_user)
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
test 'should not destroy recently disabled users' do
|
|
82
|
+
log_in_as @admin
|
|
83
|
+
assert_no_difference 'Incline::User.count' do
|
|
84
|
+
delete incline.user_path(@recent_user)
|
|
85
|
+
end
|
|
86
|
+
assert_redirected_to incline.users_path
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
test 'should not destroy active users' do
|
|
90
|
+
log_in_as @admin
|
|
91
|
+
assert_no_difference 'Incline::User.count' do
|
|
92
|
+
delete incline.user_path(@user)
|
|
93
|
+
end
|
|
94
|
+
assert_redirected_to incline.users_path
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# only admin can disable users.
|
|
98
|
+
access_tests_for :disable_confirm,
|
|
99
|
+
controller: 'users',
|
|
100
|
+
url_helper: 'incline.disable_user_path(@user)',
|
|
101
|
+
method: 'get',
|
|
102
|
+
allow_anon: false,
|
|
103
|
+
allow_any_user: false,
|
|
104
|
+
allow_admin: true
|
|
105
|
+
|
|
106
|
+
access_tests_for :disable,
|
|
107
|
+
controller: 'users',
|
|
108
|
+
url_helper: 'incline.disable_user_path(@user)',
|
|
109
|
+
method: 'patch',
|
|
110
|
+
allow_anon: false,
|
|
111
|
+
allow_any_user: false,
|
|
112
|
+
allow_admin: true,
|
|
113
|
+
success: 'incline.users_path',
|
|
114
|
+
disable_params: { disable_info: { reason: 'As a test' } }
|
|
115
|
+
|
|
116
|
+
test 'enabled count should change when disabled' do
|
|
117
|
+
log_in_as @admin
|
|
118
|
+
assert_difference 'Incline::User.enabled.count', -1 do
|
|
119
|
+
patch incline.disable_user_path(@other_user), disable_info: { reason: 'As a test' }
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
access_tests_for :enable,
|
|
124
|
+
controller: 'users',
|
|
125
|
+
url_helper: 'incline.enable_user_path(@recent_user)',
|
|
126
|
+
method: 'patch',
|
|
127
|
+
allow_anon: false,
|
|
128
|
+
allow_any_user: false,
|
|
129
|
+
allow_admin: true,
|
|
130
|
+
success: 'incline.users_path'
|
|
131
|
+
|
|
132
|
+
test 'enabled cound should change when enabled' do
|
|
133
|
+
log_in_as @admin
|
|
134
|
+
assert_difference 'Incline::User.enabled.count', 1 do
|
|
135
|
+
patch incline.enable_user_path(@recent_user)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
test 'should not allow the admin attribute to be edited via web' do
|
|
143
|
+
log_in_as @other_user
|
|
144
|
+
assert_not @other_user.system_admin?
|
|
145
|
+
patch incline.user_path(@other_user), user: { password: 'password', password_confirmation: 'password', system_admin: '1' }
|
|
146
|
+
assert_not @other_user.reload.system_admin?
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
test 'unsuccessful edit' do
|
|
150
|
+
log_in_as(@user)
|
|
151
|
+
get incline.edit_user_path(@user)
|
|
152
|
+
assert_template 'incline/users/edit'
|
|
153
|
+
patch incline.user_path(@user), user: { name: '', email: 'foo@invalid', password: 'foo', password_confirmation: 'baz' }
|
|
154
|
+
assert_template 'incline/users/edit'
|
|
155
|
+
assert_select 'div#error_explanation'
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
test 'successful edit with friendly forwarding' do
|
|
159
|
+
get incline.edit_user_path(@user)
|
|
160
|
+
assert_redirected_to incline.login_path
|
|
161
|
+
log_in_as(@user)
|
|
162
|
+
assert_redirected_to incline.edit_user_path(@user)
|
|
163
|
+
name = 'Foo Bar'
|
|
164
|
+
email = 'foo@bar.com'
|
|
165
|
+
pwd = ''
|
|
166
|
+
patch incline.user_path(@user), user: { name: name, email: email, password: pwd, password_confirmation: pwd }
|
|
167
|
+
assert_not flash.empty?
|
|
168
|
+
assert_redirected_to @user
|
|
169
|
+
@user.reload
|
|
170
|
+
assert_equal name, @user.name
|
|
171
|
+
assert_equal email, @user.email
|
|
172
|
+
pwd = 'new-password'
|
|
173
|
+
patch incline.user_path(@user), user: { name: name, email: email, password: pwd, password_confirmation: pwd }
|
|
174
|
+
assert_not flash.empty?
|
|
175
|
+
assert_redirected_to @user
|
|
176
|
+
@user.reload
|
|
177
|
+
assert @user.authenticate(pwd)
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Incline
|
|
4
|
+
class UsersLoginTest < ActionDispatch::IntegrationTest
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@routes = Incline::Engine.routes
|
|
8
|
+
@user = Incline::User.find_by(email: valid_creds[:email])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.valid_creds
|
|
12
|
+
{
|
|
13
|
+
email: 'george@example.com',
|
|
14
|
+
password: 'Password123'
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def valid_creds
|
|
19
|
+
self.class.valid_creds
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# to get the login form, you must not be logged in.
|
|
23
|
+
access_tests_for :new,
|
|
24
|
+
controller: 'sessions',
|
|
25
|
+
url_helper: 'incline.login_path',
|
|
26
|
+
allow_anon: true,
|
|
27
|
+
allow_any_user: false,
|
|
28
|
+
allow_admin: false,
|
|
29
|
+
failure: 'incline.user_path(user)'
|
|
30
|
+
|
|
31
|
+
# to login, you must not be logged in.
|
|
32
|
+
access_tests_for :create,
|
|
33
|
+
controller: 'sessions',
|
|
34
|
+
url_helper: 'incline.login_path',
|
|
35
|
+
allow_anon: true,
|
|
36
|
+
allow_any_user: false,
|
|
37
|
+
allow_admin: false,
|
|
38
|
+
create_params: { session: valid_creds },
|
|
39
|
+
success: 'incline.user_path(@user)', # instance var
|
|
40
|
+
failure: 'incline.user_path(user)' # local var
|
|
41
|
+
|
|
42
|
+
test 'login template' do
|
|
43
|
+
get incline.login_path
|
|
44
|
+
assert_template 'incline/sessions/new'
|
|
45
|
+
assert_select '#session_email'
|
|
46
|
+
assert_select '#session_password'
|
|
47
|
+
assert_select 'a[href=?]', incline.signup_path
|
|
48
|
+
assert_select 'a[href=?]', incline.new_password_reset_path
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
test 'login with invalid information' do
|
|
52
|
+
get incline.login_path
|
|
53
|
+
assert_template 'incline/sessions/new'
|
|
54
|
+
post incline.login_path, session: { email: '', password: '' }
|
|
55
|
+
assert_template 'incline/sessions/new'
|
|
56
|
+
assert_not flash.empty?
|
|
57
|
+
get main_app.root_path
|
|
58
|
+
assert flash.empty?
|
|
59
|
+
assert_select 'a[href=?]', incline.login_path
|
|
60
|
+
assert_select 'a[href=?]', incline.logout_path, count: 0
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
test 'login with valid information followed by logout' do
|
|
64
|
+
get incline.login_path
|
|
65
|
+
post incline.login_path, session: valid_creds
|
|
66
|
+
assert is_logged_in?
|
|
67
|
+
assert_redirected_to @user
|
|
68
|
+
follow_redirect!
|
|
69
|
+
assert_template 'incline/users/show'
|
|
70
|
+
assert_select 'a[href=?]', incline.login_path, count: 0
|
|
71
|
+
assert_select 'a[href=?]', incline.logout_path
|
|
72
|
+
assert_select 'a[href=?]', incline.user_path(@user)
|
|
73
|
+
delete incline.logout_path
|
|
74
|
+
assert_not is_logged_in?
|
|
75
|
+
assert_redirected_to main_app.root_path
|
|
76
|
+
# simulate clicking 'log out' a second time.
|
|
77
|
+
delete incline.logout_path
|
|
78
|
+
assert_redirected_to main_app.root_path
|
|
79
|
+
follow_redirect!
|
|
80
|
+
assert_select 'a[href=?]', incline.login_path
|
|
81
|
+
assert_select 'a[href=?]', incline.logout_path, count: 0
|
|
82
|
+
assert_select 'a[href=?]', incline.user_path(@user), count: 0
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
test 'login with disabled account' do
|
|
86
|
+
@user = incline_users(:disabled)
|
|
87
|
+
get incline.login_path
|
|
88
|
+
post incline.login_path, session: { email: @user.email, password: valid_creds[:password] }
|
|
89
|
+
assert_template 'incline/sessions/new'
|
|
90
|
+
assert_not flash.empty?
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
test 'login with remembering' do
|
|
94
|
+
log_in_as @user, remember_me: '1'
|
|
95
|
+
assert_not_nil cookies[user_token_cookie.to_s]
|
|
96
|
+
assert_equal assigns(:user).remember_token, cookies[user_token_cookie.to_s]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
test 'login without remembering' do
|
|
100
|
+
log_in_as @user, remember_me: '0'
|
|
101
|
+
assert_nil cookies[user_token_cookie.to_s]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Incline
|
|
4
|
+
class UsersSignupTest < ActionDispatch::IntegrationTest
|
|
5
|
+
|
|
6
|
+
def setup
|
|
7
|
+
@routes = Incline::Engine.routes
|
|
8
|
+
@valid_params = self.class.valid_params
|
|
9
|
+
ActionMailer::Base.deliveries.clear
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.valid_params
|
|
13
|
+
{
|
|
14
|
+
name: 'Valid User',
|
|
15
|
+
email: 'valid@example.com',
|
|
16
|
+
password: 'Password321',
|
|
17
|
+
password_confirmation: 'Password321',
|
|
18
|
+
recaptcha: Incline::Recaptcha::DISABLED
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# should not allow when logged in (except admins can create other users)
|
|
23
|
+
access_tests_for :new,
|
|
24
|
+
controller: 'users',
|
|
25
|
+
url_helper: 'incline.signup_path',
|
|
26
|
+
allow_anon: true,
|
|
27
|
+
allow_any_user: false,
|
|
28
|
+
allow_admin: true,
|
|
29
|
+
failure: 'incline.user_path(user)'
|
|
30
|
+
|
|
31
|
+
access_tests_for :create,
|
|
32
|
+
controller: 'users',
|
|
33
|
+
url_helper: 'incline.signup_path',
|
|
34
|
+
allow_anon: true,
|
|
35
|
+
allow_any_user: false,
|
|
36
|
+
allow_admin: true,
|
|
37
|
+
success: '(system_admin? ? incline.users_path : main_app.root_path)',
|
|
38
|
+
failure: 'incline.user_path(user)',
|
|
39
|
+
create_params: { user: valid_params }
|
|
40
|
+
|
|
41
|
+
test 'signup template' do
|
|
42
|
+
get incline.signup_path
|
|
43
|
+
assert_template 'incline/users/new'
|
|
44
|
+
assert_select 'form[action=?]', incline.signup_path
|
|
45
|
+
assert_select '#user_name'
|
|
46
|
+
assert_select '#user_email'
|
|
47
|
+
assert_select '#user_password'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
test 'require name' do
|
|
51
|
+
# no name
|
|
52
|
+
get incline.signup_path
|
|
53
|
+
assert_no_difference 'Incline::User.count' do
|
|
54
|
+
post incline.signup_path, user: @valid_params.merge(name: '')
|
|
55
|
+
end
|
|
56
|
+
assert_template 'incline/users/new'
|
|
57
|
+
assert_select 'div#error_explanation', /Name can't be blank/
|
|
58
|
+
assert_select 'div.field_with_errors input[id=?]', 'user_name'
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
test 'require valid email' do
|
|
62
|
+
# no email
|
|
63
|
+
get incline.signup_path
|
|
64
|
+
assert_no_difference 'Incline::User.count' do
|
|
65
|
+
post incline.signup_path, user: @valid_params.merge(email: '')
|
|
66
|
+
end
|
|
67
|
+
assert_template 'incline/users/new'
|
|
68
|
+
assert_select 'div#error_explanation', /Email can't be blank/
|
|
69
|
+
assert_select 'div.field_with_errors input[id=?]', 'user_email'
|
|
70
|
+
|
|
71
|
+
# invalid email
|
|
72
|
+
assert_no_difference 'Incline::User.count' do
|
|
73
|
+
post incline.signup_path, user: @valid_params.merge(email: 'admin@localhost')
|
|
74
|
+
end
|
|
75
|
+
assert_template 'incline/users/new'
|
|
76
|
+
assert_select 'div#error_explanation', /Email is not a valid email address/
|
|
77
|
+
assert_select 'div.field_with_errors input[id=?]', 'user_email'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
test 'require password and confirmation' do
|
|
81
|
+
# no password
|
|
82
|
+
get incline.signup_path
|
|
83
|
+
assert_no_difference 'Incline::User.count' do
|
|
84
|
+
post incline.signup_path, user: @valid_params.merge(password: '')
|
|
85
|
+
end
|
|
86
|
+
assert_template 'incline/users/new'
|
|
87
|
+
assert_select 'div#error_explanation', /Password can't be blank/
|
|
88
|
+
assert_select 'div.field_with_errors input[id=?]', 'user_password'
|
|
89
|
+
|
|
90
|
+
# no password confirmation
|
|
91
|
+
assert_no_difference 'Incline::User.count' do
|
|
92
|
+
post incline.signup_path, user: @valid_params.merge(password_confirmation: '')
|
|
93
|
+
end
|
|
94
|
+
assert_template 'incline/users/new'
|
|
95
|
+
assert_select 'div#error_explanation', /Password confirmation doesn't match Password/
|
|
96
|
+
assert_select 'div.field_with_errors input[id=?]', 'user_password_confirmation'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
test 'require reCAPTCHA' do
|
|
100
|
+
# no reCAPTCHA challenge
|
|
101
|
+
get incline.signup_path
|
|
102
|
+
assert_no_difference 'Incline::User.count' do
|
|
103
|
+
post incline.signup_path, user: @valid_params.merge(recaptcha: '')
|
|
104
|
+
end
|
|
105
|
+
assert_template 'incline/users/new'
|
|
106
|
+
assert_select 'div#error_explanation', /Recaptcha can't be blank/
|
|
107
|
+
|
|
108
|
+
# invalid reCAPTCHA challenge
|
|
109
|
+
assert_no_difference 'Incline::User.count' do
|
|
110
|
+
post incline.signup_path, user: @valid_params.merge(recaptcha: '0.0.0.0')
|
|
111
|
+
end
|
|
112
|
+
assert_template 'incline/users/new'
|
|
113
|
+
assert_select 'div#error_explanation', /Requires reCAPTCHA challenge to be completed/
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
test 'valid signup' do
|
|
117
|
+
# valid signup
|
|
118
|
+
get incline.signup_path
|
|
119
|
+
assert_difference 'Incline::User.count', 1 do
|
|
120
|
+
post incline.signup_path, user: @valid_params
|
|
121
|
+
end
|
|
122
|
+
assert_not is_logged_in?
|
|
123
|
+
assert_equal 1, ActionMailer::Base.deliveries.size
|
|
124
|
+
user = assigns(:user)
|
|
125
|
+
assert_not user.activated?
|
|
126
|
+
token = user.activation_token
|
|
127
|
+
assert_not_nil token
|
|
128
|
+
|
|
129
|
+
# try logging in before activation.
|
|
130
|
+
log_in_as user, password: @valid_params[:password]
|
|
131
|
+
assert_not is_logged_in?
|
|
132
|
+
|
|
133
|
+
# invalid activation token
|
|
134
|
+
get incline.edit_account_activation_url('invalid-token', email: user.email)
|
|
135
|
+
assert_not is_logged_in?
|
|
136
|
+
assert_not user.reload.activated?
|
|
137
|
+
|
|
138
|
+
# valid activation token
|
|
139
|
+
get incline.edit_account_activation_url(token, email: user.email)
|
|
140
|
+
assert user.reload.activated?
|
|
141
|
+
follow_redirect!
|
|
142
|
+
assert_template 'incline/users/show'
|
|
143
|
+
assert is_logged_in?
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
end
|
|
147
|
+
end
|