119 lines
4.6 KiB
JavaScript
119 lines
4.6 KiB
JavaScript
/**
|
|
* Provides helper methods for invoking Studio editors in Jasmine tests.
|
|
*/
|
|
define(["jquery", "underscore", "js/common_helpers/ajax_helpers", "js/common_helpers/template_helpers",
|
|
"js/spec_helpers/modal_helpers", "js/views/modals/edit_xblock", "js/collections/component_template",
|
|
"xmodule", "coffee/src/main", "xblock/cms.runtime.v1"],
|
|
function($, _, AjaxHelpers, TemplateHelpers, modal_helpers, EditXBlockModal, ComponentTemplates) {
|
|
|
|
var installMockXBlock, uninstallMockXBlock, installMockXModule, uninstallMockXModule,
|
|
mockComponentTemplates, installEditTemplates, showEditModal, verifyXBlockRequest;
|
|
|
|
installMockXBlock = function(mockResult) {
|
|
window.MockXBlock = function(runtime, element) {
|
|
var block = {
|
|
runtime: runtime
|
|
};
|
|
if (mockResult) {
|
|
block.save = function() {
|
|
return mockResult;
|
|
};
|
|
}
|
|
return block;
|
|
};
|
|
};
|
|
|
|
uninstallMockXBlock = function() {
|
|
window.MockXBlock = null;
|
|
};
|
|
|
|
installMockXModule = function(mockResult) {
|
|
window.MockDescriptor = _.extend(XModule.Descriptor, {
|
|
save: function() {
|
|
return mockResult;
|
|
}
|
|
});
|
|
};
|
|
|
|
uninstallMockXModule = function() {
|
|
window.MockDescriptor = null;
|
|
};
|
|
|
|
mockComponentTemplates = new ComponentTemplates([
|
|
{
|
|
templates: [
|
|
{
|
|
category: 'discussion',
|
|
display_name: 'Discussion'
|
|
}],
|
|
type: 'discussion'
|
|
}, {
|
|
"templates": [
|
|
{
|
|
"category": "html",
|
|
"boilerplate_name": null,
|
|
"display_name": "Text"
|
|
}, {
|
|
"category": "html",
|
|
"boilerplate_name": "announcement.yaml",
|
|
"display_name": "Announcement"
|
|
}, {
|
|
"category": "html",
|
|
"boilerplate_name": "raw.yaml",
|
|
"display_name": "Raw HTML"
|
|
}],
|
|
"type": "html"
|
|
}],
|
|
{
|
|
parse: true
|
|
});
|
|
|
|
installEditTemplates = function(append) {
|
|
modal_helpers.installModalTemplates(append);
|
|
|
|
// Add templates needed by the add XBlock menu
|
|
TemplateHelpers.installTemplate('add-xblock-component');
|
|
TemplateHelpers.installTemplate('add-xblock-component-button');
|
|
TemplateHelpers.installTemplate('add-xblock-component-menu');
|
|
TemplateHelpers.installTemplate('add-xblock-component-menu-problem');
|
|
|
|
// Add templates needed by the edit XBlock modal
|
|
TemplateHelpers.installTemplate('edit-xblock-modal');
|
|
TemplateHelpers.installTemplate('editor-mode-button');
|
|
|
|
// Add templates needed by the settings editor
|
|
TemplateHelpers.installTemplate('metadata-editor');
|
|
TemplateHelpers.installTemplate('metadata-number-entry', false, 'metadata-number-entry');
|
|
TemplateHelpers.installTemplate('metadata-string-entry', false, 'metadata-string-entry');
|
|
};
|
|
|
|
showEditModal = function(requests, xblockElement, model, mockHtml, options) {
|
|
var modal = new EditXBlockModal({});
|
|
modal.edit(xblockElement, model, options);
|
|
AjaxHelpers.respondWithJson(requests, {
|
|
html: mockHtml,
|
|
"resources": []
|
|
});
|
|
return modal;
|
|
};
|
|
|
|
verifyXBlockRequest = function (requests, expectedJson) {
|
|
var request = requests[requests.length - 1],
|
|
actualJson = JSON.parse(request.requestBody);
|
|
expect(request.url).toEqual("/xblock/");
|
|
expect(request.method).toEqual("POST");
|
|
expect(actualJson).toEqual(expectedJson);
|
|
};
|
|
|
|
return $.extend(modal_helpers, {
|
|
'installMockXBlock': installMockXBlock,
|
|
'uninstallMockXBlock': uninstallMockXBlock,
|
|
'installMockXModule': installMockXModule,
|
|
'uninstallMockXModule': uninstallMockXModule,
|
|
'mockComponentTemplates': mockComponentTemplates,
|
|
'installEditTemplates': installEditTemplates,
|
|
'showEditModal': showEditModal,
|
|
'verifyXBlockRequest': verifyXBlockRequest
|
|
});
|
|
});
|