tb_core 0.9.17
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 +15 -0
- data/MIT-LICENSE +20 -0
- data/README.markdown +60 -0
- data/Rakefile +28 -0
- data/app/assets/images/back_disabled.jpg +0 -0
- data/app/assets/images/back_enabled.jpg +0 -0
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/images/forward_disabled.jpg +0 -0
- data/app/assets/images/forward_enabled.jpg +0 -0
- data/app/assets/images/sort_asc.png +0 -0
- data/app/assets/images/sort_asc_disabled.png +0 -0
- data/app/assets/images/sort_both.png +0 -0
- data/app/assets/images/sort_desc.png +0 -0
- data/app/assets/images/sort_desc_disabled.png +0 -0
- data/app/assets/images/spud/admin/down_arrow.gif +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_0073ea_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_666666_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_ff0084_256x240.png +0 -0
- data/app/assets/images/spud/admin/flick/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/images/spud/admin/spud_logo.png +0 -0
- data/app/assets/images/spud/admin/spud_logo@2x.png +0 -0
- data/app/assets/images/spud/admin/up_arrow.gif +0 -0
- data/app/assets/images/spud/admin/users_thumb.png +0 -0
- data/app/assets/javascripts/spud/admin/application.js +133 -0
- data/app/assets/javascripts/spud/admin/dashboard.js +80 -0
- data/app/assets/javascripts/spud/admin/date_picker.js +56 -0
- data/app/assets/javascripts/spud/admin/editor.js +167 -0
- data/app/assets/javascripts/spud/admin/jquery.dataTables.min.js +151 -0
- data/app/assets/javascripts/spud/admin/preinit.js +1 -0
- data/app/assets/javascripts/spud/password_resets.js +2 -0
- data/app/assets/libs/bootstrap/css/bootstrap-responsive.css +1088 -0
- data/app/assets/libs/bootstrap/css/bootstrap.css +5893 -0
- data/app/assets/libs/bootstrap/img/glyphicons-halflings-white.png +0 -0
- data/app/assets/libs/bootstrap/img/glyphicons-halflings.png +0 -0
- data/app/assets/libs/bootstrap/js/bootstrap.js +2025 -0
- data/app/assets/libs/datepicker/css/datepicker.css +223 -0
- data/app/assets/libs/datepicker/js/bootstrap-datepicker.js +779 -0
- data/app/assets/libs/datepicker/less/datepicker.less +122 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_0073ea_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_454545_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_666666_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_ff0084_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/images/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/libs/jquery-ui/css/flick/jquery-ui-1.9.1.custom.css +297 -0
- data/app/assets/libs/jquery-ui/css/flick/jquery-ui-1.9.1.custom.min.css +5 -0
- data/app/assets/libs/jquery-ui/js/jquery-ui-1.9.1.custom.js +4870 -0
- data/app/assets/libs/jquery-ui/js/jquery-ui-1.9.1.custom.min.js +6 -0
- data/app/assets/libs/tiny_mce/jquery.tinymce.js +1 -0
- data/app/assets/libs/tiny_mce/langs/en.js +1 -0
- data/app/assets/libs/tiny_mce/license.txt +504 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/css/advhr.css +5 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/editor_plugin_src.js +57 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/js/rule.js +43 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advhr/rule.htm +58 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/css/advimage.css +13 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/editor_plugin_src.js +50 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/image.htm +235 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/img/sample.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/js/image.js +462 -0
- data/app/assets/libs/tiny_mce/plugins/advimage/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/css/advlink.css +8 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/editor_plugin_src.js +61 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/js/advlink.js +539 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlink/link.htm +338 -0
- data/app/assets/libs/tiny_mce/plugins/advlist/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/advlist/editor_plugin_src.js +176 -0
- data/app/assets/libs/tiny_mce/plugins/autolink/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/autolink/editor_plugin_src.js +174 -0
- data/app/assets/libs/tiny_mce/plugins/autoresize/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -0
- data/app/assets/libs/tiny_mce/plugins/contextmenu/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/contextmenu/editor_plugin_src.js +161 -0
- data/app/assets/libs/tiny_mce/plugins/directionality/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/directionality/editor_plugin_src.js +82 -0
- data/app/assets/libs/tiny_mce/plugins/example/dialog.htm +22 -0
- data/app/assets/libs/tiny_mce/plugins/example/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/example/editor_plugin_src.js +84 -0
- data/app/assets/libs/tiny_mce/plugins/example/img/example.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/example/js/dialog.js +19 -0
- data/app/assets/libs/tiny_mce/plugins/example/langs/en.js +3 -0
- data/app/assets/libs/tiny_mce/plugins/example/langs/en_dlg.js +3 -0
- data/app/assets/libs/tiny_mce/plugins/example_dependency/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -0
- data/app/assets/libs/tiny_mce/plugins/iespell/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/iespell/editor_plugin_src.js +54 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/editor_plugin_src.js +699 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css +90 -0
- data/app/assets/libs/tiny_mce/plugins/inlinepopups/template.htm +387 -0
- data/app/assets/libs/tiny_mce/plugins/layer/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/layer/editor_plugin_src.js +262 -0
- data/app/assets/libs/tiny_mce/plugins/lists/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/lists/editor_plugin_src.js +951 -0
- data/app/assets/libs/tiny_mce/plugins/media/css/media.css +17 -0
- data/app/assets/libs/tiny_mce/plugins/media/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/media/editor_plugin_src.js +890 -0
- data/app/assets/libs/tiny_mce/plugins/media/js/embed.js +73 -0
- data/app/assets/libs/tiny_mce/plugins/media/js/media.js +470 -0
- data/app/assets/libs/tiny_mce/plugins/media/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/media/media.htm +922 -0
- data/app/assets/libs/tiny_mce/plugins/media/moxieplayer.swf +0 -0
- data/app/assets/libs/tiny_mce/plugins/paste/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/paste/editor_plugin_src.js +871 -0
- data/app/assets/libs/tiny_mce/plugins/paste/js/pastetext.js +36 -0
- data/app/assets/libs/tiny_mce/plugins/paste/js/pasteword.js +51 -0
- data/app/assets/libs/tiny_mce/plugins/paste/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/paste/pastetext.htm +27 -0
- data/app/assets/libs/tiny_mce/plugins/paste/pasteword.htm +21 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/css/content.css +1 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/editor_plugin_src.js +436 -0
- data/app/assets/libs/tiny_mce/plugins/spellchecker/img/wline.gif +0 -0
- data/app/assets/libs/tiny_mce/plugins/style/css/props.css +14 -0
- data/app/assets/libs/tiny_mce/plugins/style/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/style/editor_plugin_src.js +71 -0
- data/app/assets/libs/tiny_mce/plugins/style/js/props.js +709 -0
- data/app/assets/libs/tiny_mce/plugins/style/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/style/props.htm +845 -0
- data/app/assets/libs/tiny_mce/plugins/style/readme.txt +19 -0
- data/app/assets/libs/tiny_mce/plugins/table/cell.htm +180 -0
- data/app/assets/libs/tiny_mce/plugins/table/css/cell.css +17 -0
- data/app/assets/libs/tiny_mce/plugins/table/css/row.css +25 -0
- data/app/assets/libs/tiny_mce/plugins/table/css/table.css +13 -0
- data/app/assets/libs/tiny_mce/plugins/table/editor_plugin.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/table/editor_plugin_src.js +1428 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/cell.js +319 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/merge_cells.js +27 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/row.js +237 -0
- data/app/assets/libs/tiny_mce/plugins/table/js/table.js +489 -0
- data/app/assets/libs/tiny_mce/plugins/table/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/plugins/table/merge_cells.htm +32 -0
- data/app/assets/libs/tiny_mce/plugins/table/row.htm +158 -0
- data/app/assets/libs/tiny_mce/plugins/table/table.htm +188 -0
- data/app/assets/libs/tiny_mce/plugins/tableDropdown/editor_plugin.js +140 -0
- data/app/assets/libs/tiny_mce/themes/advanced/about.htm +52 -0
- data/app/assets/libs/tiny_mce/themes/advanced/anchor.htm +26 -0
- data/app/assets/libs/tiny_mce/themes/advanced/charmap.htm +55 -0
- data/app/assets/libs/tiny_mce/themes/advanced/color_picker.htm +70 -0
- data/app/assets/libs/tiny_mce/themes/advanced/editor_template.js +1 -0
- data/app/assets/libs/tiny_mce/themes/advanced/editor_template_src.js +1467 -0
- data/app/assets/libs/tiny_mce/themes/advanced/image.htm +80 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/colorpicker.jpg +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/flash.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/icons.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/iframe.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/pagebreak.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/quicktime.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/realmedia.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/shockwave.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/trans.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/video.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/img/windowsmedia.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/about.js +73 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/anchor.js +44 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/charmap.js +363 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/color_picker.js +345 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/image.js +251 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/link.js +153 -0
- data/app/assets/libs/tiny_mce/themes/advanced/js/source_editor.js +78 -0
- data/app/assets/libs/tiny_mce/themes/advanced/langs/en.js +1 -0
- data/app/assets/libs/tiny_mce/themes/advanced/langs/en_dlg.js +1 -0
- data/app/assets/libs/tiny_mce/themes/advanced/link.htm +57 -0
- data/app/assets/libs/tiny_mce/themes/advanced/shortcuts.htm +47 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/content.css +51 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/dialog.css +118 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/buttons.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/items.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/menu_check.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/progress.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/img/tabs.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/default/ui.css +215 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/content.css +25 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/dialog.css +106 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/highcontrast/ui.css +102 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/content.css +49 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/dialog.css +118 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png +0 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui.css +218 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui_black.css +8 -0
- data/app/assets/libs/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css +5 -0
- data/app/assets/libs/tiny_mce/themes/advanced/source_editor.htm +25 -0
- data/app/assets/libs/tiny_mce/themes/simple/editor_template.js +1 -0
- data/app/assets/libs/tiny_mce/themes/simple/editor_template_src.js +84 -0
- data/app/assets/libs/tiny_mce/themes/simple/img/icons.gif +0 -0
- data/app/assets/libs/tiny_mce/themes/simple/langs/en.js +1 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/default/content.css +25 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/default/ui.css +32 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/content.css +17 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png +0 -0
- data/app/assets/libs/tiny_mce/themes/simple/skins/o2k7/ui.css +35 -0
- data/app/assets/libs/tiny_mce/tiny_mce.js +1 -0
- data/app/assets/libs/tiny_mce/tiny_mce_popup.js +5 -0
- data/app/assets/libs/tiny_mce/tiny_mce_src.js +16753 -0
- data/app/assets/libs/tiny_mce/utils/editable_selects.js +70 -0
- data/app/assets/libs/tiny_mce/utils/form_utils.js +210 -0
- data/app/assets/libs/tiny_mce/utils/mctabs.js +162 -0
- data/app/assets/libs/tiny_mce/utils/validate.js +252 -0
- data/app/assets/stylesheets/spud/admin/application.css +480 -0
- data/app/assets/stylesheets/spud/admin/jquery-ui.css +568 -0
- data/app/assets/stylesheets/spud/admin/settings.css +4 -0
- data/app/assets/stylesheets/spud/admin/users.css +4 -0
- data/app/assets/stylesheets/spud/forms.css +108 -0
- data/app/assets/stylesheets/spud/login/application.css +302 -0
- data/app/assets/stylesheets/spud/login.css +58 -0
- data/app/assets/stylesheets/spud/password_resets.css +4 -0
- data/app/assets/stylesheets/spud/setup.css +4 -0
- data/app/assets/stylesheets/spud/sitemaps.css +4 -0
- data/app/assets/stylesheets/spud/user_sessions.css +4 -0
- data/app/assets/stylesheets/spud/users.css +4 -0
- data/app/controllers/spud/admin/application_controller.rb +61 -0
- data/app/controllers/spud/admin/dashboard_controller.rb +34 -0
- data/app/controllers/spud/admin/users_controller.rb +109 -0
- data/app/controllers/spud/application_controller.rb +89 -0
- data/app/controllers/spud/password_resets_controller.rb +50 -0
- data/app/controllers/spud/setup_controller.rb +21 -0
- data/app/controllers/spud/sitemaps_controller.rb +8 -0
- data/app/controllers/spud/user_sessions_controller.rb +33 -0
- data/app/controllers/spud/users_controller.rb +45 -0
- data/app/helpers/spud/admin/application_helper.rb +54 -0
- data/app/helpers/spud/application_helper.rb +22 -0
- data/app/helpers/spud/password_resets_helper.rb +2 -0
- data/app/mailers/spud/core_mailer.rb +12 -0
- data/app/models/concerns/spud_authentication.rb +10 -0
- data/app/models/spud_admin_permission.rb +5 -0
- data/app/models/spud_user.rb +26 -0
- data/app/models/spud_user_session.rb +3 -0
- data/app/models/spud_user_setting.rb +6 -0
- data/app/views/layouts/spud/admin/application.html.erb +72 -0
- data/app/views/layouts/spud/admin/detail.html.erb +31 -0
- data/app/views/layouts/spud/login/application.html.erb +17 -0
- data/app/views/layouts/spud/setup.html.erb +47 -0
- data/app/views/spud/admin/dashboard/index.html.erb +18 -0
- data/app/views/spud/admin/users/_edit.html.erb +14 -0
- data/app/views/spud/admin/users/_form.html.erb +90 -0
- data/app/views/spud/admin/users/_new.html.erb +15 -0
- data/app/views/spud/admin/users/edit.html.erb +3 -0
- data/app/views/spud/admin/users/index.html.erb +42 -0
- data/app/views/spud/admin/users/new.html.erb +3 -0
- data/app/views/spud/admin/users/show.html.erb +12 -0
- data/app/views/spud/core_mailer/forgot_password_notification.html.erb +14 -0
- data/app/views/spud/core_mailer/forgot_password_notification.text.erb +10 -0
- data/app/views/spud/password_resets/edit.html.erb +25 -0
- data/app/views/spud/password_resets/new.html.erb +14 -0
- data/app/views/spud/setup/index.html.erb +43 -0
- data/app/views/spud/sitemaps/show.xml.builder +12 -0
- data/app/views/spud/user_sessions/new.html.erb +27 -0
- data/app/views/spud/users/_form.html.erb +60 -0
- data/app/views/spud/users/settings.html.erb +12 -0
- data/config/routes.rb +18 -0
- data/db/migrate/20111214161011_create_spud_admin_permissions.rb +11 -0
- data/db/migrate/20111214161146_create_spud_users.rb +29 -0
- data/db/migrate/20120327124229_add_time_zone_to_spud_user.rb +6 -0
- data/db/migrate/20120328235431_add_scope_to_spud_admin_permissions.rb +6 -0
- data/db/migrate/20120329174000_create_spud_user_settings.rb +11 -0
- data/lib/spud_core/belongs_to_app.rb +59 -0
- data/lib/spud_core/configuration.rb +58 -0
- data/lib/spud_core/engine.rb +55 -0
- data/lib/spud_core/searchable.rb +11 -0
- data/lib/spud_core/test_files.rb +25 -0
- data/lib/spud_core/version.rb +5 -0
- data/lib/tasks/spud_core_tasks.rake +4 -0
- data/lib/tb_core.rb +6 -0
- data/spec/controllers/spud/admin/application_controller_spec.rb +49 -0
- data/spec/controllers/spud/admin/dashboard_controller_spec.rb +129 -0
- data/spec/controllers/spud/admin/users_controller_spec.rb +194 -0
- data/spec/controllers/spud/application_controller_spec.rb +6 -0
- data/spec/controllers/spud/password_reset_controller_spec.rb +93 -0
- data/spec/controllers/spud/setup_controller_spec.rb +56 -0
- data/spec/controllers/spud/sitemap_controllers_spec.rb +20 -0
- data/spec/controllers/spud/user_sessions_controller_spec.rb +51 -0
- data/spec/controllers/spud/users_controller_spec.rb +69 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +15 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +58 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +15 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/schema.rb +59 -0
- data/spec/dummy/log/development.log +39 -0
- data/spec/dummy/log/test.log +37811 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/helpers/spud/admin/application_helper_spec.rb +150 -0
- data/spec/helpers/spud/application_helper_spec.rb +66 -0
- data/spec/lib/spud_core/configuration_spec.rb +34 -0
- data/spec/models/spud_user_spec.rb +27 -0
- data/spec/spec_helper.rb +40 -0
- data/spec/support/authlogic_helper.rb +2 -0
- metadata +652 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Spud
|
|
2
|
+
module Core
|
|
3
|
+
module TestFiles
|
|
4
|
+
class << self
|
|
5
|
+
def load_all
|
|
6
|
+
load_specs
|
|
7
|
+
load_factories
|
|
8
|
+
load_support
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def load_specs
|
|
12
|
+
Dir[File.join(File.expand_path('../../../', __FILE__), "spec/**/*_spec.rb")].each {|f| require f}
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def load_factories
|
|
16
|
+
Dir[File.join(File.expand_path('../../../', __FILE__), "factories/*")].each {|f| require f}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def load_support
|
|
20
|
+
Dir[File.join(File.expand_path('../../../', __FILE__), "spec/support/**/*.rb")].each {|f| require f}
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
data/lib/tb_core.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spud::Admin::ApplicationController do
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
before :each do
|
|
7
|
+
activate_authlogic
|
|
8
|
+
@user = FactoryGirl.create(:spud_user)
|
|
9
|
+
@session = SpudUserSession.create(@user)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe :require_admin_user do
|
|
13
|
+
controller(Spud::Admin::ApplicationController) do
|
|
14
|
+
def index
|
|
15
|
+
render :nothing => true
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
it "should respond successfully if the current user is a super admin" do
|
|
19
|
+
@user.update_attribute(:super_admin, true)
|
|
20
|
+
get :index
|
|
21
|
+
|
|
22
|
+
response.should be_success
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should respond successfully if the current user has admin permissions" do
|
|
26
|
+
@user.spud_admin_permissions.create(:name => "pages", :access => true)
|
|
27
|
+
get :index
|
|
28
|
+
|
|
29
|
+
response.should be_success
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should redirect to the login if the current user is not logged in" do
|
|
33
|
+
@session.destroy
|
|
34
|
+
get :index
|
|
35
|
+
|
|
36
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should redirect to the root for a user without administrative priviledges" do
|
|
40
|
+
@user.super_admin = false
|
|
41
|
+
@user.spud_admin_permissions = []
|
|
42
|
+
@user.save
|
|
43
|
+
get :index
|
|
44
|
+
|
|
45
|
+
response.should redirect_to(root_url)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spud::Admin::DashboardController do
|
|
4
|
+
before(:all) do
|
|
5
|
+
Spud::Core.configure do |config|
|
|
6
|
+
config.admin_applications = [
|
|
7
|
+
{name: "Blog", thumbnail: "/url/to/image", url: "/url/to/app", order: 0},
|
|
8
|
+
{name: "Settings", thumbnail: "/url/to/image", url: "/url/to/app", order: 0},
|
|
9
|
+
{name: "Pages", thumbnail: "/url/to/image", url: "/url/to/app", order: 0}
|
|
10
|
+
]
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
before(:each) do
|
|
15
|
+
activate_authlogic
|
|
16
|
+
@user = FactoryGirl.create(:spud_user)
|
|
17
|
+
SpudUserSession.create(@user)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe :index do
|
|
21
|
+
it "should display applications the current user has access to given that the current user is not a super admin" do
|
|
22
|
+
@user.super_admin = false
|
|
23
|
+
@user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
|
|
24
|
+
@user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Pages", :access => true))
|
|
25
|
+
@user.save
|
|
26
|
+
get :index
|
|
27
|
+
|
|
28
|
+
assigns(:admin_applications).collect{|app| app[:name] }.should =~ @user.spud_admin_permissions.collect{|permission| permission.name }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should not display applications the current user does not have access to given that the current user is not a super admin" do
|
|
32
|
+
@user.super_admin = false
|
|
33
|
+
@user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
|
|
34
|
+
@user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Pages", :access => true))
|
|
35
|
+
@user.save
|
|
36
|
+
get :index
|
|
37
|
+
|
|
38
|
+
assigns(:admin_applications).collect{|app| app[:name] }.should_not include(:settings)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should display all the applications despite the users permissions given the current user is a super admin" do
|
|
42
|
+
@user.super_admin = true
|
|
43
|
+
@user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
|
|
44
|
+
@user.save
|
|
45
|
+
get :index
|
|
46
|
+
|
|
47
|
+
assigns(:admin_applications).collect{|app| app[:name] }.should =~ Spud::Core.admin_applications.collect{|app| app[:name] }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should display applications in order of user preference if available" do
|
|
51
|
+
@user.super_admin = true
|
|
52
|
+
@user.save
|
|
53
|
+
@user.spud_user_settings.create(:key => "app_order",:value => "Pages,Settings")
|
|
54
|
+
get :index
|
|
55
|
+
|
|
56
|
+
assigns(:admin_applications).collect{|app| app[:name] }.should =~ ["Pages","Settings","Blog"]
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
describe :switch do
|
|
62
|
+
before(:each) do
|
|
63
|
+
Spud::Core.configure do |config|
|
|
64
|
+
config.site_name = "Test Site"
|
|
65
|
+
config.multisite_mode_enabled = true
|
|
66
|
+
end
|
|
67
|
+
@user.super_admin = true
|
|
68
|
+
@user.spud_admin_permissions.build(FactoryGirl.attributes_for(:spud_admin_permission, :name => "Blog", :access => true))
|
|
69
|
+
@user.save
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "when multisite select is not set" do
|
|
73
|
+
it "should clear the session admin site" do
|
|
74
|
+
get :switch, :multisite_select => nil
|
|
75
|
+
session[:admin_site].should == 0
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "should redirect to the referer" do
|
|
79
|
+
get :switch, :multisite_select => nil
|
|
80
|
+
response.should be_redirect
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
context "when multisite select is set" do
|
|
85
|
+
context "and the selected site is configured" do
|
|
86
|
+
before(:each) do
|
|
87
|
+
Spud::Core.configure do |config|
|
|
88
|
+
config.site_name = "Test Site"
|
|
89
|
+
config.multisite_mode_enabled = true
|
|
90
|
+
config.multisite_config = [{:hosts => ["test.host"], :site_name =>"Site B", :site_id => 1}]
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
# Spud::Core.stubs(:multisite_config).returns([{:site_id => 1}])
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it "should set the session's admin site" do
|
|
97
|
+
get :switch, :multisite_select => 1
|
|
98
|
+
session[:admin_site].should == 1
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should redirect" do
|
|
103
|
+
get :switch, :multisite_select => 1
|
|
104
|
+
response.should be_redirect
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context "and the selected site is not configured" do
|
|
109
|
+
before(:each) do
|
|
110
|
+
Spud::Core.configure do |config|
|
|
111
|
+
config.site_name = "Test Site"
|
|
112
|
+
config.multisite_mode_enabled = true
|
|
113
|
+
config.multisite_config = []
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should set a flash error" do
|
|
118
|
+
get :switch, :multisite_select => 1
|
|
119
|
+
flash[:error].should_not be_blank
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it "should redirect" do
|
|
123
|
+
get :switch, :multisite_select => 1
|
|
124
|
+
response.should be_redirect
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spud::Admin::UsersController do
|
|
4
|
+
before(:each) do
|
|
5
|
+
activate_authlogic
|
|
6
|
+
@user = SpudUserSession.create(FactoryGirl.build(:spud_user, :super_admin => true))
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe :index do
|
|
10
|
+
it "should return an array of users" do
|
|
11
|
+
2.times {|x| FactoryGirl.create(:spud_user) }
|
|
12
|
+
get :index
|
|
13
|
+
|
|
14
|
+
assigns(:users).count.should be > 1
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should not return any users if there are no users" do
|
|
18
|
+
get :index
|
|
19
|
+
|
|
20
|
+
assigns(:users).count.should == 1 # the currently logged in user is the only user
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should not allow access to users with NO permissions" do
|
|
24
|
+
SpudUserSession.create(FactoryGirl.build(:spud_user, :super_admin => false))
|
|
25
|
+
get :index
|
|
26
|
+
|
|
27
|
+
response.should redirect_to(root_url)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should allow access to users with the correct permissions" do
|
|
31
|
+
u = FactoryGirl.create(:spud_user, :super_admin => false)
|
|
32
|
+
u.spud_admin_permissions << FactoryGirl.build(:spud_admin_permission, :name => "Users", :access => true)
|
|
33
|
+
SpudUserSession.create(u)
|
|
34
|
+
get :index
|
|
35
|
+
|
|
36
|
+
response.should be_success
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "should not allow access to users without permission and redirect to root_url if the user has no permissions" do
|
|
40
|
+
u = FactoryGirl.create(:spud_user, :super_admin => false)
|
|
41
|
+
u.spud_admin_permissions << []
|
|
42
|
+
SpudUserSession.create(u)
|
|
43
|
+
get :index
|
|
44
|
+
|
|
45
|
+
response.should redirect_to(root_url)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should not allow access to users without permission and redirect to root_url if the users has no other admin modules" do
|
|
49
|
+
u = FactoryGirl.create(:spud_user, :super_admin => false)
|
|
50
|
+
u.spud_admin_permissions << [
|
|
51
|
+
FactoryGirl.build(:spud_admin_permission, :name => "Users", :access => false)
|
|
52
|
+
]
|
|
53
|
+
SpudUserSession.create(u)
|
|
54
|
+
get :index
|
|
55
|
+
|
|
56
|
+
response.should redirect_to(root_url)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should not allow access to users without permission and redirect to admin_root if the users has other admin modules" do
|
|
60
|
+
u = FactoryGirl.create(:spud_user, :super_admin => false)
|
|
61
|
+
u.spud_admin_permissions << [
|
|
62
|
+
FactoryGirl.build(:spud_admin_permission, :name => "Users", :access => false),
|
|
63
|
+
FactoryGirl.build(:spud_admin_permission, :name => "App2", :access => true)
|
|
64
|
+
]
|
|
65
|
+
SpudUserSession.create(u)
|
|
66
|
+
get :index
|
|
67
|
+
|
|
68
|
+
response.should redirect_to(spud_admin_root_url)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
describe :show do
|
|
73
|
+
it "should respond successfully" do
|
|
74
|
+
user = FactoryGirl.create(:spud_user)
|
|
75
|
+
get :show, :id => user.id
|
|
76
|
+
|
|
77
|
+
response.should be_success
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "should show the user" do
|
|
81
|
+
user = FactoryGirl.create(:spud_user)
|
|
82
|
+
get :show, :id => user.id
|
|
83
|
+
|
|
84
|
+
assigns(:user).id.should == user.id
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
describe :new do
|
|
89
|
+
it "should respond successfully" do
|
|
90
|
+
get :new, :format => :js
|
|
91
|
+
|
|
92
|
+
response.should be_success
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should build a user object for the form" do
|
|
96
|
+
get :new, :format => :js
|
|
97
|
+
|
|
98
|
+
assigns(:user).should_not be_blank
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
describe :create do
|
|
103
|
+
context "HTML format" do
|
|
104
|
+
it "should create a new user with a valid form submission" do
|
|
105
|
+
lambda {
|
|
106
|
+
post :create, :spud_user => FactoryGirl.attributes_for(:spud_user)
|
|
107
|
+
}.should change(SpudUser, :count).by(1)
|
|
108
|
+
response.should be_redirect
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "should not create a user with an invalid form entry" do
|
|
112
|
+
lambda {
|
|
113
|
+
post :create, :spud_user => FactoryGirl.attributes_for(:spud_user, :email => nil)
|
|
114
|
+
}.should_not change(SpudUser, :count)
|
|
115
|
+
flash[:error].should_not be_blank
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context "JS format" do
|
|
120
|
+
it "should create a new user with a valid form submission" do
|
|
121
|
+
lambda {
|
|
122
|
+
post :create, :spud_user => FactoryGirl.attributes_for(:spud_user), :format => :js
|
|
123
|
+
}.should change(SpudUser, :count).by(1)
|
|
124
|
+
response.should be_success
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should not create a user with an invalid form entry" do
|
|
128
|
+
lambda {
|
|
129
|
+
post :create, :spud_user => FactoryGirl.attributes_for(:spud_user, :email => nil), :format => :js
|
|
130
|
+
}.should_not change(SpudUser, :count)
|
|
131
|
+
response.should_not be_success
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
describe :edit do
|
|
138
|
+
context "HTML format" do
|
|
139
|
+
it "should load the correct user for the edit form" do
|
|
140
|
+
user = FactoryGirl.create(:spud_user)
|
|
141
|
+
get :edit, :id => user.id
|
|
142
|
+
|
|
143
|
+
assigns(:user).id.should == user.id
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
context "JS format" do
|
|
148
|
+
it "should load the correct user for the edit form" do
|
|
149
|
+
user = FactoryGirl.create(:spud_user)
|
|
150
|
+
get :edit, :id => user.id, :format => :js
|
|
151
|
+
|
|
152
|
+
assigns(:user).id.should == user.id
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
describe :update do
|
|
160
|
+
it "should update the email when the first name attribute is changed" do
|
|
161
|
+
user = FactoryGirl.create(:spud_user)
|
|
162
|
+
new_name = "Adam"
|
|
163
|
+
lambda {
|
|
164
|
+
put :update, :id => user.id, :spud_user => user.attributes.merge!(:first_name => new_name)
|
|
165
|
+
user.reload
|
|
166
|
+
}.should change(user, :first_name).to(new_name)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it "should redirect to the admin users after a successful update" do
|
|
170
|
+
user = FactoryGirl.create(:spud_user)
|
|
171
|
+
put :update, :id => user.id, :spud_user => user.attributes.merge!(:first_name => "Adam")
|
|
172
|
+
|
|
173
|
+
response.should redirect_to(spud_admin_users_url)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
describe :destroy do
|
|
178
|
+
it "should destroy the user" do
|
|
179
|
+
user = FactoryGirl.create(:spud_user)
|
|
180
|
+
lambda {
|
|
181
|
+
delete :destroy, :id => user.id
|
|
182
|
+
}.should change(SpudUser, :count).by(-1)
|
|
183
|
+
response.should be_redirect
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "should destroy the user with the wrong id" do
|
|
187
|
+
user = FactoryGirl.create(:spud_user)
|
|
188
|
+
lambda {
|
|
189
|
+
delete :destroy, :id => "23532"
|
|
190
|
+
}.should_not change(SpudUser, :count)
|
|
191
|
+
response.should be_redirect
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spud::PasswordResetsController do
|
|
4
|
+
let(:user) { FactoryGirl.build(:spud_user, :id => 1) }
|
|
5
|
+
|
|
6
|
+
context :get do
|
|
7
|
+
describe :new do
|
|
8
|
+
it "should return success" do
|
|
9
|
+
get :new
|
|
10
|
+
response.should be_success
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe :edit do
|
|
15
|
+
context "with a valid id" do
|
|
16
|
+
before(:all) do
|
|
17
|
+
SpudUser.stubs(:find_using_perishable_token).returns(user)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should render the edit form" do
|
|
21
|
+
get :edit, :id => 1
|
|
22
|
+
response.should be_success
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context "with an invalid id" do
|
|
27
|
+
before(:all) do
|
|
28
|
+
SpudUser.stubs(:find_using_perishable_token).returns(nil)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should redirect to the login form" do
|
|
32
|
+
get :edit, :id => user.id
|
|
33
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context :post do
|
|
40
|
+
|
|
41
|
+
describe :create do
|
|
42
|
+
context "with a valid user email address submitted" do
|
|
43
|
+
before(:each) do
|
|
44
|
+
user.perishable_token = "jfdlsafhbkvabuadfbds"
|
|
45
|
+
SpudUser.stubs(:find_by_email).returns(user)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should trigger the password notificiation" do
|
|
49
|
+
Spud::CoreMailer.expects(:forgot_password_notification).returns(stub(:deliver))
|
|
50
|
+
post :create, :email => user.email
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should redirect to the login form" do
|
|
54
|
+
post :create, :email => user.email
|
|
55
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
context "with an invalid user email address submitted" do
|
|
60
|
+
before(:each) do
|
|
61
|
+
SpudUser.stubs(:find_by_email).returns(nil)
|
|
62
|
+
end
|
|
63
|
+
it "should re-render the password reset form" do
|
|
64
|
+
post :create, :email => "invalid@email.com"
|
|
65
|
+
response.should render_template("new")
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe :update do
|
|
71
|
+
let(:valid_data) { {:id => user.id, :spud_user => {:password => "password", :password_confirmation => "password"}}}
|
|
72
|
+
let(:invalid_data) { {:id => user.id, :spud_user => {:password => "password", :password_confirmation => "drowssap"}}}
|
|
73
|
+
|
|
74
|
+
before(:each) do
|
|
75
|
+
SpudUser.stubs(:find_using_perishable_token).returns(user)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
context "with valid password entry" do
|
|
79
|
+
it "should save and redirect to the login form" do
|
|
80
|
+
post :update, valid_data
|
|
81
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "with an invalid password entry" do
|
|
86
|
+
it "should re-render the password form" do
|
|
87
|
+
post :update, invalid_data
|
|
88
|
+
response.should render_template("edit")
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spud::SetupController do
|
|
4
|
+
|
|
5
|
+
describe :index do
|
|
6
|
+
it "should be successful" do
|
|
7
|
+
get :index
|
|
8
|
+
|
|
9
|
+
response.should be_success
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it "should have a page thumbnail" do
|
|
13
|
+
get :index
|
|
14
|
+
|
|
15
|
+
assigns(:page_thumbnail).should_not be_blank
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should have a page name" do
|
|
19
|
+
get :index
|
|
20
|
+
|
|
21
|
+
assigns(:page_name).should_not be_blank
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should set a flash error message when a spud user exists" do
|
|
25
|
+
SpudUser.stubs(:count).returns(1)
|
|
26
|
+
get :index
|
|
27
|
+
|
|
28
|
+
flash[:error].should_not be_blank
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should redirect to the admin login form when there is already a user" do
|
|
32
|
+
SpudUser.stubs(:count).returns(1)
|
|
33
|
+
get :index
|
|
34
|
+
|
|
35
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should create a new user" do
|
|
39
|
+
lambda {
|
|
40
|
+
post :index, FactoryGirl.attributes_for(:spud_user)
|
|
41
|
+
}.should change(SpudUser, :count).by(1)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should redirect to the admin login form when first admin user has been created" do
|
|
45
|
+
post :index, FactoryGirl.attributes_for(:spud_user)
|
|
46
|
+
|
|
47
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should display an error if the user is invalid" do
|
|
51
|
+
post :index, FactoryGirl.attributes_for(:spud_user, :email => nil)
|
|
52
|
+
|
|
53
|
+
flash[:error].should_not be_blank
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spud::SitemapsController do
|
|
4
|
+
describe :show do
|
|
5
|
+
it "should return the sitemap urls" do
|
|
6
|
+
Spud::Core.sitemap_urls = [
|
|
7
|
+
"http://www.google.com",
|
|
8
|
+
"http://www.example.com"
|
|
9
|
+
]
|
|
10
|
+
get :show, :format => :xml
|
|
11
|
+
|
|
12
|
+
assigns(:sitemap_urls).should == Spud::Core.sitemap_urls
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should only respond to an XML format" do
|
|
16
|
+
get :show
|
|
17
|
+
response.response_code.should == 406
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
describe Spud::UserSessionsController do
|
|
3
|
+
before(:each) do
|
|
4
|
+
# activate_authlogic
|
|
5
|
+
# SpudUserSession.create(FactoryGirl.build(:spud_user))
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe :new do
|
|
9
|
+
it "should redirect to setup url if no users exist" do
|
|
10
|
+
get :new
|
|
11
|
+
response.should redirect_to(spud_setup_url)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it "should render login form if users do exist" do
|
|
15
|
+
u = FactoryGirl.create(:spud_user)
|
|
16
|
+
u.save
|
|
17
|
+
get :new
|
|
18
|
+
response.should be_success
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe :create do
|
|
23
|
+
it "should rerender form when login is invalid" do
|
|
24
|
+
post :create
|
|
25
|
+
response.should be_success
|
|
26
|
+
end
|
|
27
|
+
it "should redirect to root url if login is valid" do
|
|
28
|
+
u = FactoryGirl.create(:spud_user,:login => "testuser")
|
|
29
|
+
u.save
|
|
30
|
+
user_session = {:login => "testuser", :password => "password"}
|
|
31
|
+
post :create,:spud_user_session => user_session
|
|
32
|
+
response.should redirect_to(root_url)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe :destroy do
|
|
37
|
+
it "should redirect to login after logout when no referer" do
|
|
38
|
+
activate_authlogic
|
|
39
|
+
SpudUserSession.create(FactoryGirl.build(:spud_user))
|
|
40
|
+
delete :destroy
|
|
41
|
+
response.should redirect_to(new_spud_user_session_url)
|
|
42
|
+
end
|
|
43
|
+
it "should redirect to previous page after logout" do
|
|
44
|
+
request.env["HTTP_REFERER"] = "/"
|
|
45
|
+
activate_authlogic
|
|
46
|
+
SpudUserSession.create(FactoryGirl.build(:spud_user))
|
|
47
|
+
delete :destroy
|
|
48
|
+
response.should redirect_to("/")
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|