You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
2.3 KiB
JavaScript
95 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
/* global describe, it */
|
|
|
|
let assert = require('assert');
|
|
let urllib = require('url');
|
|
let querystring = require('querystring');
|
|
|
|
let mediaLib = require('../../lib/media.js');
|
|
|
|
let client = {
|
|
/* FIXME: Verify whether allowDirectLinks is used / expected to do anything by other code */
|
|
mxcUrlToHttp: function(url, w, h, method, _allowDirectLinks) {
|
|
let hs = "https://chat.privacytools.io";
|
|
let mxc = url.slice(6);
|
|
if (w) {
|
|
return `${hs}/_matrix/media/v1/thumbnail/${mxc}?w=${w}&h=${h}&method=${method}`;
|
|
} else {
|
|
return `${hs}/_matrix/media/v1/download/${mxc}`;
|
|
}
|
|
}
|
|
};
|
|
|
|
let mockEventTemplate = {
|
|
type: "m.room.message",
|
|
sender: "@f0x:privacytools.io",
|
|
content: {
|
|
body: "image.png",
|
|
info: {
|
|
size: 16692,
|
|
mimetype: "image/png",
|
|
thumbnail_info: {
|
|
w: 268,
|
|
h: 141,
|
|
mimetype: "image/png",
|
|
size: 16896
|
|
},
|
|
w: 268,
|
|
h: 141,
|
|
thumbnail_url: "mxc://privacytools.io/zBSerdKMhaXSIxfjzCmOnhXH"
|
|
},
|
|
msgtype: "m.image",
|
|
url: "mxc://privacytools.io/khPaFfeRyNdzlSttZraeAUre"
|
|
},
|
|
event_id: "$aaa:matrix.org",
|
|
origin_server_ts: 1558470168199,
|
|
unsigned: {
|
|
age: 143237861
|
|
},
|
|
room_id: "!aaa:matrix.org"
|
|
};
|
|
|
|
describe('media', function() {
|
|
describe('#parseEvent()', function() {
|
|
it('event without info', function() {
|
|
let mockEvent = JSON.parse(JSON.stringify(mockEventTemplate));
|
|
mockEvent.content.info = null;
|
|
|
|
checkParsedEvent(mockEvent, {
|
|
w: 1000,
|
|
h: 1000,
|
|
method: 'scale'
|
|
});
|
|
});
|
|
it('event without thumbnail', function() {
|
|
let mockEvent = JSON.parse(JSON.stringify(mockEventTemplate));
|
|
mockEvent.content.info.thumbnail_url = null;
|
|
mockEvent.content.info.thumbnail_info = null;
|
|
checkParsedEvent(mockEvent, {
|
|
w: 268,
|
|
h: 141,
|
|
method: 'scale'
|
|
});
|
|
});
|
|
it('event without thumbnail_info', function() {
|
|
let mockEvent = JSON.parse(JSON.stringify(mockEventTemplate));
|
|
mockEvent.content.info.thumbnail_url = null;
|
|
checkParsedEvent(mockEvent, {
|
|
w: 268,
|
|
h: 141,
|
|
method: 'scale'
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
function checkParsedEvent(mockEvent, expected) {
|
|
let media = mediaLib.parseEvent(client, mockEvent, 1000, 1000);
|
|
let params = querystring.decode(urllib.parse(media.thumb).query);
|
|
|
|
Object.keys(params).forEach((key) => {
|
|
assert.equal(expected[key], params[key]);
|
|
});
|
|
}
|