Files
edx-platform/cms/static/js/spec/transcripts/message_manager_spec.js
2014-02-06 08:00:25 -05:00

286 lines
9.9 KiB
JavaScript

define(
[
"jquery", "underscore",
"js/views/transcripts/utils", "js/views/transcripts/message_manager",
"js/views/transcripts/file_uploader", "sinon", "jasmine-jquery",
"xmodule"
],
function ($, _, Utils, MessageManager, FileUploader, sinon) {
describe('Transcripts.MessageManager', function () {
var videoListEntryTemplate = readFixtures(
'transcripts/metadata-videolist-entry.underscore'
),
foundTemplate = readFixtures(
'transcripts/messages/transcripts-found.underscore'
),
handlers = {
importHandler: ['replace', 'Error: Import failed.'],
replaceHandler: ['replace', 'Error: Replacing failed.'],
chooseHandler: ['choose', 'Error: Choosing failed.', 'video_id']
},
view, fileUploader, sinonXhr;
beforeEach(function () {
var videoList, $container;
fileUploader = FileUploader.prototype;
setFixtures(
$("<div>", {id: "metadata-videolist-entry"})
.html(videoListEntryTemplate)
);
appendSetFixtures(
$("<script>",
{
id: "transcripts-found",
type: "text/template"
}
).text(foundTemplate)
);
videoList = jasmine.createSpyObj(
'MetadataView.VideoList',
['getVideoObjectsList']
);
$container = $('#metadata-videolist-entry');
spyOn(fileUploader, 'initialize');
spyOn(console, 'error');
spyOn(Utils.Storage, 'set');
view = new MessageManager({
el: $container,
parent: videoList,
component_locator: 'component_locator'
});
});
it('Initialize', function () {
expect(fileUploader.initialize).toHaveBeenCalledWith({
el: view.$el,
messenger: view,
component_locator: view.component_locator,
videoListObject: view.options.parent
});
});
// Disabled 2/6/14 after intermittent failure in master
xdescribe('Render', function () {
beforeEach(function () {
spyOn(_,'template').andCallThrough();
spyOn(fileUploader, 'render');
});
it('Template doesn\'t exist', function () {
view.render('incorrect_template_name');
expect(console.error).toHaveBeenCalled();
expect(_.template).not.toHaveBeenCalled();
expect(view.$el.find('.transcripts-status'))
.toHaveClass('is-invisible');
expect(fileUploader.render).not.toHaveBeenCalled();
});
it('All works okay if correct data is passed', function () {
view.render('found');
expect(console.error).not.toHaveBeenCalled();
expect(_.template).toHaveBeenCalled();
expect(view.$el).not.toHaveClass('is-invisible');
expect(fileUploader.render).toHaveBeenCalled();
});
});
describe('showError', function () {
var errorMessage ='error',
$error, $buttons;
beforeEach(function () {
view.render('found');
spyOn(view, 'hideError');
spyOn($.fn, 'html').andCallThrough();
$error = view.$el.find('.transcripts-error-message');
$buttons = view.$el.find('.wrapper-transcripts-buttons');
});
it('Error message is not passed', function () {
view.showError(null);
expect(view.hideError).not.toHaveBeenCalled();
expect($error.html).not.toHaveBeenCalled();
expect($error).toHaveClass('is-invisible');
expect($buttons).not.toHaveClass('is-invisible');
});
it('Show message and buttons', function () {
view.showError(errorMessage);
expect(view.hideError).toHaveBeenCalled();
expect($error.html).toHaveBeenCalled();
expect($error).not.toHaveClass('is-invisible');
expect($buttons).not.toHaveClass('is-invisible');
});
it('Show message and hide buttons', function () {
view.showError(errorMessage, true);
expect(view.hideError).toHaveBeenCalled();
expect($error.html).toHaveBeenCalled();
expect($error).not.toHaveClass('is-invisible');
expect($buttons).toHaveClass('is-invisible');
});
});
it('hideError', function () {
view.render('found');
var $error = view.$el.find('.transcripts-error-message'),
$buttons = view.$el.find('.wrapper-transcripts-buttons');
expect($error).toHaveClass('is-invisible');
expect($buttons).not.toHaveClass('is-invisible');
});
$.each(handlers, function(key, value) {
it(key, function () {
var eventObj = jasmine.createSpyObj('event', ['preventDefault']);
spyOn($.fn, 'data').andReturn('video_id');
spyOn(view, 'processCommand');
view[key](eventObj);
expect(view.processCommand.mostRecentCall.args).toEqual(value);
});
});
describe('processCommand', function () {
var action = 'replace',
errorMessage = 'errorMessage',
videoList = void(0),
extraParamas = 'video_id';
beforeEach(function () {
view.render('found');
spyOn(Utils, 'command').andCallThrough();
spyOn(view, 'render');
spyOn(view, 'showError');
sinonXhr = sinon.fakeServer.create();
sinonXhr.autoRespond = true;
});
afterEach(function () {
sinonXhr.restore();
});
var assertCommand = function (config, expectFunc) {
var flag = false,
defaults = {
action: 'replace',
errorMessage: 'errorMessage',
extraParamas: void(0)
};
args = $.extend({}, defaults, config);
runs(function() {
view
.processCommand(
args.action,
args.errorMessage,
args.extraParamas
)
.always(function () { flag = true; });
});
waitsFor(function() {
return flag;
}, "Ajax Timeout", 750);
runs(expectFunc);
};
it('Invoke without extraParamas', function () {
sinonXhr.respondWith([
200,
{ "Content-Type": "application/json"},
JSON.stringify({
status: 'Success',
subs: 'video_id'
})
]);
assertCommand(
{ },
function() {
expect(Utils.command).toHaveBeenCalledWith(
action,
view.component_locator,
videoList,
void(0)
);
expect(view.showError).not.toHaveBeenCalled();
expect(view.render.mostRecentCall.args[0])
.toEqual('found');
expect(Utils.Storage.set).toHaveBeenCalled();
}
);
});
it('Invoke with extraParamas', function () {
sinonXhr.respondWith([
200,
{ "Content-Type": "application/json"},
JSON.stringify({
status: 'Success',
subs: 'video_id'
})
]);
view.processCommand(action, errorMessage, extraParamas);
assertCommand(
{ extraParamas : extraParamas },
function () {
expect(Utils.command).toHaveBeenCalledWith(
action,
view.component_locator,
videoList,
{
html5_id: extraParamas
}
);
expect(view.showError).not.toHaveBeenCalled();
expect(view.render.mostRecentCall.args[0])
.toEqual('found');
expect(Utils.Storage.set).toHaveBeenCalled();
}
);
});
it('Fail', function () {
sinonXhr.respondWith([400, {}, '']);
assertCommand(
{ },
function () {
expect(Utils.command).toHaveBeenCalledWith(
action,
view.component_locator,
videoList,
void(0)
);
expect(view.showError).toHaveBeenCalled();
expect(view.render).not.toHaveBeenCalled();
expect(Utils.Storage.set).not.toHaveBeenCalled();
}
);
});
});
});
});