These changes implement STUD-813. The commit consists of the following logical changes: - a REST API has been implemented for a course's assets - the page itself now fetches the assets client-side - the Backbone.Paginator library is used to support pagination - the AssetCollection has been refactored to extend Backbone.Paginator.requestPager so that it can be paged - an abstract PagingView class has been added to generalize the communication with a paging REST API - the AssetsView has been reimplemented to extend PagingView - two new child views have been added: - PagingHeader: the paging controls above the list of assets - PagingFooter: the paging controls below the assets
59 lines
2.0 KiB
JavaScript
59 lines
2.0 KiB
JavaScript
define(["sinon"], function(sinon) {
|
|
/* These utility methods are used by Jasmine tests to create a mock server or
|
|
* get reference to mock requests. In either case, the cleanup (restore) is done with
|
|
* an after function.
|
|
*
|
|
* This pattern is being used instead of the more common beforeEach/afterEach pattern
|
|
* because we were seeing sporadic failures in the afterEach restore call. The cause of the
|
|
* errors were that one test suite was incorrectly being linked as the parent of an unrelated
|
|
* test suite (causing both suites' afterEach methods to be called). No solution for the root
|
|
* cause has been found, but initializing sinon and cleaning it up on a method-by-method
|
|
* basis seems to work. For more details, see STUD-1040.
|
|
*/
|
|
|
|
/**
|
|
* Get a reference to the mocked server, and respond
|
|
* to all requests with the specified statusCode.
|
|
*/
|
|
var fakeServer = function (statusCode, that) {
|
|
var server = sinon.fakeServer.create();
|
|
that.after(function() {
|
|
server.restore();
|
|
});
|
|
server.respondWith([statusCode, {}, '']);
|
|
return server;
|
|
};
|
|
|
|
/**
|
|
* Keep track of all requests to a fake server, and
|
|
* return a reference to the Array. This allows tests
|
|
* to respond for individual requests.
|
|
*/
|
|
var fakeRequests = function (that) {
|
|
var requests = [];
|
|
var xhr = sinon.useFakeXMLHttpRequest();
|
|
xhr.onCreate = function(request) {
|
|
requests.push(request);
|
|
};
|
|
|
|
that.after(function() {
|
|
xhr.restore();
|
|
});
|
|
|
|
return requests;
|
|
};
|
|
|
|
var respondWithJson = function(requests, jsonResponse, requestIndex) {
|
|
requestIndex = requestIndex || requests.length - 1;
|
|
requests[requestIndex].respond(200,
|
|
{ "Content-Type": "application/json" },
|
|
JSON.stringify(jsonResponse));
|
|
};
|
|
|
|
return {
|
|
"server": fakeServer,
|
|
"requests": fakeRequests,
|
|
"respondWithJson": respondWithJson
|
|
};
|
|
});
|