| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- sap.ui.define([
- "sap/ui/core/util/MockServer",
- "sap/ui/model/json/JSONModel",
- "sap/base/Log"
- ], function (MockServer, JSONModel, Log) {
- "use strict";
- var oMockServer,
- _sAppPath = "sap/ui/demo/orderbrowser/",
- _sJsonFilesPath = _sAppPath + "localService/mockdata";
- var oMockServerInterface = {
- /**
- * 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
- * @returns{Promise} a promise that is resolved when the mock server has been started
- */
- init : function (oOptionsParameter) {
- var oOptions = oOptionsParameter || {};
- return new Promise(function(fnResolve) {
- var sManifestUrl = sap.ui.require.toUrl(_sAppPath + "manifest.json"),
- oManifestModel = new JSONModel(sManifestUrl);
- oManifestModel.attachRequestCompleted(function () {
- var oUriParameters = new URLSearchParams(window.location.search),
- // parse manifest for local metadata 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 = /.*\/$/.test(oMainDataSource.uri) ? oMainDataSource.uri : oMainDataSource.uri + "/";
- // 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 requesti
- 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 () {
- Log.error("Failed to load application manifest");
- fnResolve();
- });
- });
- },
- /**
- * @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;
- });
|