Merge branch 'stable' into develop
This commit is contained in:
commit
09f4eeac2a
3 changed files with 63 additions and 0 deletions
|
|
@ -88,6 +88,7 @@ With the port to Bootstrap 3, app/views/terms/default.haml has a new structure.
|
||||||
## Refactor
|
## Refactor
|
||||||
|
|
||||||
## Bug fixes
|
## Bug fixes
|
||||||
|
* Redirect to sign in page when a background request fails with 401 [#6496](https://github.com/diaspora/diaspora/pull/6496)
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ var app = {
|
||||||
this.setupGlobalViews();
|
this.setupGlobalViews();
|
||||||
this.setupDisabledLinks();
|
this.setupDisabledLinks();
|
||||||
this.setupForms();
|
this.setupForms();
|
||||||
|
this.setupAjaxErrorRedirect();
|
||||||
},
|
},
|
||||||
|
|
||||||
hasPreload : function(prop) {
|
hasPreload : function(prop) {
|
||||||
|
|
@ -148,6 +149,22 @@ var app = {
|
||||||
$(this).clearForm();
|
$(this).clearForm();
|
||||||
$(this).focusout();
|
$(this).focusout();
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
setupAjaxErrorRedirect: function() {
|
||||||
|
var self = this;
|
||||||
|
// Binds the global ajax event. To prevent this, add
|
||||||
|
// preventGlobalErrorHandling: true
|
||||||
|
// to the settings of your ajax calls
|
||||||
|
$(document).ajaxError(function(evt, jqxhr, settings) {
|
||||||
|
if(jqxhr.status === 401 && !settings.preventGlobalErrorHandling) {
|
||||||
|
self._changeLocation(Routes.newUserSession());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_changeLocation: function(href) {
|
||||||
|
window.location.assign(href);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ describe("app", function() {
|
||||||
spyOn(app, "setupGlobalViews");
|
spyOn(app, "setupGlobalViews");
|
||||||
spyOn(app, "setupDisabledLinks");
|
spyOn(app, "setupDisabledLinks");
|
||||||
spyOn(app, "setupForms");
|
spyOn(app, "setupForms");
|
||||||
|
spyOn(app, "setupAjaxErrorRedirect");
|
||||||
|
|
||||||
app.initialize();
|
app.initialize();
|
||||||
|
|
||||||
|
|
@ -20,6 +21,7 @@ describe("app", function() {
|
||||||
expect(app.setupGlobalViews).toHaveBeenCalled();
|
expect(app.setupGlobalViews).toHaveBeenCalled();
|
||||||
expect(app.setupDisabledLinks).toHaveBeenCalled();
|
expect(app.setupDisabledLinks).toHaveBeenCalled();
|
||||||
expect(app.setupForms).toHaveBeenCalled();
|
expect(app.setupForms).toHaveBeenCalled();
|
||||||
|
expect(app.setupAjaxErrorRedirect).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -44,4 +46,47 @@ describe("app", function() {
|
||||||
expect($.fn.placeholder.calls.mostRecent().object.selector).toBe("input, textarea");
|
expect($.fn.placeholder.calls.mostRecent().object.selector).toBe("input, textarea");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("setupAjaxErrorRedirect", function() {
|
||||||
|
it("redirects to /users/sign_in on 401 ajax responses", function() {
|
||||||
|
spyOn(app, "_changeLocation");
|
||||||
|
$.ajax("/test");
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({status: 401});
|
||||||
|
expect(app._changeLocation).toHaveBeenCalledWith("/users/sign_in");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("doesn't redirect on other responses", function() {
|
||||||
|
spyOn(app, "_changeLocation");
|
||||||
|
|
||||||
|
[200, 201, 400, 404, 500].forEach(function(code) {
|
||||||
|
$.ajax("/test");
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({status: code});
|
||||||
|
expect(app._changeLocation).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("doesn't redirect when error handling is suppressed", function() {
|
||||||
|
spyOn(app, "_changeLocation");
|
||||||
|
$.ajax("/test", {preventGlobalErrorHandling: true});
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({status: 401});
|
||||||
|
expect(app._changeLocation).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
$.ajax("/test", {preventGlobalErrorHandling: false});
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({status: 401});
|
||||||
|
expect(app._changeLocation).toHaveBeenCalledWith("/users/sign_in");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("doesn't redirect when global ajax events are disabled", function() {
|
||||||
|
spyOn(app, "_changeLocation");
|
||||||
|
$.ajaxSetup({global: false});
|
||||||
|
$.ajax("/test");
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({status: 401});
|
||||||
|
expect(app._changeLocation).not.toHaveBeenCalled();
|
||||||
|
|
||||||
|
$.ajaxSetup({global: true});
|
||||||
|
$.ajax("/test");
|
||||||
|
jasmine.Ajax.requests.mostRecent().respondWith({status: 401});
|
||||||
|
expect(app._changeLocation).toHaveBeenCalledWith("/users/sign_in");
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue