Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

sap.ui.

define([
"sap/ui/core/util/MockServer",
"sap/ui/model/json/JSONModel",
"sap/base/util/UriParameters",
"sap/base/Log"
], function (MockServer, JSONModel, UriParameters, Log) {
"use strict";

// var oMockServer,
// _sAppPath = "project/",
// _sJsonFilesPath = _sAppPath + "localService/mockdata";

// var oMockServerInterface = {
var _sAppPath = "sap/ui/demo/nav/",
_sJsonFilesPath = _sAppPath + "localService/mockdata";

return {
/**
* Initializes the mock server asynchronously.
* You can configure the delay with the URL parameter "serverDelay".
* The local mock data in this folder is returned instead of the real data
for testing.
* @protected
* @param {object} [oOptionsParameter] init parameters for the mockserver
* @returns{Promise} a promise that is resolved when the mock server has
been started
*/
// init: function (oOptionsParameter) {
// var oOptions = oOptionsParameter || {};
init: function () {

return new Promise(function (fnResolve, fnReject) {


var sManifestUrl = sap.ui.require.toUrl(_sAppPath +
"manifest.json"),
oManifestModel = new JSONModel(sManifestUrl);

oManifestModel.attachRequestCompleted(function () {
var oUriParameters = new UriParameters(window.location.href),
// parse manifest for local metatadata URI
sJsonFilesUrl = sap.ui.require.toUrl(_sJsonFilesPath),
oMainDataSource =
oManifestModel.getProperty("/sap.app/dataSources/mainService"),
sMetadataUrl = sap.ui.require.toUrl(_sAppPath +
oMainDataSource.settings.localUri),
// ensure there is a trailing slash
sMockServerUrl = oMainDataSource.uri && new
URI(oMainDataSource.uri).absoluteTo(sap.ui.require.toUrl(_sAppPath)).toString();

// create a mock server instance or stop the existing one to


reinitialize
if (!oMockServer) {
oMockServer = new MockServer({
rootUri: sMockServerUrl
});
} else {
oMockServer.stop();
}

// configure mock server with the given options or a default


delay of 0.5s
MockServer.config({
autoRespond: true,
autoRespondAfter: (oOptions.delay ||
oUriParameters.get("serverDelay") || 500)
});

// simulate all requests using mock data


oMockServer.simulate(sMetadataUrl, {
sMockdataBaseUrl: sJsonFilesUrl,
bGenerateMissingMockData: true
});

var aRequests = oMockServer.getRequests();

// compose an error response for each request


var fnResponse = function (iErrCode, sMessage, aRequest) {
aRequest.response = function (oXhr) {
oXhr.respond(iErrCode, { "Content-Type":
"text/plain;charset=utf-8" }, sMessage);
};
};

// simulate metadata errors


if (oOptions.metadataError ||
oUriParameters.get("metadataError")) {
aRequests.forEach(function (aEntry) {
if (aEntry.path.toString().indexOf("$metadata") > -1) {
fnResponse(500, "metadata Error", aEntry);
}
});
}

// simulate request errors


var sErrorParam = oOptions.errorType ||
oUriParameters.get("errorType"),
iErrorCode = sErrorParam === "badRequest" ? 400 : 500;
if (sErrorParam) {
aRequests.forEach(function (aEntry) {
fnResponse(iErrorCode, sErrorParam, aEntry);
});
}

// custom mock behaviour may be added here

// set requests and start the server


oMockServer.setRequests(aRequests);
oMockServer.start();

Log.info("Running the app with mock data");


fnResolve();
});

oManifestModel.attachRequestFailed(function () {
var sError = "Failed to load application manifest";

Log.error(sError);
fnReject(new Error(sError));
});
});
},

/**
* @public returns the mockserver of the app, should be used in integration
tests
* @returns {sap.ui.core.util.MockServer} the mockserver instance
*/
getMockServer: function () {
return oMockServer;
}
};

return oMockServerInterface;
});

You might also like