1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2026-01-03 23:22:30 +03:00

Fix error handling on uploadContent

Make sure we parse the json content of errors from uploadContent before trying
to turn them into MatrixErrors.
This commit is contained in:
Richard van der Hoff
2016-10-09 22:12:29 +01:00
parent 631eeb9bc0
commit d505ab9eeb
2 changed files with 87 additions and 13 deletions

View File

@@ -43,17 +43,13 @@ describe("MatrixClient", function() {
httpBackend.when(
"POST", "/_matrix/media/v1/upload"
).check(function(req) {
console.log("Request", req);
expect(req.data).toEqual(buf);
expect(req.queryParams.filename).toEqual("hi.txt");
expect(req.queryParams.access_token).toEqual(accessToken);
expect(req.headers["Content-Type"]).toEqual("text/plain");
expect(req.opts.json).toBeFalsy();
expect(req.opts.timeout).toBe(undefined);
}).respond(200, {
"content_uri": "uri"
});
}).respond(200, "content");
var prom = client.uploadContent({
stream: buf,
@@ -69,8 +65,8 @@ describe("MatrixClient", function() {
expect(uploads[0].loaded).toEqual(0);
prom.then(function(response) {
console.log("Response", response);
expect(response.content_uri).toEqual("uri");
// for backwards compatibility, we return the raw JSON
expect(response).toEqual("content");
var uploads = client.getCurrentUploads();
expect(uploads.length).toEqual(0);
@@ -79,6 +75,33 @@ describe("MatrixClient", function() {
httpBackend.flush();
});
it("should parse errors into a MatrixError", function(done) {
// opts.json is false, so request returns unparsed json.
httpBackend.when(
"POST", "/_matrix/media/v1/upload"
).check(function(req) {
expect(req.data).toEqual(buf);
expect(req.opts.json).toBeFalsy();
}).respond(400, JSON.stringify({
"errcode": "M_SNAFU",
"error": "broken",
}));
client.uploadContent({
stream: buf,
name: "hi.txt",
type: "text/plain",
}).then(function(response) {
throw Error("request not failed");
}, function(error) {
expect(error.httpStatus).toEqual(400);
expect(error.errcode).toEqual("M_SNAFU");
expect(error.message).toEqual("broken");
}).catch(utils.failTest).done(done);
httpBackend.flush();
});
it("should return a promise which can be cancelled", function(done) {
var prom = client.uploadContent({
stream: buf,