@sapui5/sap.fe.test 1.95.0 → 1.98.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -3
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/BaseActions.js +1 -1
- package/src/sap/fe/test/BaseArrangements.js +1 -1
- package/src/sap/fe/test/BaseAssertions.js +1 -1
- package/src/sap/fe/test/ConfirmDialog.js +1 -1
- package/src/sap/fe/test/FCLView.js +1 -7
- package/src/sap/fe/test/Flexibility.js +46 -12
- package/src/sap/fe/test/FlexibleColumnLayout.js +1 -1
- package/src/sap/fe/test/JestTemplatingHelper.js +99 -6
- package/src/sap/fe/test/JestTemplatingHelper.ts +65 -3
- package/src/sap/fe/test/JourneyRunner.js +9 -4
- package/src/sap/fe/test/ListReport.js +9 -15
- package/src/sap/fe/test/LocationUtil.js +1 -1
- package/src/sap/fe/test/ObjectPage.js +60 -50
- package/src/sap/fe/test/Shell.js +17 -12
- package/src/sap/fe/test/Stubs.js +1 -1
- package/src/sap/fe/test/TemplatePage.js +1 -13
- package/src/sap/fe/test/TemplatingTestUtils.js +2 -2
- package/src/sap/fe/test/UI5MockHelper.js +405 -0
- package/src/sap/fe/test/UI5MockHelper.ts +246 -0
- package/src/sap/fe/test/Utils.js +6 -14
- package/src/sap/fe/test/api/APIHelper.js +1 -1
- package/src/sap/fe/test/api/BaseAPI.js +23 -8
- package/src/sap/fe/test/api/ChartActions.js +1 -1
- package/src/sap/fe/test/api/ChartAssertions.js +6 -2
- package/src/sap/fe/test/api/DialogAPI.js +10 -6
- package/src/sap/fe/test/api/DialogActions.js +19 -6
- package/src/sap/fe/test/api/DialogAssertions.js +26 -6
- package/src/sap/fe/test/api/DialogCreateActions.js +1 -1
- package/src/sap/fe/test/api/DialogCreateAssertions.js +1 -1
- package/src/sap/fe/test/api/DialogMessageActions.js +1 -1
- package/src/sap/fe/test/api/DialogMessageAssertions.js +1 -1
- package/src/sap/fe/test/api/DialogType.js +1 -1
- package/src/sap/fe/test/api/DialogValueHelpActions.js +1 -1
- package/src/sap/fe/test/api/DialogValueHelpAssertions.js +1 -1
- package/src/sap/fe/test/api/EditState.js +10 -1
- package/src/sap/fe/test/api/FilterBarAPI.js +1 -1
- package/src/sap/fe/test/api/FilterBarActions.js +39 -5
- package/src/sap/fe/test/api/FilterBarAssertions.js +1 -1
- package/src/sap/fe/test/api/FooterAPI.js +1 -1
- package/src/sap/fe/test/api/FooterActionsBase.js +1 -1
- package/src/sap/fe/test/api/FooterActionsOP.js +1 -1
- package/src/sap/fe/test/api/FooterAssertionsBase.js +1 -1
- package/src/sap/fe/test/api/FooterAssertionsOP.js +1 -1
- package/src/sap/fe/test/api/FormAPI.js +1 -1
- package/src/sap/fe/test/api/FormActions.js +1 -1
- package/src/sap/fe/test/api/FormAssertions.js +34 -5
- package/src/sap/fe/test/api/HeaderAPI.js +1 -1
- package/src/sap/fe/test/api/HeaderActions.js +1 -1
- package/src/sap/fe/test/api/HeaderActionsLR.js +1 -1
- package/src/sap/fe/test/api/HeaderAssertions.js +1 -1
- package/src/sap/fe/test/api/HeaderAssertionsLR.js +1 -1
- package/src/sap/fe/test/api/HeaderLR.js +1 -1
- package/src/sap/fe/test/api/KPICardAPI.js +1 -1
- package/src/sap/fe/test/api/KPICardActions.js +42 -0
- package/src/sap/fe/test/api/KPICardAssertions.js +42 -16
- package/src/sap/fe/test/api/TableAPI.js +1 -1
- package/src/sap/fe/test/api/TableActions.js +2 -2
- package/src/sap/fe/test/api/TableAssertions.js +12 -1
- package/src/sap/fe/test/builder/DialogBuilder.js +1 -1
- package/src/sap/fe/test/builder/FEBuilder.js +1 -1
- package/src/sap/fe/test/builder/KPIBuilder.js +28 -3
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +1 -1
- package/src/sap/fe/test/builder/MdcFieldBuilder.js +1 -1
- package/src/sap/fe/test/builder/MdcFilterBarBuilder.js +1 -1
- package/src/sap/fe/test/builder/MdcFilterFieldBuilder.js +1 -1
- package/src/sap/fe/test/builder/MdcTableBuilder.js +23 -1
- package/src/sap/fe/test/builder/OverflowToolbarBuilder.js +1 -1
- package/src/sap/fe/test/builder/VMBuilder.js +1 -1
- package/src/sap/fe/test/internal/FEArrangements.js +1 -1
- package/src/sap/fe/test/internal/FEJourneyRunner.js +1 -1
- package/src/sap/fe/test/library.js +2 -2
- package/src/sap/fe/test/massEdit.js +1 -1
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
|
+
*/
|
|
5
|
+
sap.ui.define([], function () {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
var _exports = {};
|
|
9
|
+
|
|
10
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
11
|
+
|
|
12
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
13
|
+
|
|
14
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
15
|
+
|
|
16
|
+
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
17
|
+
|
|
18
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
19
|
+
|
|
20
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
21
|
+
|
|
22
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
23
|
+
|
|
24
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
25
|
+
|
|
26
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
27
|
+
|
|
28
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
29
|
+
|
|
30
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Mock class for a V4 Context
|
|
34
|
+
*/
|
|
35
|
+
var MockContext = /*#__PURE__*/function () {
|
|
36
|
+
function MockContext(oValues, oBinding) {
|
|
37
|
+
var _this = this;
|
|
38
|
+
|
|
39
|
+
_classCallCheck(this, MockContext);
|
|
40
|
+
|
|
41
|
+
_defineProperty(this, "getProperty", jest.fn(function (key) {
|
|
42
|
+
return _this.oValues[key];
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
_defineProperty(this, "setProperty", jest.fn(function (key, value) {
|
|
46
|
+
_this.oValues[key] = value;
|
|
47
|
+
return _this.oValues[key];
|
|
48
|
+
}));
|
|
49
|
+
|
|
50
|
+
_defineProperty(this, "getObject", jest.fn(function (key) {
|
|
51
|
+
return _this.oValues[key];
|
|
52
|
+
}));
|
|
53
|
+
|
|
54
|
+
_defineProperty(this, "getPath", jest.fn(function () {
|
|
55
|
+
return _this.oValues["$path"];
|
|
56
|
+
}));
|
|
57
|
+
|
|
58
|
+
_defineProperty(this, "getBinding", jest.fn(function () {
|
|
59
|
+
return _this.oBinding;
|
|
60
|
+
}));
|
|
61
|
+
|
|
62
|
+
_defineProperty(this, "getModel", jest.fn(function () {
|
|
63
|
+
var _this$oBinding;
|
|
64
|
+
|
|
65
|
+
return (_this$oBinding = _this.oBinding) === null || _this$oBinding === void 0 ? void 0 : _this$oBinding.getModel();
|
|
66
|
+
}));
|
|
67
|
+
|
|
68
|
+
_defineProperty(this, "isTransient", jest.fn());
|
|
69
|
+
|
|
70
|
+
this.oValues = oValues;
|
|
71
|
+
this.oBinding = oBinding;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
_exports.MockContext = MockContext;
|
|
75
|
+
|
|
76
|
+
_createClass(MockContext, [{
|
|
77
|
+
key: "isA",
|
|
78
|
+
value: function isA(sClassName) {
|
|
79
|
+
return sClassName === "sap.ui.model.odata.v4.Context";
|
|
80
|
+
}
|
|
81
|
+
}]);
|
|
82
|
+
|
|
83
|
+
return MockContext;
|
|
84
|
+
}();
|
|
85
|
+
|
|
86
|
+
_exports.MockContext = MockContext;
|
|
87
|
+
|
|
88
|
+
var MockUI5Element = function MockUI5Element() {
|
|
89
|
+
_classCallCheck(this, MockUI5Element);
|
|
90
|
+
|
|
91
|
+
_defineProperty(this, "bindingContext", new MockContext({}));
|
|
92
|
+
|
|
93
|
+
_defineProperty(this, "getBinding", jest.fn());
|
|
94
|
+
|
|
95
|
+
_defineProperty(this, "getBindingContext", jest.fn().mockReturnValue(this.bindingContext));
|
|
96
|
+
|
|
97
|
+
_defineProperty(this, "getBindingInfo", jest.fn());
|
|
98
|
+
|
|
99
|
+
_defineProperty(this, "data", jest.fn());
|
|
100
|
+
|
|
101
|
+
_defineProperty(this, "getModel", jest.fn());
|
|
102
|
+
|
|
103
|
+
_defineProperty(this, "getParent", jest.fn());
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
_exports.MockUI5Element = MockUI5Element;
|
|
107
|
+
|
|
108
|
+
var MockControl = /*#__PURE__*/function (_MockUI5Element) {
|
|
109
|
+
_inherits(MockControl, _MockUI5Element);
|
|
110
|
+
|
|
111
|
+
var _super = _createSuper(MockControl);
|
|
112
|
+
|
|
113
|
+
function MockControl() {
|
|
114
|
+
_classCallCheck(this, MockControl);
|
|
115
|
+
|
|
116
|
+
return _super.apply(this, arguments);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
_exports.MockControl = MockControl;
|
|
120
|
+
return MockControl;
|
|
121
|
+
}(MockUI5Element);
|
|
122
|
+
|
|
123
|
+
_exports.MockControl = MockControl;
|
|
124
|
+
|
|
125
|
+
var MockEvent = function MockEvent() {
|
|
126
|
+
var _this2 = this;
|
|
127
|
+
|
|
128
|
+
var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
129
|
+
var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new MockUI5Element();
|
|
130
|
+
|
|
131
|
+
_classCallCheck(this, MockEvent);
|
|
132
|
+
|
|
133
|
+
_defineProperty(this, "getParameter", jest.fn(function (name) {
|
|
134
|
+
return _this2.params[name];
|
|
135
|
+
}));
|
|
136
|
+
|
|
137
|
+
_defineProperty(this, "getSource", jest.fn(function () {
|
|
138
|
+
return _this2.source;
|
|
139
|
+
}));
|
|
140
|
+
|
|
141
|
+
this.params = params;
|
|
142
|
+
this.source = source;
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* Mock class for OData V4 ListBinding
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
_exports.MockEvent = MockEvent;
|
|
150
|
+
|
|
151
|
+
var MockListBinding = /*#__PURE__*/function () {
|
|
152
|
+
function MockListBinding(aContexts, mockModel) {
|
|
153
|
+
var _this3 = this;
|
|
154
|
+
|
|
155
|
+
_classCallCheck(this, MockListBinding);
|
|
156
|
+
|
|
157
|
+
_defineProperty(this, "setAggregation", jest.fn());
|
|
158
|
+
|
|
159
|
+
_defineProperty(this, "filter", jest.fn());
|
|
160
|
+
|
|
161
|
+
_defineProperty(this, "sort", jest.fn());
|
|
162
|
+
|
|
163
|
+
_defineProperty(this, "requestContexts", jest.fn(function () {
|
|
164
|
+
return Promise.resolve(_this3.aMockContexts);
|
|
165
|
+
}));
|
|
166
|
+
|
|
167
|
+
_defineProperty(this, "getCurrentContexts", jest.fn(function () {
|
|
168
|
+
return _this3.aMockContexts;
|
|
169
|
+
}));
|
|
170
|
+
|
|
171
|
+
_defineProperty(this, "getModel", jest.fn(function () {
|
|
172
|
+
return _this3.mockModel;
|
|
173
|
+
}));
|
|
174
|
+
|
|
175
|
+
this.mockModel = mockModel;
|
|
176
|
+
aContexts = aContexts || [];
|
|
177
|
+
this.aMockContexts = aContexts.map(function (context) {
|
|
178
|
+
return new MockContext(context, _this3);
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
_exports.MockListBinding = MockListBinding;
|
|
183
|
+
|
|
184
|
+
_createClass(MockListBinding, [{
|
|
185
|
+
key: "isA",
|
|
186
|
+
value: function isA(sClassName) {
|
|
187
|
+
return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
|
|
188
|
+
}
|
|
189
|
+
}, {
|
|
190
|
+
key: "setModel",
|
|
191
|
+
value: function setModel(oModel) {
|
|
192
|
+
this.mockModel = oModel;
|
|
193
|
+
} // Mocked API
|
|
194
|
+
|
|
195
|
+
}]);
|
|
196
|
+
|
|
197
|
+
return MockListBinding;
|
|
198
|
+
}();
|
|
199
|
+
|
|
200
|
+
_exports.MockListBinding = MockListBinding;
|
|
201
|
+
|
|
202
|
+
var MockContextBinding = /*#__PURE__*/function () {
|
|
203
|
+
function MockContextBinding(oContext, mockModel) {
|
|
204
|
+
var _this4 = this;
|
|
205
|
+
|
|
206
|
+
_classCallCheck(this, MockContextBinding);
|
|
207
|
+
|
|
208
|
+
_defineProperty(this, "getBoundContext", jest.fn(function () {
|
|
209
|
+
return _this4.oMockContext;
|
|
210
|
+
}));
|
|
211
|
+
|
|
212
|
+
_defineProperty(this, "attachEventOnce", jest.fn());
|
|
213
|
+
|
|
214
|
+
_defineProperty(this, "getModel", jest.fn(function () {
|
|
215
|
+
return _this4.mockModel;
|
|
216
|
+
}));
|
|
217
|
+
|
|
218
|
+
this.mockModel = mockModel;
|
|
219
|
+
this.oMockContext = new MockContext(oContext || {}, this);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
_exports.MockContextBinding = MockContextBinding;
|
|
223
|
+
|
|
224
|
+
_createClass(MockContextBinding, [{
|
|
225
|
+
key: "isA",
|
|
226
|
+
value: function isA(sClassName) {
|
|
227
|
+
return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
|
|
228
|
+
}
|
|
229
|
+
}, {
|
|
230
|
+
key: "getInternalMockContext",
|
|
231
|
+
value: function getInternalMockContext() {
|
|
232
|
+
return this.oMockContext;
|
|
233
|
+
}
|
|
234
|
+
}, {
|
|
235
|
+
key: "setModel",
|
|
236
|
+
value: function setModel(oModel) {
|
|
237
|
+
this.mockModel = oModel;
|
|
238
|
+
} // Mocked API
|
|
239
|
+
|
|
240
|
+
}]);
|
|
241
|
+
|
|
242
|
+
return MockContextBinding;
|
|
243
|
+
}();
|
|
244
|
+
/**
|
|
245
|
+
* Mock class for OData V4 MetaModel
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
_exports.MockContextBinding = MockContextBinding;
|
|
250
|
+
|
|
251
|
+
var MockMetaModel = function MockMetaModel(oMetaData) {
|
|
252
|
+
var _this5 = this;
|
|
253
|
+
|
|
254
|
+
_classCallCheck(this, MockMetaModel);
|
|
255
|
+
|
|
256
|
+
_defineProperty(this, "getMetaContext", jest.fn(function (sPath) {
|
|
257
|
+
return new MockContext({
|
|
258
|
+
$path: sPath
|
|
259
|
+
});
|
|
260
|
+
}));
|
|
261
|
+
|
|
262
|
+
_defineProperty(this, "getObject", jest.fn(function (sPath) {
|
|
263
|
+
return _this5.oMetaContext.getProperty(sPath);
|
|
264
|
+
}));
|
|
265
|
+
|
|
266
|
+
_defineProperty(this, "requestObject", jest.fn());
|
|
267
|
+
|
|
268
|
+
_defineProperty(this, "createBindingContext", jest.fn(function (sPath) {
|
|
269
|
+
return new MockContext({
|
|
270
|
+
$path: sPath
|
|
271
|
+
});
|
|
272
|
+
}));
|
|
273
|
+
|
|
274
|
+
_defineProperty(this, "getMetaPath", jest.fn());
|
|
275
|
+
|
|
276
|
+
this.oMetaContext = new MockContext(oMetaData || {});
|
|
277
|
+
} // Mocked API
|
|
278
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
279
|
+
;
|
|
280
|
+
/**
|
|
281
|
+
* Mock class for OData V4 Model
|
|
282
|
+
*/
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
_exports.MockMetaModel = MockMetaModel;
|
|
286
|
+
|
|
287
|
+
var MockModel = /*#__PURE__*/function () {
|
|
288
|
+
function MockModel(mockListBinding, mockContextBinding) {
|
|
289
|
+
var _this6 = this;
|
|
290
|
+
|
|
291
|
+
_classCallCheck(this, MockModel);
|
|
292
|
+
|
|
293
|
+
_defineProperty(this, "bindList", jest.fn(function () {
|
|
294
|
+
return _this6.mockListBinding;
|
|
295
|
+
}));
|
|
296
|
+
|
|
297
|
+
_defineProperty(this, "bindContext", jest.fn(function () {
|
|
298
|
+
return _this6.mockContextBinding;
|
|
299
|
+
}));
|
|
300
|
+
|
|
301
|
+
_defineProperty(this, "getMetaModel", jest.fn(function () {
|
|
302
|
+
return _this6.oMetaModel;
|
|
303
|
+
}));
|
|
304
|
+
|
|
305
|
+
_defineProperty(this, "getProperty", jest.fn());
|
|
306
|
+
|
|
307
|
+
_defineProperty(this, "setProperty", jest.fn());
|
|
308
|
+
|
|
309
|
+
this.mockListBinding = mockListBinding;
|
|
310
|
+
this.mockContextBinding = mockContextBinding;
|
|
311
|
+
|
|
312
|
+
if (mockListBinding) {
|
|
313
|
+
mockListBinding.setModel(this);
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
if (mockContextBinding) {
|
|
317
|
+
mockContextBinding.setModel(this);
|
|
318
|
+
}
|
|
319
|
+
} // Factories
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
_exports.MockModel = MockModel;
|
|
323
|
+
|
|
324
|
+
_createClass(MockModel, [{
|
|
325
|
+
key: "setMetaModel",
|
|
326
|
+
value: function setMetaModel(oMetaModel) {
|
|
327
|
+
this.oMetaModel = oMetaModel;
|
|
328
|
+
} // Mocked API
|
|
329
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
330
|
+
|
|
331
|
+
}], [{
|
|
332
|
+
key: "modelFromListBinding",
|
|
333
|
+
value: function modelFromListBinding(mockListBinding) {
|
|
334
|
+
return new MockModel(mockListBinding);
|
|
335
|
+
}
|
|
336
|
+
}, {
|
|
337
|
+
key: "modelFromContextBinding",
|
|
338
|
+
value: function modelFromContextBinding(mockContextBinding) {
|
|
339
|
+
return new MockModel(undefined, mockContextBinding);
|
|
340
|
+
}
|
|
341
|
+
}]);
|
|
342
|
+
|
|
343
|
+
return MockModel;
|
|
344
|
+
}();
|
|
345
|
+
|
|
346
|
+
_exports.MockModel = MockModel;
|
|
347
|
+
|
|
348
|
+
var MockView = function MockView() {
|
|
349
|
+
_classCallCheck(this, MockView);
|
|
350
|
+
|
|
351
|
+
_defineProperty(this, "getController", jest.fn());
|
|
352
|
+
|
|
353
|
+
_defineProperty(this, "getModel", jest.fn());
|
|
354
|
+
|
|
355
|
+
_defineProperty(this, "getViewData", jest.fn());
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
_exports.MockView = MockView;
|
|
359
|
+
|
|
360
|
+
var MockController = function MockController() {
|
|
361
|
+
_classCallCheck(this, MockController);
|
|
362
|
+
|
|
363
|
+
_defineProperty(this, "getView", jest.fn());
|
|
364
|
+
|
|
365
|
+
_defineProperty(this, "_routing", {
|
|
366
|
+
navigateToTarget: jest.fn()
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
_defineProperty(this, "_editFlow", {
|
|
370
|
+
syncTask: jest.fn()
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
_defineProperty(this, "_sideEffects", {
|
|
374
|
+
handleFieldChange: jest.fn()
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
_defineProperty(this, "isA", jest.fn().mockReturnValue(false));
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
_exports.MockController = MockController;
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Generate model, view and controller mocks that refer to each other.
|
|
384
|
+
*
|
|
385
|
+
* @param existing Optional existing mocked instances that should be used
|
|
386
|
+
* @returns Mocked model, view and controller instances
|
|
387
|
+
*/
|
|
388
|
+
function mockMVC(existing) {
|
|
389
|
+
var model = (existing === null || existing === void 0 ? void 0 : existing.model) || new MockModel();
|
|
390
|
+
var view = (existing === null || existing === void 0 ? void 0 : existing.view) || new MockView();
|
|
391
|
+
var controller = (existing === null || existing === void 0 ? void 0 : existing.controller) || new MockController();
|
|
392
|
+
view.getController.mockReturnValue(controller);
|
|
393
|
+
view.getModel.mockReturnValue(model);
|
|
394
|
+
controller.getView.mockReturnValue(view);
|
|
395
|
+
return {
|
|
396
|
+
model: model,
|
|
397
|
+
view: view,
|
|
398
|
+
controller: controller
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
_exports.mockMVC = mockMVC;
|
|
403
|
+
return _exports;
|
|
404
|
+
}, false);
|
|
405
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJqZXN0IiwiZm4iLCJrZXkiLCJ2YWx1ZSIsImdldE1vZGVsIiwic0NsYXNzTmFtZSIsIk1vY2tVSTVFbGVtZW50IiwibW9ja1JldHVyblZhbHVlIiwiYmluZGluZ0NvbnRleHQiLCJNb2NrQ29udHJvbCIsIk1vY2tFdmVudCIsInBhcmFtcyIsInNvdXJjZSIsIm5hbWUiLCJNb2NrTGlzdEJpbmRpbmciLCJhQ29udGV4dHMiLCJtb2NrTW9kZWwiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFNb2NrQ29udGV4dHMiLCJtYXAiLCJjb250ZXh0Iiwib01vZGVsIiwiTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJvTW9ja0NvbnRleHQiLCJNb2NrTWV0YU1vZGVsIiwib01ldGFEYXRhIiwic1BhdGgiLCIkcGF0aCIsIm9NZXRhQ29udGV4dCIsImdldFByb3BlcnR5IiwiTW9ja01vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwib01ldGFNb2RlbCIsInNldE1vZGVsIiwidW5kZWZpbmVkIiwiTW9ja1ZpZXciLCJNb2NrQ29udHJvbGxlciIsIm5hdmlnYXRlVG9UYXJnZXQiLCJzeW5jVGFzayIsImhhbmRsZUZpZWxkQ2hhbmdlIiwibW9ja01WQyIsImV4aXN0aW5nIiwibW9kZWwiLCJ2aWV3IiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJnZXRWaWV3Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRkE7QUFDQTtBQUNBO01BTWFBLFc7QUFDWix5QkFBMkJDLE9BQTNCLEVBQWlEQyxRQUFqRCxFQUFpRTtBQUFBOztBQUFBOztBQUFBLDJDQU01Q0MsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUM3QyxlQUFPLEtBQUks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LEVBQUw7QUFERCxLOzt1Q0FJQztBQUNsQndDLE1BQUFBLFFBQVEsRUFBRXpDLElBQUksQ0FBQ0MsRUFBTDtBQURRLEs7OzBDQUlHO0FBQ3JCeUMsTUFBQUEsaUJBQWlCLEVBQUUxQyxJQUFJLENBQUNDLEVBQUw7QUFERSxLOztpQ0FJaEJELElBQUksQ0FBQ0MsRUFBTCxHQUFVTSxlQUFWLENBQTBCLEtBQTFCLEM7Ozs7O0FBU1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sV0FBU29DLE9BQVQsQ0FBaUJDLFFBQWpCLEVBQXVEO0FBQzdELFFBQU1DLEtBQUssR0FBRyxDQUFBRCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUMsS0FBVixLQUFtQixJQUFJYixTQUFKLEVBQWpDO0FBQ0EsUUFBTWMsSUFBSSxHQUFHLENBQUFGLFFBQVEsU0FBUixJQUFBQSxRQUFRLFdBQVIsWUFBQUEsUUFBUSxDQUFFRSxJQUFWLEtBQWtCLElBQUlSLFFBQUosRUFBL0I7QUFDQSxRQUFNUyxVQUFVLEdBQUcsQ0FBQUgsUUFBUSxTQUFSLElBQUFBLFFBQVEsV0FBUixZQUFBQSxRQUFRLENBQUVHLFVBQVYsS0FBd0IsSUFBSVIsY0FBSixFQUEzQztBQUVBTyxJQUFBQSxJQUFJLENBQUNFLGFBQUwsQ0FBbUJ6QyxlQUFuQixDQUFtQ3dDLFVBQW5DO0FBQ0FELElBQUFBLElBQUksQ0FBQzFDLFFBQUwsQ0FBY0csZUFBZCxDQUE4QnNDLEtBQTlCO0FBQ0FFLElBQUFBLFVBQVUsQ0FBQ0UsT0FBWCxDQUFtQjFDLGVBQW5CLENBQW1DdUMsSUFBbkM7QUFFQSxXQUFPO0FBQUVELE1BQUFBLEtBQUssRUFBTEEsS0FBRjtBQUFTQyxNQUFBQSxJQUFJLEVBQUpBLElBQVQ7QUFBZUMsTUFBQUEsVUFBVSxFQUFWQTtBQUFmLEtBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBhIFY0IENvbnRleHRcbiAqL1xuaW1wb3J0IHsgRXZlbnQgfSBmcm9tIFwic2FwL3VpL2Jhc2VcIjtcbmltcG9ydCB7IENvbnRyb2wsIFVJNUVsZW1lbnQgfSBmcm9tIFwic2FwL3VpL2NvcmVcIjtcbmltcG9ydCB7IENvbnRyb2xsZXIsIFZpZXcgfSBmcm9tIFwic2FwL3VpL2NvcmUvbXZjXCI7XG5pbXBvcnQgeyBDb250ZXh0LCBPRGF0YUxpc3RCaW5kaW5nLCBPRGF0YUNvbnRleHRCaW5kaW5nLCBPRGF0YU1ldGFNb2RlbCwgT0RhdGFNb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjRcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG9WYWx1ZXM6IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyBzZXRQcm9wZXJ0eSA9IGplc3QuZm4oKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG5cdFx0dGhpcy5vVmFsdWVzW2tleV0gPSB2YWx1ZTtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW2tleV07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyBnZXRQYXRoID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub1ZhbHVlc1tcIiRwYXRoXCJdO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9CaW5kaW5nO1xuXHR9KTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9CaW5kaW5nPy5nZXRNb2RlbCgpIGFzIGFueSkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tVSTVFbGVtZW50IGltcGxlbWVudHMgUGFydGlhbDxVSTVFbGVtZW50PiB7XG5cdFtrZXk6IHN0cmluZ106IGFueTtcblx0cHVibGljIGJpbmRpbmdDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KHt9KTtcblx0cHVibGljIGdldEJpbmRpbmcgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodGhpcy5iaW5kaW5nQ29udGV4dCk7XG5cdHB1YmxpYyBnZXRCaW5kaW5nSW5mbyA9IGplc3QuZm4oKTtcblx0cHVibGljIGRhdGEgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldFBhcmVudCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sIGV4dGVuZHMgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRyb2w+IHt9XG5cbmV4cG9ydCBjbGFzcyBNb2NrRXZlbnQgaW1wbGVtZW50cyBQYXJ0aWFsPEV2ZW50PiB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30sIHB1YmxpYyBzb3VyY2U6IE1vY2tVSTVFbGVtZW50ID0gbmV3IE1vY2tVSTVFbGVtZW50KCkpIHt9XG5cblx0cHVibGljIGdldFBhcmFtZXRlciA9IGplc3QuZm4obmFtZSA9PiB0aGlzLnBhcmFtc1tuYW1lXSk7XG5cblx0cHVibGljIGdldFNvdXJjZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5zb3VyY2UgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBMaXN0QmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgTW9ja0xpc3RCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUxpc3RCaW5kaW5nPiB7XG5cdHByaXZhdGUgYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUNvbnRleHRzPzogYW55W10sIHByaXZhdGUgbW9ja01vZGVsPzogTW9ja01vZGVsKSB7XG5cdFx0YUNvbnRleHRzID0gYUNvbnRleHRzIHx8IFtdO1xuXG5cdFx0dGhpcy5hTW9ja0NvbnRleHRzID0gYUNvbnRleHRzLm1hcChjb250ZXh0ID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgodGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSkgYXMgQ29udGV4dFtdKTtcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldEN1cnJlbnRDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkpIGFzIENvbnRleHRbXTtcblx0fSk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrTW9kZWwgYXMgYW55KSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRwcml2YXRlIG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9Db250ZXh0PzogYW55LCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgYXR0YWNoRXZlbnRPbmNlID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMubW9ja01vZGVsIGFzIGFueSkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9NZXRhRGF0YT86IGFueSkge1xuXHRcdHRoaXMub01ldGFDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9NZXRhRGF0YSB8fCB7fSk7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldE1ldGFDb250ZXh0ID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiAobmV3IE1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pIGFzIGFueSkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgY3JlYXRlQmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIChuZXcgTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSkgYXMgYW55KSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFQYXRoID0gamVzdC5mbigpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1vZGVsXG4gKi9cblxuZXhwb3J0IGNsYXNzIE1vY2tNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgcHJpdmF0ZSBtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRpZiAobW9ja0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRtb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHRcdGlmIChtb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRcdG1vY2tDb250ZXh0QmluZGluZy5zZXRNb2RlbCh0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvLyBGYWN0b3JpZXNcblx0c3RhdGljIG1vZGVsRnJvbUxpc3RCaW5kaW5nKG1vY2tMaXN0QmluZGluZzogTW9ja0xpc3RCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0XHRyZXR1cm4gbmV3IE1vY2tNb2RlbChtb2NrTGlzdEJpbmRpbmcpO1xuXHR9XG5cdHN0YXRpYyBtb2RlbEZyb21Db250ZXh0QmluZGluZyhtb2NrQ29udGV4dEJpbmRpbmc6IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwodW5kZWZpbmVkLCBtb2NrQ29udGV4dEJpbmRpbmcpO1xuXHR9XG5cblx0cHVibGljIHNldE1ldGFNb2RlbChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSB7XG5cdFx0dGhpcy5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZExpc3QgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm1vY2tMaXN0QmluZGluZyBhcyBhbnkpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBiaW5kQ29udGV4dCA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMubW9ja0NvbnRleHRCaW5kaW5nIGFzIGFueSkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhTW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMub01ldGFNb2RlbCBhcyBhbnkpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBzZXRQcm9wZXJ0eSA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0Vmlld0RhdGEgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udHJvbGxlciBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbGxlcj4ge1xuXHRwdWJsaWMgZ2V0VmlldyA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgX3JvdXRpbmcgPSB7XG5cdFx0bmF2aWdhdGVUb1RhcmdldDogamVzdC5mbigpXG5cdH07XG5cblx0cHVibGljIF9lZGl0RmxvdyA9IHtcblx0XHRzeW5jVGFzazogamVzdC5mbigpXG5cdH07XG5cblx0cHVibGljIF9zaWRlRWZmZWN0cyA9IHtcblx0XHRoYW5kbGVGaWVsZENoYW5nZTogamVzdC5mbigpXG5cdH07XG5cblx0aXNBID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTVZDTW9jayB7XG5cdG1vZGVsOiBNb2NrTW9kZWw7XG5cdHZpZXc6IE1vY2tWaWV3O1xuXHRjb250cm9sbGVyOiBNb2NrQ29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgbmV3IE1vY2tNb2RlbCgpO1xuXHRjb25zdCB2aWV3ID0gZXhpc3Rpbmc/LnZpZXcgfHwgbmV3IE1vY2tWaWV3KCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSBleGlzdGluZz8uY29udHJvbGxlciB8fCBuZXcgTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3LmdldENvbnRyb2xsZXIubW9ja1JldHVyblZhbHVlKGNvbnRyb2xsZXIpO1xuXHR2aWV3LmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2RlbCk7XG5cdGNvbnRyb2xsZXIuZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock class for a V4 Context
|
|
3
|
+
*/
|
|
4
|
+
import { Event } from "sap/ui/base";
|
|
5
|
+
import { Control, UI5Element } from "sap/ui/core";
|
|
6
|
+
import { Controller, View } from "sap/ui/core/mvc";
|
|
7
|
+
import { Context, ODataListBinding, ODataContextBinding, ODataMetaModel, ODataModel } from "sap/ui/model/odata/v4";
|
|
8
|
+
|
|
9
|
+
export class MockContext implements Partial<Context> {
|
|
10
|
+
public constructor(private oValues: any, private oBinding?: any) {}
|
|
11
|
+
|
|
12
|
+
public isA(sClassName: string): boolean {
|
|
13
|
+
return sClassName === "sap.ui.model.odata.v4.Context";
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public getProperty = jest.fn((key: string) => {
|
|
17
|
+
return this.oValues[key];
|
|
18
|
+
});
|
|
19
|
+
public setProperty = jest.fn((key: string, value: any) => {
|
|
20
|
+
this.oValues[key] = value;
|
|
21
|
+
return this.oValues[key];
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
public getObject = jest.fn((key: string) => {
|
|
25
|
+
return this.oValues[key];
|
|
26
|
+
});
|
|
27
|
+
public getPath = jest.fn(() => {
|
|
28
|
+
return this.oValues["$path"];
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
public getBinding = jest.fn(() => {
|
|
32
|
+
return this.oBinding;
|
|
33
|
+
});
|
|
34
|
+
public getModel = jest.fn(() => {
|
|
35
|
+
return (this.oBinding?.getModel() as any) as ODataModel;
|
|
36
|
+
});
|
|
37
|
+
public isTransient = jest.fn();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export class MockUI5Element implements Partial<UI5Element> {
|
|
41
|
+
[key: string]: any;
|
|
42
|
+
public bindingContext = new MockContext({});
|
|
43
|
+
public getBinding = jest.fn();
|
|
44
|
+
public getBindingContext = jest.fn().mockReturnValue(this.bindingContext);
|
|
45
|
+
public getBindingInfo = jest.fn();
|
|
46
|
+
public data = jest.fn();
|
|
47
|
+
public getModel = jest.fn();
|
|
48
|
+
public getParent = jest.fn();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export class MockControl extends MockUI5Element implements Partial<Control> {}
|
|
52
|
+
|
|
53
|
+
export class MockEvent implements Partial<Event> {
|
|
54
|
+
public constructor(public params: { [key: string]: any } = {}, public source: MockUI5Element = new MockUI5Element()) {}
|
|
55
|
+
|
|
56
|
+
public getParameter = jest.fn(name => this.params[name]);
|
|
57
|
+
|
|
58
|
+
public getSource = jest.fn(() => this.source as any);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Mock class for OData V4 ListBinding
|
|
63
|
+
*/
|
|
64
|
+
export class MockListBinding implements Partial<ODataListBinding> {
|
|
65
|
+
private aMockContexts: MockContext[];
|
|
66
|
+
|
|
67
|
+
public constructor(aContexts?: any[], private mockModel?: MockModel) {
|
|
68
|
+
aContexts = aContexts || [];
|
|
69
|
+
|
|
70
|
+
this.aMockContexts = aContexts.map(context => {
|
|
71
|
+
return new MockContext(context, this);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public isA(sClassName: string): boolean {
|
|
76
|
+
return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public setModel(oModel: MockModel) {
|
|
80
|
+
this.mockModel = oModel;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Mocked API
|
|
84
|
+
public setAggregation = jest.fn();
|
|
85
|
+
public filter = jest.fn();
|
|
86
|
+
public sort = jest.fn();
|
|
87
|
+
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
89
|
+
public requestContexts = jest.fn((...args) => {
|
|
90
|
+
return Promise.resolve((this.aMockContexts as any) as Context[]);
|
|
91
|
+
});
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
93
|
+
public getCurrentContexts = jest.fn((...args) => {
|
|
94
|
+
return (this.aMockContexts as any) as Context[];
|
|
95
|
+
});
|
|
96
|
+
public getModel = jest.fn(() => {
|
|
97
|
+
return (this.mockModel as any) as ODataModel;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export class MockContextBinding implements Partial<ODataContextBinding> {
|
|
102
|
+
private oMockContext: MockContext;
|
|
103
|
+
|
|
104
|
+
public constructor(oContext?: any, private mockModel?: MockModel) {
|
|
105
|
+
this.oMockContext = new MockContext(oContext || {}, this);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public isA(sClassName: string): boolean {
|
|
109
|
+
return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
|
|
110
|
+
}
|
|
111
|
+
public getInternalMockContext(): MockContext {
|
|
112
|
+
return this.oMockContext;
|
|
113
|
+
}
|
|
114
|
+
public setModel(oModel: MockModel) {
|
|
115
|
+
this.mockModel = oModel;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Mocked API
|
|
119
|
+
public getBoundContext = jest.fn(() => {
|
|
120
|
+
return (this.oMockContext as any) as Context;
|
|
121
|
+
});
|
|
122
|
+
public attachEventOnce = jest.fn();
|
|
123
|
+
public getModel = jest.fn(() => {
|
|
124
|
+
return (this.mockModel as any) as ODataModel;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Mock class for OData V4 MetaModel
|
|
130
|
+
*/
|
|
131
|
+
export class MockMetaModel implements Partial<ODataMetaModel> {
|
|
132
|
+
private oMetaContext: MockContext;
|
|
133
|
+
|
|
134
|
+
public constructor(oMetaData?: any) {
|
|
135
|
+
this.oMetaContext = new MockContext(oMetaData || {});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Mocked API
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
140
|
+
public getMetaContext = jest.fn((sPath: string) => {
|
|
141
|
+
return (new MockContext({ $path: sPath }) as any) as Context;
|
|
142
|
+
});
|
|
143
|
+
public getObject = jest.fn((sPath: string) => {
|
|
144
|
+
return this.oMetaContext.getProperty(sPath);
|
|
145
|
+
});
|
|
146
|
+
public requestObject = jest.fn();
|
|
147
|
+
public createBindingContext = jest.fn((sPath: string) => {
|
|
148
|
+
return (new MockContext({ $path: sPath }) as any) as Context;
|
|
149
|
+
});
|
|
150
|
+
public getMetaPath = jest.fn();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Mock class for OData V4 Model
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
export class MockModel implements Partial<ODataModel> {
|
|
158
|
+
private oMetaModel?: MockMetaModel;
|
|
159
|
+
|
|
160
|
+
public constructor(private mockListBinding?: MockListBinding, private mockContextBinding?: MockContextBinding) {
|
|
161
|
+
if (mockListBinding) {
|
|
162
|
+
mockListBinding.setModel(this);
|
|
163
|
+
}
|
|
164
|
+
if (mockContextBinding) {
|
|
165
|
+
mockContextBinding.setModel(this);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Factories
|
|
170
|
+
static modelFromListBinding(mockListBinding: MockListBinding): MockModel {
|
|
171
|
+
return new MockModel(mockListBinding);
|
|
172
|
+
}
|
|
173
|
+
static modelFromContextBinding(mockContextBinding: MockContextBinding): MockModel {
|
|
174
|
+
return new MockModel(undefined, mockContextBinding);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
public setMetaModel(oMetaModel: MockMetaModel) {
|
|
178
|
+
this.oMetaModel = oMetaModel;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Mocked API
|
|
182
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
183
|
+
public bindList = jest.fn((...args) => {
|
|
184
|
+
return (this.mockListBinding as any) as ODataListBinding;
|
|
185
|
+
});
|
|
186
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
187
|
+
public bindContext = jest.fn((...args) => {
|
|
188
|
+
return (this.mockContextBinding as any) as ODataContextBinding;
|
|
189
|
+
});
|
|
190
|
+
public getMetaModel = jest.fn(() => {
|
|
191
|
+
return (this.oMetaModel as any) as ODataMetaModel;
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
public getProperty = jest.fn();
|
|
195
|
+
public setProperty = jest.fn();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export class MockView implements Partial<View> {
|
|
199
|
+
public getController = jest.fn();
|
|
200
|
+
|
|
201
|
+
public getModel = jest.fn();
|
|
202
|
+
|
|
203
|
+
public getViewData = jest.fn();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export class MockController implements Partial<Controller> {
|
|
207
|
+
public getView = jest.fn();
|
|
208
|
+
|
|
209
|
+
public _routing = {
|
|
210
|
+
navigateToTarget: jest.fn()
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
public _editFlow = {
|
|
214
|
+
syncTask: jest.fn()
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
public _sideEffects = {
|
|
218
|
+
handleFieldChange: jest.fn()
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
isA = jest.fn().mockReturnValue(false);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export interface MVCMock {
|
|
225
|
+
model: MockModel;
|
|
226
|
+
view: MockView;
|
|
227
|
+
controller: MockController;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* Generate model, view and controller mocks that refer to each other.
|
|
232
|
+
*
|
|
233
|
+
* @param existing Optional existing mocked instances that should be used
|
|
234
|
+
* @returns Mocked model, view and controller instances
|
|
235
|
+
*/
|
|
236
|
+
export function mockMVC(existing?: Partial<MVCMock>): MVCMock {
|
|
237
|
+
const model = existing?.model || new MockModel();
|
|
238
|
+
const view = existing?.view || new MockView();
|
|
239
|
+
const controller = existing?.controller || new MockController();
|
|
240
|
+
|
|
241
|
+
view.getController.mockReturnValue(controller);
|
|
242
|
+
view.getModel.mockReturnValue(model);
|
|
243
|
+
controller.getView.mockReturnValue(view);
|
|
244
|
+
|
|
245
|
+
return { model, view, controller };
|
|
246
|
+
}
|