Commit 00299ccc37e71f5a8f31b510c1f5b617aa9dfca0
1 parent
f9ed0cce
Exists in
master
and in
22 other branches
rails3: fix integration tests
Showing
12 changed files
with
413 additions
and
16 deletions
Show diff stats
app/helpers/application_helper.rb
| ... | ... | @@ -678,7 +678,7 @@ module ApplicationHelper |
| 678 | 678 | lightbox_link_to '<span class="icon-menu-search"></span>'+ _('Search'), { |
| 679 | 679 | :controller => 'search', |
| 680 | 680 | :action => 'popup', |
| 681 | - :category_path => (@category ? @category.explode_path : []) }, | |
| 681 | + :category_path => (@category ? @category.explode_path : nil)}, | |
| 682 | 682 | :id => 'open_search' |
| 683 | 683 | end |
| 684 | 684 | end |
| ... | ... | @@ -1073,7 +1073,7 @@ module ApplicationHelper |
| 1073 | 1073 | links.push(_('New content') => colorbox_options({:href => url_for({:controller => 'cms', :action => 'new', :profile => current_user.login, :cms => true})})) |
| 1074 | 1074 | end |
| 1075 | 1075 | |
| 1076 | - link_to(content_tag(:span, _('Contents'), :class => 'icon-menu-articles'), {:controller => "search", :action => 'contents', :category_path => ''}, :id => 'submenu-contents') + | |
| 1076 | + link_to(content_tag(:span, _('Contents'), :class => 'icon-menu-articles'), {:controller => "search", :action => 'contents', :category_path => nil}, :id => 'submenu-contents') + | |
| 1077 | 1077 | link_to(content_tag(:span, _('Contents menu')), '#', :onclick => "toggleSubmenu(this,'',#{j links.to_json}); return false", :class => 'menu-submenu-trigger up', :id => 'submenu-contents-trigger') |
| 1078 | 1078 | end |
| 1079 | 1079 | alias :browse_contents_menu :search_contents_menu | ... | ... |
app/models/category.rb
| 1 | 1 | class Category < ActiveRecord::Base |
| 2 | 2 | |
| 3 | - attr_accessible :name, :parent_id, :display_color, :display_in_menu, :image_builder, :environment | |
| 3 | + attr_accessible :name, :parent_id, :display_color, :display_in_menu, :image_builder, :environment, :parent | |
| 4 | 4 | |
| 5 | 5 | SEARCHABLE_FIELDS = { |
| 6 | 6 | :name => 10, | ... | ... |
app/views/layouts/_javascript.html.erb
| ... | ... | @@ -3,7 +3,7 @@ |
| 3 | 3 | 'jquery-ui-1.8.2.custom.min', 'jquery.scrollTo', 'jquery.form.js', 'jquery-validation/jquery.validate', |
| 4 | 4 | 'jquery.cookie', 'jquery.ba-bbq.min.js', 'reflection', 'jquery.tokeninput', |
| 5 | 5 | 'add-and-join', 'report-abuse', 'catalog', 'manage-products', |
| 6 | -'jquery-ui-timepicker-addon', 'application.js', :cache => 'cache-general' %> | |
| 6 | +'jquery-ui-timepicker-addon', 'application.js', 'rails.js', :cache => 'cache-general' %> | |
| 7 | 7 | |
| 8 | 8 | <% language = FastGettext.locale %> |
| 9 | 9 | <% %w{messages methods}.each do |type| %> | ... | ... |
config/routes.rb
| ... | ... | @@ -125,7 +125,7 @@ Noosfero::Application.routes.draw do |
| 125 | 125 | # cache stuff - hack |
| 126 | 126 | match 'public/:action/:id', :controller => 'public' |
| 127 | 127 | |
| 128 | - match ':profile/*page/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => /#{Noosfero.identifier_format}/, :conditions => { :if => lambda { |env| !Domain.hosting_profile_at(env[:host]) } } | |
| 128 | + match ':profile/*page/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => /#{Noosfero.identifier_format}/, :constraints => EnvironmentDomainConstraint.new | |
| 129 | 129 | match '*page/versions', :controller => 'content_viewer', :action => 'article_versions' |
| 130 | 130 | |
| 131 | 131 | # match requests for profiles that don't have a custom domain | ... | ... |
| ... | ... | @@ -0,0 +1,398 @@ |
| 1 | +(function($, undefined) { | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * Unobtrusive scripting adapter for jQuery | |
| 5 | + * https://github.com/rails/jquery-ujs | |
| 6 | + * | |
| 7 | + * Requires jQuery 1.7.0 or later. | |
| 8 | + * | |
| 9 | + * Released under the MIT license | |
| 10 | + * | |
| 11 | + */ | |
| 12 | + | |
| 13 | + // Cut down on the number of issues from people inadvertently including jquery_ujs twice | |
| 14 | + // by detecting and raising an error when it happens. | |
| 15 | + if ( $.rails !== undefined ) { | |
| 16 | + $.error('jquery-ujs has already been loaded!'); | |
| 17 | + } | |
| 18 | + | |
| 19 | + // Shorthand to make it a little easier to call public rails functions from within rails.js | |
| 20 | + var rails; | |
| 21 | + var $document = $(document); | |
| 22 | + | |
| 23 | + $.rails = rails = { | |
| 24 | + // Link elements bound by jquery-ujs | |
| 25 | + linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote], a[data-disable-with]', | |
| 26 | + | |
| 27 | + // Button elements bound by jquery-ujs | |
| 28 | + buttonClickSelector: 'button[data-remote]', | |
| 29 | + | |
| 30 | + // Select elements bound by jquery-ujs | |
| 31 | + inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]', | |
| 32 | + | |
| 33 | + // Form elements bound by jquery-ujs | |
| 34 | + formSubmitSelector: 'form', | |
| 35 | + | |
| 36 | + // Form input elements bound by jquery-ujs | |
| 37 | + formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type])', | |
| 38 | + | |
| 39 | + // Form input elements disabled during form submission | |
| 40 | + disableSelector: 'input[data-disable-with], button[data-disable-with], textarea[data-disable-with]', | |
| 41 | + | |
| 42 | + // Form input elements re-enabled after form submission | |
| 43 | + enableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled', | |
| 44 | + | |
| 45 | + // Form required input elements | |
| 46 | + requiredInputSelector: 'input[name][required]:not([disabled]),textarea[name][required]:not([disabled])', | |
| 47 | + | |
| 48 | + // Form file input elements | |
| 49 | + fileInputSelector: 'input[type=file]', | |
| 50 | + | |
| 51 | + // Link onClick disable selector with possible reenable after remote submission | |
| 52 | + linkDisableSelector: 'a[data-disable-with]', | |
| 53 | + | |
| 54 | + // Make sure that every Ajax request sends the CSRF token | |
| 55 | + CSRFProtection: function(xhr) { | |
| 56 | + var token = $('meta[name="csrf-token"]').attr('content'); | |
| 57 | + if (token) xhr.setRequestHeader('X-CSRF-Token', token); | |
| 58 | + }, | |
| 59 | + | |
| 60 | + // making sure that all forms have actual up-to-date token(cached forms contain old one) | |
| 61 | + refreshCSRFTokens: function(){ | |
| 62 | + var csrfToken = $('meta[name=csrf-token]').attr('content'); | |
| 63 | + var csrfParam = $('meta[name=csrf-param]').attr('content'); | |
| 64 | + $('form input[name="' + csrfParam + '"]').val(csrfToken); | |
| 65 | + }, | |
| 66 | + | |
| 67 | + // Triggers an event on an element and returns false if the event result is false | |
| 68 | + fire: function(obj, name, data) { | |
| 69 | + var event = $.Event(name); | |
| 70 | + obj.trigger(event, data); | |
| 71 | + return event.result !== false; | |
| 72 | + }, | |
| 73 | + | |
| 74 | + // Default confirm dialog, may be overridden with custom confirm dialog in $.rails.confirm | |
| 75 | + confirm: function(message) { | |
| 76 | + return confirm(message); | |
| 77 | + }, | |
| 78 | + | |
| 79 | + // Default ajax function, may be overridden with custom function in $.rails.ajax | |
| 80 | + ajax: function(options) { | |
| 81 | + return $.ajax(options); | |
| 82 | + }, | |
| 83 | + | |
| 84 | + // Default way to get an element's href. May be overridden at $.rails.href. | |
| 85 | + href: function(element) { | |
| 86 | + return element.attr('href'); | |
| 87 | + }, | |
| 88 | + | |
| 89 | + // Submits "remote" forms and links with ajax | |
| 90 | + handleRemote: function(element) { | |
| 91 | + var method, url, data, elCrossDomain, crossDomain, withCredentials, dataType, options; | |
| 92 | + | |
| 93 | + if (rails.fire(element, 'ajax:before')) { | |
| 94 | + elCrossDomain = element.data('cross-domain'); | |
| 95 | + crossDomain = elCrossDomain === undefined ? null : elCrossDomain; | |
| 96 | + withCredentials = element.data('with-credentials') || null; | |
| 97 | + dataType = element.data('type') || ($.ajaxSettings && $.ajaxSettings.dataType); | |
| 98 | + | |
| 99 | + if (element.is('form')) { | |
| 100 | + method = element.attr('method'); | |
| 101 | + url = element.attr('action'); | |
| 102 | + data = element.serializeArray(); | |
| 103 | + // memoized value from clicked submit button | |
| 104 | + var button = element.data('ujs:submit-button'); | |
| 105 | + if (button) { | |
| 106 | + data.push(button); | |
| 107 | + element.data('ujs:submit-button', null); | |
| 108 | + } | |
| 109 | + } else if (element.is(rails.inputChangeSelector)) { | |
| 110 | + method = element.data('method'); | |
| 111 | + url = element.data('url'); | |
| 112 | + data = element.serialize(); | |
| 113 | + if (element.data('params')) data = data + "&" + element.data('params'); | |
| 114 | + } else if (element.is(rails.buttonClickSelector)) { | |
| 115 | + method = element.data('method') || 'get'; | |
| 116 | + url = element.data('url'); | |
| 117 | + data = element.serialize(); | |
| 118 | + if (element.data('params')) data = data + "&" + element.data('params'); | |
| 119 | + } else { | |
| 120 | + method = element.data('method'); | |
| 121 | + url = rails.href(element); | |
| 122 | + data = element.data('params') || null; | |
| 123 | + } | |
| 124 | + | |
| 125 | + options = { | |
| 126 | + type: method || 'GET', data: data, dataType: dataType, | |
| 127 | + // stopping the "ajax:beforeSend" event will cancel the ajax request | |
| 128 | + beforeSend: function(xhr, settings) { | |
| 129 | + if (settings.dataType === undefined) { | |
| 130 | + xhr.setRequestHeader('accept', '*/*;q=0.5, ' + settings.accepts.script); | |
| 131 | + } | |
| 132 | + return rails.fire(element, 'ajax:beforeSend', [xhr, settings]); | |
| 133 | + }, | |
| 134 | + success: function(data, status, xhr) { | |
| 135 | + element.trigger('ajax:success', [data, status, xhr]); | |
| 136 | + }, | |
| 137 | + complete: function(xhr, status) { | |
| 138 | + element.trigger('ajax:complete', [xhr, status]); | |
| 139 | + }, | |
| 140 | + error: function(xhr, status, error) { | |
| 141 | + element.trigger('ajax:error', [xhr, status, error]); | |
| 142 | + }, | |
| 143 | + crossDomain: crossDomain | |
| 144 | + }; | |
| 145 | + | |
| 146 | + // There is no withCredentials for IE6-8 when | |
| 147 | + // "Enable native XMLHTTP support" is disabled | |
| 148 | + if (withCredentials) { | |
| 149 | + options.xhrFields = { | |
| 150 | + withCredentials: withCredentials | |
| 151 | + }; | |
| 152 | + } | |
| 153 | + | |
| 154 | + // Only pass url to `ajax` options if not blank | |
| 155 | + if (url) { options.url = url; } | |
| 156 | + | |
| 157 | + var jqxhr = rails.ajax(options); | |
| 158 | + element.trigger('ajax:send', jqxhr); | |
| 159 | + return jqxhr; | |
| 160 | + } else { | |
| 161 | + return false; | |
| 162 | + } | |
| 163 | + }, | |
| 164 | + | |
| 165 | + // Handles "data-method" on links such as: | |
| 166 | + // <a href="/users/5" data-method="delete" rel="nofollow" data-confirm="Are you sure?">Delete</a> | |
| 167 | + handleMethod: function(link) { | |
| 168 | + var href = rails.href(link), | |
| 169 | + method = link.data('method'), | |
| 170 | + target = link.attr('target'), | |
| 171 | + csrfToken = $('meta[name=csrf-token]').attr('content'), | |
| 172 | + csrfParam = $('meta[name=csrf-param]').attr('content'), | |
| 173 | + form = $('<form method="post" action="' + href + '"></form>'), | |
| 174 | + metadataInput = '<input name="_method" value="' + method + '" type="hidden" />'; | |
| 175 | + | |
| 176 | + if (csrfParam !== undefined && csrfToken !== undefined) { | |
| 177 | + metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />'; | |
| 178 | + } | |
| 179 | + | |
| 180 | + if (target) { form.attr('target', target); } | |
| 181 | + | |
| 182 | + form.hide().append(metadataInput).appendTo('body'); | |
| 183 | + form.submit(); | |
| 184 | + }, | |
| 185 | + | |
| 186 | + /* Disables form elements: | |
| 187 | + - Caches element value in 'ujs:enable-with' data store | |
| 188 | + - Replaces element text with value of 'data-disable-with' attribute | |
| 189 | + - Sets disabled property to true | |
| 190 | + */ | |
| 191 | + disableFormElements: function(form) { | |
| 192 | + form.find(rails.disableSelector).each(function() { | |
| 193 | + var element = $(this), method = element.is('button') ? 'html' : 'val'; | |
| 194 | + element.data('ujs:enable-with', element[method]()); | |
| 195 | + element[method](element.data('disable-with')); | |
| 196 | + element.prop('disabled', true); | |
| 197 | + }); | |
| 198 | + }, | |
| 199 | + | |
| 200 | + /* Re-enables disabled form elements: | |
| 201 | + - Replaces element text with cached value from 'ujs:enable-with' data store (created in `disableFormElements`) | |
| 202 | + - Sets disabled property to false | |
| 203 | + */ | |
| 204 | + enableFormElements: function(form) { | |
| 205 | + form.find(rails.enableSelector).each(function() { | |
| 206 | + var element = $(this), method = element.is('button') ? 'html' : 'val'; | |
| 207 | + if (element.data('ujs:enable-with')) element[method](element.data('ujs:enable-with')); | |
| 208 | + element.prop('disabled', false); | |
| 209 | + }); | |
| 210 | + }, | |
| 211 | + | |
| 212 | + /* For 'data-confirm' attribute: | |
| 213 | + - Fires `confirm` event | |
| 214 | + - Shows the confirmation dialog | |
| 215 | + - Fires the `confirm:complete` event | |
| 216 | + | |
| 217 | + Returns `true` if no function stops the chain and user chose yes; `false` otherwise. | |
| 218 | + Attaching a handler to the element's `confirm` event that returns a `falsy` value cancels the confirmation dialog. | |
| 219 | + Attaching a handler to the element's `confirm:complete` event that returns a `falsy` value makes this function | |
| 220 | + return false. The `confirm:complete` event is fired whether or not the user answered true or false to the dialog. | |
| 221 | + */ | |
| 222 | + allowAction: function(element) { | |
| 223 | + var message = element.data('confirm'), | |
| 224 | + answer = false, callback; | |
| 225 | + if (!message) { return true; } | |
| 226 | + | |
| 227 | + if (rails.fire(element, 'confirm')) { | |
| 228 | + answer = rails.confirm(message); | |
| 229 | + callback = rails.fire(element, 'confirm:complete', [answer]); | |
| 230 | + } | |
| 231 | + return answer && callback; | |
| 232 | + }, | |
| 233 | + | |
| 234 | + // Helper function which checks for blank inputs in a form that match the specified CSS selector | |
| 235 | + blankInputs: function(form, specifiedSelector, nonBlank) { | |
| 236 | + var inputs = $(), input, valueToCheck, | |
| 237 | + selector = specifiedSelector || 'input,textarea', | |
| 238 | + allInputs = form.find(selector); | |
| 239 | + | |
| 240 | + allInputs.each(function() { | |
| 241 | + input = $(this); | |
| 242 | + valueToCheck = input.is('input[type=checkbox],input[type=radio]') ? input.is(':checked') : input.val(); | |
| 243 | + // If nonBlank and valueToCheck are both truthy, or nonBlank and valueToCheck are both falsey | |
| 244 | + if (!valueToCheck === !nonBlank) { | |
| 245 | + | |
| 246 | + // Don't count unchecked required radio if other radio with same name is checked | |
| 247 | + if (input.is('input[type=radio]') && allInputs.filter('input[type=radio]:checked[name="' + input.attr('name') + '"]').length) { | |
| 248 | + return true; // Skip to next input | |
| 249 | + } | |
| 250 | + | |
| 251 | + inputs = inputs.add(input); | |
| 252 | + } | |
| 253 | + }); | |
| 254 | + return inputs.length ? inputs : false; | |
| 255 | + }, | |
| 256 | + | |
| 257 | + // Helper function which checks for non-blank inputs in a form that match the specified CSS selector | |
| 258 | + nonBlankInputs: function(form, specifiedSelector) { | |
| 259 | + return rails.blankInputs(form, specifiedSelector, true); // true specifies nonBlank | |
| 260 | + }, | |
| 261 | + | |
| 262 | + // Helper function, needed to provide consistent behavior in IE | |
| 263 | + stopEverything: function(e) { | |
| 264 | + $(e.target).trigger('ujs:everythingStopped'); | |
| 265 | + e.stopImmediatePropagation(); | |
| 266 | + return false; | |
| 267 | + }, | |
| 268 | + | |
| 269 | + // replace element's html with the 'data-disable-with' after storing original html | |
| 270 | + // and prevent clicking on it | |
| 271 | + disableElement: function(element) { | |
| 272 | + element.data('ujs:enable-with', element.html()); // store enabled state | |
| 273 | + element.html(element.data('disable-with')); // set to disabled state | |
| 274 | + element.bind('click.railsDisable', function(e) { // prevent further clicking | |
| 275 | + return rails.stopEverything(e); | |
| 276 | + }); | |
| 277 | + }, | |
| 278 | + | |
| 279 | + // restore element to its original state which was disabled by 'disableElement' above | |
| 280 | + enableElement: function(element) { | |
| 281 | + if (element.data('ujs:enable-with') !== undefined) { | |
| 282 | + element.html(element.data('ujs:enable-with')); // set to old enabled state | |
| 283 | + element.removeData('ujs:enable-with'); // clean up cache | |
| 284 | + } | |
| 285 | + element.unbind('click.railsDisable'); // enable element | |
| 286 | + } | |
| 287 | + | |
| 288 | + }; | |
| 289 | + | |
| 290 | + if (rails.fire($document, 'rails:attachBindings')) { | |
| 291 | + | |
| 292 | + $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { rails.CSRFProtection(xhr); }}); | |
| 293 | + | |
| 294 | + $document.delegate(rails.linkDisableSelector, 'ajax:complete', function() { | |
| 295 | + rails.enableElement($(this)); | |
| 296 | + }); | |
| 297 | + | |
| 298 | + $document.delegate(rails.linkClickSelector, 'click.rails', function(e) { | |
| 299 | + var link = $(this), method = link.data('method'), data = link.data('params'), metaClick = e.metaKey || e.ctrlKey; | |
| 300 | + if (!rails.allowAction(link)) return rails.stopEverything(e); | |
| 301 | + | |
| 302 | + if (!metaClick && link.is(rails.linkDisableSelector)) rails.disableElement(link); | |
| 303 | + | |
| 304 | + if (link.data('remote') !== undefined) { | |
| 305 | + if (metaClick && (!method || method === 'GET') && !data) { return true; } | |
| 306 | + | |
| 307 | + var handleRemote = rails.handleRemote(link); | |
| 308 | + // response from rails.handleRemote() will either be false or a deferred object promise. | |
| 309 | + if (handleRemote === false) { | |
| 310 | + rails.enableElement(link); | |
| 311 | + } else { | |
| 312 | + handleRemote.error( function() { rails.enableElement(link); } ); | |
| 313 | + } | |
| 314 | + return false; | |
| 315 | + | |
| 316 | + } else if (link.data('method')) { | |
| 317 | + rails.handleMethod(link); | |
| 318 | + return false; | |
| 319 | + } | |
| 320 | + }); | |
| 321 | + | |
| 322 | + $document.delegate(rails.buttonClickSelector, 'click.rails', function(e) { | |
| 323 | + var button = $(this); | |
| 324 | + if (!rails.allowAction(button)) return rails.stopEverything(e); | |
| 325 | + | |
| 326 | + rails.handleRemote(button); | |
| 327 | + return false; | |
| 328 | + }); | |
| 329 | + | |
| 330 | + $document.delegate(rails.inputChangeSelector, 'change.rails', function(e) { | |
| 331 | + var link = $(this); | |
| 332 | + if (!rails.allowAction(link)) return rails.stopEverything(e); | |
| 333 | + | |
| 334 | + rails.handleRemote(link); | |
| 335 | + return false; | |
| 336 | + }); | |
| 337 | + | |
| 338 | + $document.delegate(rails.formSubmitSelector, 'submit.rails', function(e) { | |
| 339 | + var form = $(this), | |
| 340 | + remote = form.data('remote') !== undefined, | |
| 341 | + blankRequiredInputs = rails.blankInputs(form, rails.requiredInputSelector), | |
| 342 | + nonBlankFileInputs = rails.nonBlankInputs(form, rails.fileInputSelector); | |
| 343 | + | |
| 344 | + if (!rails.allowAction(form)) return rails.stopEverything(e); | |
| 345 | + | |
| 346 | + // skip other logic when required values are missing or file upload is present | |
| 347 | + if (blankRequiredInputs && form.attr("novalidate") == undefined && rails.fire(form, 'ajax:aborted:required', [blankRequiredInputs])) { | |
| 348 | + return rails.stopEverything(e); | |
| 349 | + } | |
| 350 | + | |
| 351 | + if (remote) { | |
| 352 | + if (nonBlankFileInputs) { | |
| 353 | + // slight timeout so that the submit button gets properly serialized | |
| 354 | + // (make it easy for event handler to serialize form without disabled values) | |
| 355 | + setTimeout(function(){ rails.disableFormElements(form); }, 13); | |
| 356 | + var aborted = rails.fire(form, 'ajax:aborted:file', [nonBlankFileInputs]); | |
| 357 | + | |
| 358 | + // re-enable form elements if event bindings return false (canceling normal form submission) | |
| 359 | + if (!aborted) { setTimeout(function(){ rails.enableFormElements(form); }, 13); } | |
| 360 | + | |
| 361 | + return aborted; | |
| 362 | + } | |
| 363 | + | |
| 364 | + rails.handleRemote(form); | |
| 365 | + return false; | |
| 366 | + | |
| 367 | + } else { | |
| 368 | + // slight timeout so that the submit button gets properly serialized | |
| 369 | + setTimeout(function(){ rails.disableFormElements(form); }, 13); | |
| 370 | + } | |
| 371 | + }); | |
| 372 | + | |
| 373 | + $document.delegate(rails.formInputClickSelector, 'click.rails', function(event) { | |
| 374 | + var button = $(this); | |
| 375 | + | |
| 376 | + if (!rails.allowAction(button)) return rails.stopEverything(event); | |
| 377 | + | |
| 378 | + // register the pressed submit button | |
| 379 | + var name = button.attr('name'), | |
| 380 | + data = name ? {name:name, value:button.val()} : null; | |
| 381 | + | |
| 382 | + button.closest('form').data('ujs:submit-button', data); | |
| 383 | + }); | |
| 384 | + | |
| 385 | + $document.delegate(rails.formSubmitSelector, 'ajax:beforeSend.rails', function(event) { | |
| 386 | + if (this == event.target) rails.disableFormElements($(this)); | |
| 387 | + }); | |
| 388 | + | |
| 389 | + $document.delegate(rails.formSubmitSelector, 'ajax:complete.rails', function(event) { | |
| 390 | + if (this == event.target) rails.enableFormElements($(this)); | |
| 391 | + }); | |
| 392 | + | |
| 393 | + $(function(){ | |
| 394 | + rails.refreshCSRFTokens(); | |
| 395 | + }); | |
| 396 | + } | |
| 397 | + | |
| 398 | +})( jQuery ); | ... | ... |
test/integration/assigning_validator_organizations_to_regions_test.rb
| ... | ... | @@ -10,8 +10,8 @@ class AssigningValidatorOrganizationsToRegionsTest < ActionController::Integrati |
| 10 | 10 | org2 = Organization.create!(:name => 'Organization two', :identifier => 'org2') |
| 11 | 11 | |
| 12 | 12 | Region.destroy_all |
| 13 | - region1 = Region.create!(:name => "Region 1", :environment_id => env.id) | |
| 14 | - region2 = Region.create!(:name => "Region 2", :environment_id => env.id) | |
| 13 | + region1 = create(Region, :name => "Region 1", :environment_id => env.id) | |
| 14 | + region2 = create(Region, :name => "Region 2", :environment_id => env.id) | |
| 15 | 15 | |
| 16 | 16 | login('ze', 'test') |
| 17 | 17 | ... | ... |
test/integration/blocks_test.rb
| ... | ... | @@ -46,7 +46,7 @@ class BlocksTest < ActionController::IntegrationTest |
| 46 | 46 | block = blog_on_article_block_bootstrap |
| 47 | 47 | p = block.owner |
| 48 | 48 | b = block.article |
| 49 | - f = fast_create(Folder, :name => 'Folder1', :profile_id => p.id) | |
| 49 | + f = Folder.create!(:name => 'Folder1', :profile => p) | |
| 50 | 50 | b.parent = f |
| 51 | 51 | b.save! |
| 52 | 52 | get "/profile/#{block.owner.identifier}" | ... | ... |
test/integration/categories_menu_test.rb
| ... | ... | @@ -32,8 +32,10 @@ class CategoriesMenuTest < ActionController::IntegrationTest |
| 32 | 32 | end |
| 33 | 33 | |
| 34 | 34 | should 'cache the categories menu' do |
| 35 | - ActionView::Base.any_instance.expects(:cache).with(Environment.default.id.to_s + "_categories_menu") | |
| 35 | + ActionController::Base.perform_caching = true | |
| 36 | + HomeController.any_instance.expects(:fragment_cache_key).with(Environment.default.id.to_s + "_categories_menu").returns('dir') | |
| 36 | 37 | get '/' |
| 38 | + ActionController::Base.perform_caching = false | |
| 37 | 39 | end |
| 38 | 40 | |
| 39 | 41 | end | ... | ... |
test/integration/enable_disable_features_test.rb
test/integration/manage_documents_test.rb
| ... | ... | @@ -83,7 +83,7 @@ class ManageDocumentsTest < ActionController::IntegrationTest |
| 83 | 83 | get '/myprofile/myuser/cms' |
| 84 | 84 | assert_response :success |
| 85 | 85 | |
| 86 | - assert_tag :tag => 'a', :attributes => { :href => "/myprofile/myuser/cms/destroy/#{article.id}", :onclick => /confirm/ } | |
| 86 | + assert_tag :tag => 'a', :attributes => { :href => "/myprofile/myuser/cms/destroy/#{article.id}", 'data-confirm' => /Are you sure/ } | |
| 87 | 87 | post "/myprofile/myuser/cms/destroy/#{article.id}" |
| 88 | 88 | |
| 89 | 89 | assert_response :redirect | ... | ... |
test/integration/routing_test.rb
| ... | ... | @@ -258,16 +258,14 @@ class RoutingTest < ActionController::IntegrationTest |
| 258 | 258 | |
| 259 | 259 | should 'have route to versions of an article' do |
| 260 | 260 | |
| 261 | - assert_routing('/ze/work/free-software/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => 'ze', :page => ['work', "free-software"]) | |
| 261 | + assert_routing('/ze/work/free-software/versions', :controller => 'content_viewer', :action => 'article_versions', :profile => 'ze', :page => 'work/free-software') | |
| 262 | 262 | end |
| 263 | 263 | |
| 264 | 264 | should 'have route to versions of an article if profile has domain' do |
| 265 | 265 | user = create_user('testuser').person |
| 266 | 266 | domain = Domain.create!(:name => 'example.com', :owner => user) |
| 267 | 267 | |
| 268 | - ActionController::TestRequest.any_instance.expects(:host).returns('www.example.com') | |
| 269 | - | |
| 270 | - assert_routing('/work/free-software/versions', :controller => 'content_viewer', :action => 'article_versions', :page => [ 'work', 'free-software'] ) | |
| 268 | + assert_routing('http://www.example.com/work/free-software/versions', :controller => 'content_viewer', :action => 'article_versions', :page => 'work/free-software') | |
| 271 | 269 | end |
| 272 | 270 | |
| 273 | 271 | ... | ... |
test/integration/tiny_mce_languages_test.rb
| ... | ... | @@ -12,7 +12,7 @@ class TinyMceLanguagesTest < ActionController::IntegrationTest |
| 12 | 12 | |
| 13 | 13 | def assert_exists_tinymce_language_file(file) |
| 14 | 14 | filename = Rails.root.join("public", "javascripts", "tinymce", "jscripts", "tiny_mce", file) |
| 15 | - assert(File.exists?(filename), filename + " must exist") | |
| 15 | + assert(File.exists?(filename), "#{filename} must exist") | |
| 16 | 16 | end |
| 17 | 17 | |
| 18 | 18 | ... | ... |