2019-11-21 05:24:55 +01:00
|
|
|
const rewiremock = require("rewiremock/node");
|
|
|
|
|
2017-11-25 22:22:36 +01:00
|
|
|
set_global('$', global.make_zjquery());
|
|
|
|
set_global('document', {
|
|
|
|
location: { },
|
|
|
|
});
|
2018-02-13 23:29:17 +01:00
|
|
|
set_global('navigator', {
|
|
|
|
userAgent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
|
|
|
|
});
|
2019-05-03 17:55:04 +02:00
|
|
|
set_global('page_params', {
|
|
|
|
max_file_upload_size: 25,
|
|
|
|
});
|
2019-11-21 05:24:55 +01:00
|
|
|
set_global('csrf_token', "csrf_token");
|
2019-07-25 09:13:22 +02:00
|
|
|
set_global('bridge', false);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
|
|
|
// Setting these up so that we can test that links to uploads within messages are
|
|
|
|
// automatically converted to server relative links.
|
|
|
|
global.document.location.protocol = 'https:';
|
|
|
|
global.document.location.host = 'foo.com';
|
|
|
|
|
|
|
|
zrequire('compose_ui');
|
|
|
|
zrequire('compose_state');
|
|
|
|
zrequire('compose');
|
2019-11-21 05:24:55 +01:00
|
|
|
zrequire('compose_actions');
|
|
|
|
|
|
|
|
const plugin_stub = {
|
|
|
|
prototype: {
|
|
|
|
constructor: null,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2017-11-25 22:22:36 +01:00
|
|
|
zrequire('upload');
|
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
run_test('make_upload_absolute', () => {
|
|
|
|
let uri = "/user_uploads/5/d4/6lSlfIPIg9nDI2Upj0Mq_EbE/kerala.png";
|
|
|
|
const expected_uri = "https://foo.com/user_uploads/5/d4/6lSlfIPIg9nDI2Upj0Mq_EbE/kerala.png";
|
|
|
|
assert.equal(upload.make_upload_absolute(uri), expected_uri);
|
2018-02-13 22:39:51 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
uri = "https://foo.com/user_uploads/5/d4/6lSlfIPIg9nDI2Upj0Mq_EbE/alappuzha.png";
|
|
|
|
assert.equal(upload.make_upload_absolute(uri), uri);
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test('get_item', () => {
|
|
|
|
assert.equal(upload.get_item("textarea", {mode: "compose"}), $('#compose-textarea'));
|
|
|
|
assert.equal(upload.get_item("send_status_message", {mode: "compose"}), $('#compose-error-msg'));
|
|
|
|
assert.equal(upload.get_item("file_input_identifier", {mode: "compose"}), "#file_input");
|
|
|
|
assert.equal(upload.get_item("source", {mode: "compose"}), "compose-file-input");
|
|
|
|
assert.equal(upload.get_item("drag_drop_container", {mode: "compose"}), $('#compose'));
|
|
|
|
|
|
|
|
assert.equal(upload.get_item("textarea", {mode: "edit", row: 1}), $('#message_edit_content_1'));
|
|
|
|
|
|
|
|
$('#message_edit_content_2').closest = () => {
|
|
|
|
$('#message_edit_form').set_find_results('.message_edit_save', $('.message_edit_save'));
|
|
|
|
return $('#message_edit_form');
|
2017-11-25 22:22:36 +01:00
|
|
|
};
|
2019-11-21 05:24:55 +01:00
|
|
|
assert.equal(upload.get_item("send_button", {mode: "edit", row: 2}), $('.message_edit_save'));
|
|
|
|
|
|
|
|
assert.equal(upload.get_item("send_status_identifier", {mode: "edit", row: 11}), "#message-edit-send-status-11");
|
|
|
|
assert.equal(upload.get_item("send_status", {mode: "edit", row: 75}), $("#message-edit-send-status-75"));
|
|
|
|
|
|
|
|
$('#message-edit-send-status-2').set_find_results('.send-status-close', $('.send-status-close'));
|
|
|
|
assert.equal(upload.get_item("send_status_close_button", {mode: "edit", row: 2}), $('.send-status-close'));
|
|
|
|
|
|
|
|
$('#message-edit-send-status-22').set_find_results('.error-msg', $('.error-msg'));
|
|
|
|
assert.equal(upload.get_item("send_status_message", {mode: "edit", row: 22}), $('.error-msg'));
|
|
|
|
|
|
|
|
assert.equal(upload.get_item("file_input_identifier", {mode: "edit", row: 123}), "#message_edit_file_input_123");
|
|
|
|
assert.equal(upload.get_item("source", {mode: "edit", row: 123}), "message-edit-file-input");
|
|
|
|
assert.equal(upload.get_item("drag_drop_container", {mode: "edit", row: 1}), $("#message_edit_form"));
|
|
|
|
|
|
|
|
assert.throws(
|
|
|
|
() => {
|
|
|
|
upload.get_item("textarea");
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Error",
|
|
|
|
message: "Missing config",
|
|
|
|
}
|
|
|
|
);
|
|
|
|
assert.throws(
|
|
|
|
() => {
|
|
|
|
upload.get_item("textarea", {mode: "edit"});
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Error",
|
|
|
|
message: "Missing row in config",
|
|
|
|
}
|
|
|
|
);
|
|
|
|
assert.throws(
|
|
|
|
() => {
|
|
|
|
upload.get_item("textarea", {mode: "blah"});
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Error",
|
|
|
|
message: "Invalid upload mode!",
|
|
|
|
}
|
|
|
|
);
|
|
|
|
assert.throws(
|
|
|
|
() => {
|
|
|
|
upload.get_item("invalid", {mode: "compose"});
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Error",
|
|
|
|
message: 'Invalid key name for mode "compose"',
|
|
|
|
}
|
|
|
|
);
|
|
|
|
assert.throws(
|
|
|
|
() => {
|
|
|
|
upload.get_item("invalid", {mode: "edit", row: 20});
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "Error",
|
|
|
|
message: 'Invalid key name for mode "edit"',
|
|
|
|
}
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test('hide_upload_status', () => {
|
|
|
|
$('#compose-send-button').prop("disabled", "");
|
|
|
|
$('#compose-send-status').addClass("alert-info").show();
|
|
|
|
|
|
|
|
upload.hide_upload_status({mode: "compose"});
|
|
|
|
|
|
|
|
assert.equal($('#compose-send-button').prop("disabled"), false);
|
|
|
|
assert.equal($('#compose-send-button').hasClass("alert-info"), false);
|
|
|
|
assert.equal($('#compose-send-button').visible(), false);
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test('show_error_message', () => {
|
|
|
|
$('#compose-send-button').prop("disabled", "");
|
|
|
|
$('#compose-send-status').addClass("alert-info").removeClass("alert-error").hide();
|
|
|
|
$('#compose-error-msg').text("");
|
|
|
|
$('#compose-error-msg').hide();
|
|
|
|
|
|
|
|
upload.show_error_message({mode: "compose"}, "Error message");
|
|
|
|
assert.equal($('#compose-send-button').prop("disabled"), false);
|
|
|
|
assert($('#compose-send-status').hasClass("alert-error"));
|
|
|
|
assert.equal($('#compose-send-status').hasClass("alert-info"), false);
|
|
|
|
assert($('#compose-send-status').visible());
|
|
|
|
assert.equal($('#compose-error-msg').text(), "Error message");
|
|
|
|
|
|
|
|
upload.show_error_message({mode: "compose"});
|
|
|
|
assert.equal($('#compose-error-msg').text(), "translated: An unknown error occurred.");
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test('upload_files', () => {
|
2020-04-14 19:25:01 +02:00
|
|
|
let uppy_cancel_all_called = false;
|
2020-04-16 17:11:06 +02:00
|
|
|
let files = [
|
2019-11-21 05:24:55 +01:00
|
|
|
{
|
|
|
|
name: "budapest.png",
|
|
|
|
type: "image/png",
|
|
|
|
},
|
|
|
|
];
|
|
|
|
let uppy_add_file_called = false;
|
|
|
|
const uppy = {
|
|
|
|
cancelAll: () => {
|
2020-04-14 19:25:01 +02:00
|
|
|
uppy_cancel_all_called = true;
|
2019-11-21 05:24:55 +01:00
|
|
|
},
|
|
|
|
addFile: (params) => {
|
|
|
|
uppy_add_file_called = true;
|
|
|
|
assert.equal(params.source, "compose-file-input");
|
|
|
|
assert.equal(params.name, "budapest.png");
|
|
|
|
assert.equal(params.type, "image/png");
|
|
|
|
assert.equal(params.data, files[0]);
|
|
|
|
},
|
2020-03-08 11:13:57 +01:00
|
|
|
getFiles: () => [...files],
|
2018-08-15 03:57:35 +02:00
|
|
|
};
|
2019-11-21 05:24:55 +01:00
|
|
|
let hide_upload_status_called = false;
|
|
|
|
upload.hide_upload_status = (config) => {
|
|
|
|
hide_upload_status_called = true;
|
|
|
|
assert(config.mode, "compose");
|
2018-08-15 03:57:35 +02:00
|
|
|
};
|
2019-11-21 05:24:55 +01:00
|
|
|
const config = {mode: "compose"};
|
2020-04-14 19:25:01 +02:00
|
|
|
$("#compose-send-button").attr("disabled", false);
|
2019-11-21 05:24:55 +01:00
|
|
|
upload.upload_files(uppy, config, []);
|
2020-04-14 19:25:01 +02:00
|
|
|
assert.equal($("#compose-send-button").attr("disabled"), false);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2020-05-08 06:57:19 +02:00
|
|
|
page_params.max_file_upload_size_mib = 0;
|
2019-11-21 05:24:55 +01:00
|
|
|
let show_error_message_called = false;
|
|
|
|
upload.show_error_message = (config, message) => {
|
|
|
|
show_error_message_called = true;
|
|
|
|
assert.equal(config.mode, "compose");
|
|
|
|
assert.equal(message, "translated: File and image uploads have been disabled for this organization.");
|
|
|
|
};
|
|
|
|
upload.upload_files(uppy, config, files);
|
|
|
|
assert(show_error_message_called);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2020-05-08 06:57:19 +02:00
|
|
|
page_params.max_file_upload_size_mib = 25;
|
2019-11-21 05:24:55 +01:00
|
|
|
let on_click_close_button_callback;
|
|
|
|
$(".compose-send-status-close").one = (event, callback) => {
|
|
|
|
assert.equal(event, "click");
|
|
|
|
on_click_close_button_callback = callback;
|
|
|
|
};
|
|
|
|
let compose_ui_insert_syntax_and_focus_called = false;
|
|
|
|
compose_ui.insert_syntax_and_focus = (syntax, textarea) => {
|
2020-04-17 17:37:06 +02:00
|
|
|
assert.equal(syntax, "[translated: Uploading budapest.png…]()");
|
2019-11-21 05:24:55 +01:00
|
|
|
assert.equal(textarea, $("#compose-textarea"));
|
|
|
|
compose_ui_insert_syntax_and_focus_called = true;
|
|
|
|
};
|
|
|
|
let compose_ui_autosize_textarea_called = false;
|
|
|
|
compose_ui.autosize_textarea = () => {
|
|
|
|
compose_ui_autosize_textarea_called = true;
|
|
|
|
};
|
|
|
|
$("#compose-send-button").attr("disabled", false);
|
|
|
|
$("#compose-send-status").removeClass("alert-info").hide();
|
|
|
|
upload.upload_files(uppy, config, files);
|
2017-11-25 22:22:36 +01:00
|
|
|
assert.equal($("#compose-send-button").attr("disabled"), '');
|
2017-11-26 19:58:36 +01:00
|
|
|
assert($("#compose-send-status").hasClass("alert-info"));
|
|
|
|
assert($("#compose-send-status").visible());
|
2017-11-25 22:22:36 +01:00
|
|
|
assert.equal($("<p>").text(), 'translated: Uploading…');
|
2019-11-21 05:24:55 +01:00
|
|
|
assert(compose_ui_insert_syntax_and_focus_called);
|
|
|
|
assert(compose_ui_autosize_textarea_called);
|
|
|
|
assert(uppy_add_file_called);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2020-04-16 17:11:06 +02:00
|
|
|
files = [
|
|
|
|
{
|
|
|
|
name: "budapest.png",
|
|
|
|
type: "image/png",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
name: "prague.png",
|
|
|
|
type: "image/png",
|
|
|
|
},
|
|
|
|
];
|
|
|
|
let add_file_counter = 0;
|
|
|
|
uppy.addFile = (file) => {
|
|
|
|
assert.equal(file.name, "budapest.png");
|
|
|
|
add_file_counter += 1;
|
|
|
|
throw Error();
|
|
|
|
};
|
|
|
|
upload.upload_files(uppy, config, files);
|
|
|
|
assert.equal(add_file_counter, 1);
|
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
global.patch_builtin("setTimeout", (func) => {
|
|
|
|
func();
|
|
|
|
});
|
|
|
|
hide_upload_status_called = false;
|
2020-04-14 19:25:01 +02:00
|
|
|
uppy_cancel_all_called = false;
|
2020-03-08 11:13:57 +01:00
|
|
|
let compose_ui_replace_syntax_called = false;
|
|
|
|
files = [
|
|
|
|
{
|
|
|
|
name: "budapest.png",
|
|
|
|
type: "image/png",
|
|
|
|
},
|
|
|
|
];
|
|
|
|
compose_ui.replace_syntax = (old_syntax, new_syntax, textarea) => {
|
|
|
|
compose_ui_replace_syntax_called = true;
|
2020-04-17 17:37:06 +02:00
|
|
|
assert.equal(old_syntax, "[translated: Uploading budapest.png…]()");
|
2020-03-08 11:13:57 +01:00
|
|
|
assert.equal(new_syntax, "");
|
|
|
|
assert.equal(textarea, $('#compose-textarea'));
|
|
|
|
};
|
2019-11-21 05:24:55 +01:00
|
|
|
on_click_close_button_callback();
|
2020-04-14 19:25:01 +02:00
|
|
|
assert(uppy_cancel_all_called);
|
2019-11-21 05:24:55 +01:00
|
|
|
assert(hide_upload_status_called);
|
2020-03-08 11:13:57 +01:00
|
|
|
assert(compose_ui_autosize_textarea_called);
|
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
hide_upload_status_called = false;
|
|
|
|
compose_ui_replace_syntax_called = false;
|
|
|
|
$('#compose-textarea').val("user modified text");
|
|
|
|
on_click_close_button_callback();
|
|
|
|
assert(hide_upload_status_called);
|
|
|
|
assert(compose_ui_autosize_textarea_called);
|
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
assert($('#compose-textarea').val(), "user modified text");
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
run_test('uppy_config', () => {
|
|
|
|
let uppy_stub_called = false;
|
|
|
|
let uppy_set_meta_called = false;
|
|
|
|
let uppy_used_xhrupload = false;
|
|
|
|
let uppy_used_progressbar = false;
|
2018-04-05 04:29:21 +02:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
function uppy_stub(config) {
|
|
|
|
uppy_stub_called = true;
|
|
|
|
assert.equal(config.debug, false);
|
|
|
|
assert.equal(config.autoProceed, true);
|
|
|
|
assert.equal(config.restrictions.maxFileSize, 25 * 1024 * 1024);
|
|
|
|
assert.equal(Object.keys(config.locale.strings).length, 2);
|
|
|
|
assert("exceedsSize" in config.locale.strings);
|
|
|
|
|
|
|
|
return {
|
|
|
|
setMeta: (params) => {
|
|
|
|
uppy_set_meta_called = true;
|
|
|
|
assert.equal(params.csrfmiddlewaretoken, 'csrf_token');
|
|
|
|
},
|
|
|
|
use: (func, params) => {
|
|
|
|
const func_name = func.name;
|
|
|
|
if (func_name === "XHRUpload") {
|
|
|
|
uppy_used_xhrupload = true;
|
|
|
|
assert.equal(params.endpoint, '/json/user_uploads');
|
|
|
|
assert.equal(params.formData, true);
|
|
|
|
assert.equal(params.fieldName, 'file');
|
|
|
|
assert.equal(params.limit, 5);
|
|
|
|
assert.equal(Object.keys(params.locale.strings).length, 1);
|
|
|
|
assert("timedOut" in params.locale.strings);
|
|
|
|
} else if (func_name === "ProgressBar") {
|
|
|
|
uppy_used_progressbar = true;
|
|
|
|
assert.equal(params.target, '#compose-send-status');
|
|
|
|
assert.equal(params.hideAfterFinish, false);
|
|
|
|
} else {
|
|
|
|
/* istanbul ignore next */
|
|
|
|
assert.fail(`Missing tests for ${func_name}`);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
on: () => {},
|
2018-04-05 04:29:21 +02:00
|
|
|
};
|
2017-11-25 22:22:36 +01:00
|
|
|
}
|
2019-11-21 05:24:55 +01:00
|
|
|
uppy_stub.Plugin = plugin_stub;
|
|
|
|
rewiremock.proxy(() => require("../../static/js/upload"), {'@uppy/core': uppy_stub});
|
|
|
|
upload.setup_upload({mode: "compose"});
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
assert.equal(uppy_stub_called, true);
|
|
|
|
assert.equal(uppy_set_meta_called, true);
|
|
|
|
assert.equal(uppy_used_xhrupload, true);
|
|
|
|
assert.equal(uppy_used_progressbar, true);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
});
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
run_test('file_input', () => {
|
|
|
|
set_global('$', global.make_zjquery());
|
|
|
|
|
|
|
|
upload.setup_upload({mode: "compose"});
|
|
|
|
|
|
|
|
const change_handler = $("body").get_on_handler("change", "#file_input");
|
|
|
|
const files = ["file1", "file2"];
|
|
|
|
const event = {
|
|
|
|
target: {
|
|
|
|
files: files,
|
2020-04-09 20:19:37 +02:00
|
|
|
value: "C:\fakepath\portland.png",
|
2019-11-21 05:24:55 +01:00
|
|
|
},
|
|
|
|
};
|
|
|
|
let upload_files_called = false;
|
|
|
|
upload.upload_files = (uppy, config, files) => {
|
|
|
|
assert.equal(config.mode, "compose");
|
|
|
|
assert.equal(files, files);
|
|
|
|
upload_files_called = true;
|
|
|
|
};
|
|
|
|
change_handler(event);
|
|
|
|
assert(upload_files_called);
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
run_test('file_drop', () => {
|
|
|
|
set_global('$', global.make_zjquery());
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
upload.setup_upload({mode: "compose"});
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
let prevent_default_counter = 0;
|
|
|
|
const drag_event = {
|
|
|
|
preventDefault: () => {
|
|
|
|
prevent_default_counter += 1;
|
|
|
|
},
|
|
|
|
};
|
|
|
|
const dragover_handler = $("#compose").get_on_handler("dragover");
|
|
|
|
dragover_handler(drag_event);
|
|
|
|
assert.equal(prevent_default_counter, 1);
|
|
|
|
|
|
|
|
const dragenter_handler = $("#compose").get_on_handler("dragenter");
|
|
|
|
dragenter_handler(drag_event);
|
|
|
|
assert.equal(prevent_default_counter, 2);
|
|
|
|
|
|
|
|
const files = ["file1", "file2"];
|
|
|
|
const drop_event = {
|
|
|
|
preventDefault: () => {
|
|
|
|
prevent_default_counter += 1;
|
|
|
|
},
|
|
|
|
originalEvent: {
|
|
|
|
dataTransfer: {
|
|
|
|
files: files,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
const drop_handler = $("#compose").get_on_handler("drop");
|
|
|
|
let upload_files_called = false;
|
|
|
|
upload.upload_files = () => {upload_files_called = true;};
|
|
|
|
drop_handler(drop_event);
|
|
|
|
assert.equal(prevent_default_counter, 3);
|
|
|
|
assert.equal(upload_files_called, true);
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test('copy_paste', () => {
|
|
|
|
set_global('$', global.make_zjquery());
|
|
|
|
|
|
|
|
upload.setup_upload({mode: "compose"});
|
|
|
|
|
|
|
|
const paste_handler = $("#compose").get_on_handler("paste");
|
|
|
|
let get_as_file_called = false;
|
|
|
|
let event = {
|
|
|
|
originalEvent: {
|
|
|
|
clipboardData: {
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
kind: "file",
|
|
|
|
getAsFile: () => {
|
|
|
|
get_as_file_called = true;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
kind: "notfile",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
let upload_files_called = false;
|
|
|
|
upload.upload_files = () => {
|
|
|
|
upload_files_called = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
paste_handler(event);
|
|
|
|
assert(get_as_file_called);
|
|
|
|
assert(upload_files_called);
|
|
|
|
|
|
|
|
upload_files_called = false;
|
|
|
|
event = {
|
|
|
|
originalEvent: {},
|
|
|
|
};
|
|
|
|
paste_handler(event);
|
|
|
|
assert.equal(upload_files_called, false);
|
|
|
|
});
|
|
|
|
|
|
|
|
run_test('uppy_events', () => {
|
|
|
|
set_global('$', global.make_zjquery());
|
|
|
|
const callbacks = {};
|
2020-04-14 16:16:49 +02:00
|
|
|
let uppy_cancel_all_called = false;
|
2019-11-21 05:24:55 +01:00
|
|
|
let state = {};
|
2020-04-14 16:16:49 +02:00
|
|
|
let files = [];
|
2018-04-05 04:29:21 +02:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
function uppy_stub() {
|
|
|
|
return {
|
|
|
|
setMeta: () => {},
|
|
|
|
use: () => {},
|
|
|
|
cancelAll: () => {
|
2020-04-14 16:16:49 +02:00
|
|
|
uppy_cancel_all_called = true;
|
2019-11-21 05:24:55 +01:00
|
|
|
},
|
|
|
|
on: (event_name, callback) => {
|
|
|
|
callbacks[event_name] = callback;
|
|
|
|
},
|
2020-04-14 16:16:49 +02:00
|
|
|
getFiles: () => {
|
2020-04-17 17:37:06 +02:00
|
|
|
return [...files];
|
2020-04-14 16:16:49 +02:00
|
|
|
},
|
|
|
|
removeFile: (file_id) => {
|
|
|
|
files = files.filter((file) => {
|
|
|
|
return file.id !== file_id;
|
|
|
|
});
|
|
|
|
},
|
2019-11-21 05:24:55 +01:00
|
|
|
getState: () => {
|
|
|
|
return {
|
|
|
|
info: {
|
|
|
|
type: state.type,
|
|
|
|
details: state.details,
|
|
|
|
message: state.message,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
},
|
|
|
|
};
|
2017-11-25 22:22:36 +01:00
|
|
|
}
|
2019-11-21 05:24:55 +01:00
|
|
|
uppy_stub.Plugin = plugin_stub;
|
|
|
|
rewiremock.proxy(() => require("../../static/js/upload"), {'@uppy/core': uppy_stub});
|
|
|
|
upload.setup_upload({mode: "compose"});
|
2020-03-07 12:44:17 +01:00
|
|
|
assert.equal(Object.keys(callbacks).length, 5);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
const on_upload_success_callback = callbacks["upload-success"];
|
|
|
|
const file = {
|
|
|
|
name: "copenhagen.png",
|
|
|
|
};
|
|
|
|
let response = {
|
|
|
|
body: {
|
|
|
|
uri: "/user_uploads/4/cb/rue1c-MlMUjDAUdkRrEM4BTJ/copenhagen.png",
|
|
|
|
},
|
|
|
|
};
|
|
|
|
let compose_actions_start_called = false;
|
|
|
|
compose_actions.start = () => {
|
|
|
|
compose_actions_start_called = true;
|
|
|
|
};
|
|
|
|
let compose_ui_replace_syntax_called = false;
|
|
|
|
compose_ui.replace_syntax = (old_syntax, new_syntax, textarea) => {
|
|
|
|
compose_ui_replace_syntax_called = true;
|
2020-04-17 17:37:06 +02:00
|
|
|
assert.equal(old_syntax, "[translated: Uploading copenhagen.png…]()");
|
2019-11-21 05:24:55 +01:00
|
|
|
assert.equal(new_syntax, "[copenhagen.png](https://foo.com/user_uploads/4/cb/rue1c-MlMUjDAUdkRrEM4BTJ/copenhagen.png)");
|
|
|
|
assert.equal(textarea, $('#compose-textarea'));
|
|
|
|
};
|
|
|
|
let compose_ui_autosize_textarea_called = false;
|
|
|
|
compose_ui.autosize_textarea = () => {
|
|
|
|
compose_ui_autosize_textarea_called = true;
|
|
|
|
};
|
|
|
|
on_upload_success_callback(file, response);
|
|
|
|
assert(compose_actions_start_called);
|
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
assert(compose_ui_autosize_textarea_called);
|
2017-11-25 22:22:36 +01:00
|
|
|
|
2019-11-21 05:24:55 +01:00
|
|
|
response = {
|
|
|
|
body: {
|
|
|
|
uri: undefined,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
compose_actions_start_called = false;
|
|
|
|
compose_ui_replace_syntax_called = false;
|
|
|
|
compose_ui_autosize_textarea_called = false;
|
|
|
|
on_upload_success_callback(file, response);
|
|
|
|
assert.equal(compose_actions_start_called, false);
|
|
|
|
assert.equal(compose_ui_replace_syntax_called, false);
|
|
|
|
assert.equal(compose_ui_autosize_textarea_called, false);
|
|
|
|
|
|
|
|
const on_complete_callback = callbacks.complete;
|
|
|
|
global.patch_builtin('setTimeout', (func) => {
|
|
|
|
func();
|
|
|
|
});
|
|
|
|
let hide_upload_status_called = false;
|
|
|
|
upload.hide_upload_status = () => {
|
|
|
|
hide_upload_status_called = true;
|
|
|
|
};
|
2020-04-16 18:22:43 +02:00
|
|
|
$("#compose-send-status").removeClass("alert-error");
|
2020-04-14 16:16:49 +02:00
|
|
|
files = [
|
|
|
|
{
|
|
|
|
id: "uppy-zulip/jpeg-1e-image/jpeg-163515-1578367331279",
|
|
|
|
progress: {
|
|
|
|
uploadComplete: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "uppy-github/avatar/png-2v-1e-image/png-329746-1576507125831",
|
|
|
|
progress: {
|
|
|
|
uploadComplete: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
2019-11-21 05:24:55 +01:00
|
|
|
on_complete_callback();
|
|
|
|
assert(hide_upload_status_called);
|
2020-04-14 16:16:49 +02:00
|
|
|
assert.equal(files.length, 0);
|
|
|
|
|
2020-04-16 18:22:43 +02:00
|
|
|
hide_upload_status_called = false;
|
|
|
|
$("#compose-send-status").addClass("alert-error");
|
|
|
|
on_complete_callback();
|
|
|
|
assert(!hide_upload_status_called);
|
|
|
|
|
|
|
|
$("#compose-send-status").removeClass("alert-error");
|
2020-04-14 16:16:49 +02:00
|
|
|
hide_upload_status_called = false;
|
|
|
|
files = [
|
|
|
|
{
|
|
|
|
id: "uppy-zulip/jpeg-1e-image/jpeg-163515-1578367331279",
|
|
|
|
progress: {
|
|
|
|
uploadComplete: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
id: "uppy-github/avatar/png-2v-1e-image/png-329746-1576507125831",
|
|
|
|
progress: {
|
|
|
|
uploadComplete: false,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
on_complete_callback();
|
|
|
|
assert(!hide_upload_status_called);
|
|
|
|
assert.equal(files.length, 1);
|
2019-11-21 05:24:55 +01:00
|
|
|
|
|
|
|
state = {
|
|
|
|
type: "error",
|
|
|
|
details: "Some Error",
|
|
|
|
message: "Some error message",
|
|
|
|
};
|
|
|
|
const on_info_visible_callback = callbacks["info-visible"];
|
|
|
|
let show_error_message_called = false;
|
2020-04-14 16:16:49 +02:00
|
|
|
uppy_cancel_all_called = false;
|
2020-03-07 12:44:17 +01:00
|
|
|
compose_ui_replace_syntax_called = false;
|
|
|
|
const on_restriction_failed_callback = callbacks["restriction-failed"];
|
2019-11-21 05:24:55 +01:00
|
|
|
upload.show_error_message = (config, message) => {
|
|
|
|
show_error_message_called = true;
|
|
|
|
assert.equal(config.mode, "compose");
|
|
|
|
assert.equal(message, "Some error message");
|
|
|
|
};
|
|
|
|
on_info_visible_callback();
|
2020-04-14 16:16:49 +02:00
|
|
|
assert(uppy_cancel_all_called);
|
2019-11-21 05:24:55 +01:00
|
|
|
assert(show_error_message_called);
|
2020-03-07 12:44:17 +01:00
|
|
|
compose_ui.replace_syntax = (old_syntax, new_syntax, textarea) => {
|
|
|
|
compose_ui_replace_syntax_called = true;
|
2020-04-17 17:37:06 +02:00
|
|
|
assert.equal(old_syntax, "[translated: Uploading copenhagen.png…]()");
|
2020-03-07 12:44:17 +01:00
|
|
|
assert.equal(new_syntax, "");
|
|
|
|
assert.equal(textarea, $('#compose-textarea'));
|
|
|
|
};
|
|
|
|
on_restriction_failed_callback(file, null, null);
|
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
compose_ui_replace_syntax_called = false;
|
|
|
|
$('#comepose-textarea').val('user modified text');
|
|
|
|
on_restriction_failed_callback(file, null, null);
|
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
assert.equal($('#comepose-textarea').val(), 'user modified text');
|
2019-11-21 05:24:55 +01:00
|
|
|
|
|
|
|
state = {
|
|
|
|
type: "error",
|
|
|
|
message: "No Internet connection",
|
|
|
|
};
|
2020-04-14 16:16:49 +02:00
|
|
|
uppy_cancel_all_called = false;
|
2019-11-21 05:24:55 +01:00
|
|
|
on_info_visible_callback();
|
|
|
|
|
|
|
|
state = {
|
|
|
|
type: "error",
|
|
|
|
details: "Upload Error",
|
|
|
|
};
|
2020-04-14 16:16:49 +02:00
|
|
|
uppy_cancel_all_called = false;
|
2019-11-21 05:24:55 +01:00
|
|
|
on_info_visible_callback();
|
|
|
|
|
|
|
|
const on_upload_error_callback = callbacks["upload-error"];
|
|
|
|
show_error_message_called = false;
|
2020-03-07 12:54:07 +01:00
|
|
|
compose_ui_replace_syntax_called = false;
|
2019-11-21 05:24:55 +01:00
|
|
|
upload.show_error_message = (config, message) => {
|
|
|
|
show_error_message_called = true;
|
|
|
|
assert.equal(config.mode, "compose");
|
|
|
|
assert.equal(message, "Response message");
|
|
|
|
};
|
|
|
|
response = {
|
|
|
|
body: {
|
|
|
|
msg: "Response message",
|
|
|
|
},
|
|
|
|
};
|
2020-04-14 16:16:49 +02:00
|
|
|
uppy_cancel_all_called = false;
|
2020-03-07 12:54:07 +01:00
|
|
|
on_upload_error_callback(file, null, response);
|
2020-04-14 16:16:49 +02:00
|
|
|
assert(uppy_cancel_all_called);
|
2019-11-21 05:24:55 +01:00
|
|
|
assert(show_error_message_called);
|
2020-03-07 12:54:07 +01:00
|
|
|
assert(compose_ui_replace_syntax_called);
|
2019-11-21 05:24:55 +01:00
|
|
|
|
2020-03-07 12:54:07 +01:00
|
|
|
compose_ui_replace_syntax_called = false;
|
2019-11-21 05:24:55 +01:00
|
|
|
upload.show_error_message = (config, message) => {
|
|
|
|
show_error_message_called = true;
|
|
|
|
assert.equal(config.mode, "compose");
|
|
|
|
assert.equal(message, null);
|
|
|
|
};
|
2020-04-14 16:16:49 +02:00
|
|
|
uppy_cancel_all_called = false;
|
2020-03-07 12:54:07 +01:00
|
|
|
on_upload_error_callback(file, null, null);
|
2020-04-14 16:16:49 +02:00
|
|
|
assert(uppy_cancel_all_called);
|
2019-11-21 05:24:55 +01:00
|
|
|
assert(show_error_message_called);
|
2020-03-07 12:54:07 +01:00
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
show_error_message_called = false;
|
|
|
|
$('#comepose-textarea').val('user modified text');
|
|
|
|
uppy_cancel_all_called = false;
|
|
|
|
on_upload_error_callback(file, null);
|
|
|
|
assert(uppy_cancel_all_called);
|
|
|
|
assert(show_error_message_called);
|
|
|
|
assert(compose_ui_replace_syntax_called);
|
|
|
|
assert.equal($('#comepose-textarea').val(), 'user modified text');
|
|
|
|
|
|
|
|
|
2018-05-15 12:40:07 +02:00
|
|
|
});
|