@sapui5/sap.fe.test 1.94.0 → 1.96.3
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 +3 -2
- 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 +32 -9
- package/src/sap/fe/test/FlexibleColumnLayout.js +1 -1
- package/src/sap/fe/test/JestTemplatingHelper.js +109 -7
- package/src/sap/fe/test/JestTemplatingHelper.ts +75 -6
- package/src/sap/fe/test/JourneyRunner.js +1 -1
- package/src/sap/fe/test/ListReport.js +45 -4
- package/src/sap/fe/test/LocationUtil.js +1 -1
- package/src/sap/fe/test/ObjectPage.js +53 -1
- 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 +49 -1
- package/src/sap/fe/test/TemplatingTestUtils.js +1 -1
- package/src/sap/fe/test/UI5MockHelper.js +218 -0
- package/src/sap/fe/test/UI5MockHelper.ts +137 -0
- package/src/sap/fe/test/Utils.js +6 -2
- package/src/sap/fe/test/api/APIHelper.js +1 -1
- package/src/sap/fe/test/api/BaseAPI.js +1 -1
- package/src/sap/fe/test/api/ChartActions.js +1 -1
- package/src/sap/fe/test/api/ChartAssertions.js +23 -8
- package/src/sap/fe/test/api/DialogAPI.js +1 -1
- package/src/sap/fe/test/api/DialogActions.js +1 -1
- package/src/sap/fe/test/api/DialogAssertions.js +1 -1
- package/src/sap/fe/test/api/DialogCreateActions.js +4 -2
- package/src/sap/fe/test/api/DialogCreateAssertions.js +2 -2
- 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 +1 -1
- package/src/sap/fe/test/api/FilterBarAPI.js +1 -1
- package/src/sap/fe/test/api/FilterBarActions.js +18 -1
- package/src/sap/fe/test/api/FilterBarAssertions.js +41 -12
- 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 +34 -10
- package/src/sap/fe/test/api/FormAssertions.js +1 -1
- 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 +28 -0
- package/src/sap/fe/test/api/KPICardAssertions.js +204 -0
- package/src/sap/fe/test/api/TableAPI.js +1 -1
- package/src/sap/fe/test/api/TableActions.js +1 -1
- package/src/sap/fe/test/api/TableAssertions.js +1 -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 +61 -5
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +3 -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 +15 -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 +5 -42
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* ! SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(
|
|
6
6
|
[
|
|
@@ -16,7 +16,8 @@ sap.ui.define(
|
|
|
16
16
|
"sap/fe/test/api/FooterActionsBase",
|
|
17
17
|
"sap/fe/test/api/FooterAssertionsBase",
|
|
18
18
|
"sap/fe/test/api/HeaderActionsLR",
|
|
19
|
-
"sap/fe/test/api/HeaderAssertionsLR"
|
|
19
|
+
"sap/fe/test/api/HeaderAssertionsLR",
|
|
20
|
+
"sap/fe/test/api/KPICardAssertions"
|
|
20
21
|
],
|
|
21
22
|
function(
|
|
22
23
|
Utils,
|
|
@@ -31,7 +32,8 @@ sap.ui.define(
|
|
|
31
32
|
FooterActionsBase,
|
|
32
33
|
FooterAssertionsBase,
|
|
33
34
|
HeaderActionsLR,
|
|
34
|
-
HeaderAssertionsLR
|
|
35
|
+
HeaderAssertionsLR,
|
|
36
|
+
KPICardAssertions
|
|
35
37
|
) {
|
|
36
38
|
"use strict";
|
|
37
39
|
|
|
@@ -173,6 +175,14 @@ sap.ui.define(
|
|
|
173
175
|
.description("Pressing dialog button '" + sText + "'")
|
|
174
176
|
.execute();
|
|
175
177
|
},
|
|
178
|
+
iClickLinkWithText: function(sText) {
|
|
179
|
+
return OpaBuilder.create(this)
|
|
180
|
+
.hasType("sap.m.Link")
|
|
181
|
+
.hasProperties({ text: sText })
|
|
182
|
+
.doPress()
|
|
183
|
+
.description("Navigating via link '" + sText + "'")
|
|
184
|
+
.execute();
|
|
185
|
+
},
|
|
176
186
|
iOpenIconTabWithTitle: function(sName) {
|
|
177
187
|
return OpaBuilder.create(this)
|
|
178
188
|
.hasId(IconTabBarId)
|
|
@@ -210,6 +220,12 @@ sap.ui.define(
|
|
|
210
220
|
.doSelectVariant(sVariantName)
|
|
211
221
|
.description(Utils.formatMessage("Selecting variant '{1}' from '{0}'", "Page Variant", sVariantName))
|
|
212
222
|
.execute();
|
|
223
|
+
},
|
|
224
|
+
iOpenKPICard: function(sTitle) {
|
|
225
|
+
return KPIBuilder.create(this)
|
|
226
|
+
.clickKPITag(sTitle)
|
|
227
|
+
.description("Opening card for KPI '" + sTitle + "'")
|
|
228
|
+
.execute();
|
|
213
229
|
}
|
|
214
230
|
},
|
|
215
231
|
/**
|
|
@@ -276,6 +292,9 @@ sap.ui.define(
|
|
|
276
292
|
onHeader: function() {
|
|
277
293
|
return new HeaderAssertionsLR(_getHeaderBuilder(this, PageId), { id: PageId });
|
|
278
294
|
},
|
|
295
|
+
onKPICard: function() {
|
|
296
|
+
return new KPICardAssertions(KPIBuilder.create(this));
|
|
297
|
+
},
|
|
279
298
|
iSeeTheMessageToast: function(sText) {
|
|
280
299
|
return this._iSeeTheMessageToast(sText);
|
|
281
300
|
},
|
|
@@ -321,6 +340,22 @@ sap.ui.define(
|
|
|
321
340
|
.description("Seeing link with text '" + sText + "'")
|
|
322
341
|
.execute();
|
|
323
342
|
},
|
|
343
|
+
iSeeQuickViewMoreLinksButton: function() {
|
|
344
|
+
return OpaBuilder.create(this)
|
|
345
|
+
.isDialogElement(true)
|
|
346
|
+
.hasType("sap.m.Button")
|
|
347
|
+
.has(OpaBuilder.Matchers.resourceBundle("text", "sap.ui.mdc", "info.POPOVER_DEFINE_LINKS"))
|
|
348
|
+
.description("The 'More Links' button found")
|
|
349
|
+
.execute();
|
|
350
|
+
},
|
|
351
|
+
iSeeFlpLink: function(sDescription) {
|
|
352
|
+
return OpaBuilder.create(this)
|
|
353
|
+
.hasType("sap.ui.mdc.link.PanelListItem")
|
|
354
|
+
.isDialogElement(true)
|
|
355
|
+
.hasProperties({ text: sDescription })
|
|
356
|
+
.description("FLP link with text '" + sDescription + "' is present")
|
|
357
|
+
.execute();
|
|
358
|
+
},
|
|
324
359
|
iSeeHeaderPinnableToggle: function(bVisible) {
|
|
325
360
|
var sState = bVisible ? "visible" : "hidden";
|
|
326
361
|
return OpaBuilder.create(this)
|
|
@@ -509,9 +544,15 @@ sap.ui.define(
|
|
|
509
544
|
sDescription += " with properties " + JSON.stringify(oProperties);
|
|
510
545
|
}
|
|
511
546
|
return KPIBuilder.create(this)
|
|
512
|
-
.
|
|
547
|
+
.checkKPITag(sTitle, oProperties)
|
|
513
548
|
.description(sDescription)
|
|
514
549
|
.execute();
|
|
550
|
+
},
|
|
551
|
+
iSeeKPICard: function() {
|
|
552
|
+
return KPIBuilder.create(this)
|
|
553
|
+
.checkKPICard()
|
|
554
|
+
.description("Seeing KPI Card")
|
|
555
|
+
.execute();
|
|
515
556
|
}
|
|
516
557
|
}
|
|
517
558
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* ! SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"], function(OpaBuilder, Opa5, Utils) {
|
|
6
6
|
"use strict";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* ! SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(
|
|
6
6
|
[
|
|
@@ -657,6 +657,46 @@ sap.ui.define(
|
|
|
657
657
|
.description("FLP link with text '" + sDescription + "' is present")
|
|
658
658
|
.execute();
|
|
659
659
|
},
|
|
660
|
+
iSeeSimpleFormWithLabel: function(sDescription) {
|
|
661
|
+
return OpaBuilder.create(this)
|
|
662
|
+
.hasType("sap.m.Label")
|
|
663
|
+
.isDialogElement(true)
|
|
664
|
+
.hasProperties({ text: sDescription })
|
|
665
|
+
.description("SimpleForm has label '" + sDescription + "' is present")
|
|
666
|
+
.execute();
|
|
667
|
+
},
|
|
668
|
+
iSeeSimpleFormWithText: function(sText) {
|
|
669
|
+
return OpaBuilder.create(this)
|
|
670
|
+
.hasType("sap.ui.layout.form.SimpleForm")
|
|
671
|
+
.isDialogElement(true)
|
|
672
|
+
.doOnChildren(
|
|
673
|
+
OpaBuilder.create(this)
|
|
674
|
+
.hasType("sap.m.Text")
|
|
675
|
+
.hasProperties({ text: sText })
|
|
676
|
+
)
|
|
677
|
+
.description("SimpleForm has text '" + sText + "' is present")
|
|
678
|
+
.execute();
|
|
679
|
+
},
|
|
680
|
+
iSeeSimpleFormWithLink: function(sText) {
|
|
681
|
+
return OpaBuilder.create(this)
|
|
682
|
+
.hasType("sap.ui.layout.form.SimpleForm")
|
|
683
|
+
.isDialogElement(true)
|
|
684
|
+
.doOnChildren(
|
|
685
|
+
OpaBuilder.create(this)
|
|
686
|
+
.hasType("sap.m.Link")
|
|
687
|
+
.hasProperties({ text: sText })
|
|
688
|
+
)
|
|
689
|
+
.description("SimpleForm has link '" + sText + "' is present")
|
|
690
|
+
.execute();
|
|
691
|
+
},
|
|
692
|
+
iSeeSimpleFormWithTitle: function(sTitle) {
|
|
693
|
+
return OpaBuilder.create(this)
|
|
694
|
+
.hasType("sap.ui.core.Title")
|
|
695
|
+
.isDialogElement(true)
|
|
696
|
+
.hasProperties({ text: sTitle })
|
|
697
|
+
.description("SimpleForm has label '" + sTitle + "' is present")
|
|
698
|
+
.execute();
|
|
699
|
+
},
|
|
660
700
|
iSeeSelectLinksDialog: function() {
|
|
661
701
|
return OpaBuilder.create(this)
|
|
662
702
|
.hasType("sap.m.Title")
|
|
@@ -811,6 +851,18 @@ sap.ui.define(
|
|
|
811
851
|
.execute();
|
|
812
852
|
},
|
|
813
853
|
|
|
854
|
+
iCheckValueForFieldInCreateDialog: function(sFieldId, sValue, bIsRequired) {
|
|
855
|
+
return FieldBuilder.create(this)
|
|
856
|
+
.isDialogElement()
|
|
857
|
+
.hasId(sFieldId)
|
|
858
|
+
.hasValue(sValue)
|
|
859
|
+
.hasProperties({ required: !!bIsRequired })
|
|
860
|
+
.description(
|
|
861
|
+
Utils.formatMessage("Seeing Create dialog parameter '{0}' with value '{1}'", sFieldId, sValue)
|
|
862
|
+
)
|
|
863
|
+
.execute();
|
|
864
|
+
},
|
|
865
|
+
|
|
814
866
|
iClickBackOnMessageView: function() {
|
|
815
867
|
return OpaBuilder.create(this)
|
|
816
868
|
.hasType("sap.m.MessageView")
|
package/src/sap/fe/test/Shell.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* ! SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"], function(OpaBuilder, Opa5, Utils) {
|
|
6
6
|
"use strict";
|
|
@@ -104,21 +104,26 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
|
|
|
104
104
|
* @public
|
|
105
105
|
*/
|
|
106
106
|
iPressTile: function(sTarget) {
|
|
107
|
-
return
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
107
|
+
return this.waitFor({
|
|
108
|
+
controlType: "sap.ushell.ui.launchpad.Tile",
|
|
109
|
+
matchers: function(oTile) {
|
|
110
|
+
return oTile.getTarget() === "#" + sTarget;
|
|
111
|
+
},
|
|
112
|
+
actions: function(oTile) {
|
|
113
|
+
oTile
|
|
114
|
+
.getTileViews()[0]
|
|
115
|
+
.$()
|
|
116
|
+
.trigger("tap");
|
|
117
|
+
},
|
|
118
|
+
success: function(oTile) {
|
|
119
|
+
Opa5.assert.ok(true, Utils.formatMessage("Clicking on tile with target '{0}'", sTarget));
|
|
120
|
+
},
|
|
121
|
+
errorMessage: "Could not find the tile"
|
|
122
|
+
});
|
|
115
123
|
},
|
|
116
124
|
iOpenDefaultValues: function() {
|
|
117
125
|
return OpaBuilder.create(this)
|
|
118
126
|
.hasId("meAreaHeaderButton")
|
|
119
|
-
.hasProperties({
|
|
120
|
-
icon: "sap-icon://person-placeholder"
|
|
121
|
-
})
|
|
122
127
|
.doPress()
|
|
123
128
|
.description("Opening FLP Default Values dialog")
|
|
124
129
|
.execute();
|
package/src/sap/fe/test/Stubs.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* ! SAPUI5
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
sap.ui.define(
|
|
6
6
|
[
|
|
@@ -367,11 +367,59 @@ sap.ui.define(
|
|
|
367
367
|
iSeeThisPage: function() {
|
|
368
368
|
return OpaBuilder.create(this)
|
|
369
369
|
.hasId(sViewId)
|
|
370
|
+
.do(
|
|
371
|
+
function(oControl) {
|
|
372
|
+
//storing the placeholder object
|
|
373
|
+
var oContainer = oControl.getParent().oContainer;
|
|
374
|
+
var oView = oContainer;
|
|
375
|
+
do {
|
|
376
|
+
oView = oView.getParent();
|
|
377
|
+
} while (!oView.isA("sap.ui.core.mvc.XMLView"));
|
|
378
|
+
|
|
379
|
+
this.oPlaceholder = oView.getController().oPlaceholder;
|
|
380
|
+
}.bind(this)
|
|
381
|
+
)
|
|
370
382
|
.viewId(null)
|
|
371
383
|
.viewName(null)
|
|
372
384
|
.description(Utils.formatMessage("Seeing the page '{0}'", sViewId))
|
|
373
385
|
.execute();
|
|
374
386
|
},
|
|
387
|
+
|
|
388
|
+
iResetPlaceholderStatistics: function() {
|
|
389
|
+
return OpaBuilder.create(this)
|
|
390
|
+
.do(
|
|
391
|
+
function() {
|
|
392
|
+
this.oPlaceholder.resetPlaceholderDebugStats();
|
|
393
|
+
}.bind(this)
|
|
394
|
+
)
|
|
395
|
+
.description("Placeholder reset statistics")
|
|
396
|
+
.execute();
|
|
397
|
+
},
|
|
398
|
+
|
|
399
|
+
//this function check that the placeholder is hidden as soon as (10ms delay) the event pageReady or HeroesBatchReceived is fired
|
|
400
|
+
iCheckPlaceholderStatistics: function(sPlaceholderListener) {
|
|
401
|
+
var placeholderListener = {
|
|
402
|
+
pageReady: "iPageReadyEventTimestamp",
|
|
403
|
+
heroesBatchReceived: "iHeroesBatchReceivedEventTimestamp"
|
|
404
|
+
};
|
|
405
|
+
return OpaBuilder.create(this)
|
|
406
|
+
.check(
|
|
407
|
+
function() {
|
|
408
|
+
var oPlaceHolderDebugStats = this.oPlaceholder.getPlaceholderDebugStats();
|
|
409
|
+
var sListener = placeholderListener[sPlaceholderListener];
|
|
410
|
+
if (
|
|
411
|
+
oPlaceHolderDebugStats.iHidePlaceholderTimestamp - oPlaceHolderDebugStats[sListener] <
|
|
412
|
+
10
|
|
413
|
+
) {
|
|
414
|
+
return true;
|
|
415
|
+
} else {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
}.bind(this)
|
|
419
|
+
)
|
|
420
|
+
.description("Placeholder statistics are correct")
|
|
421
|
+
.execute();
|
|
422
|
+
},
|
|
375
423
|
iSeeFilterDefinedOnActionDialogValueHelp: function(sAction, sVHParameter, sFieldName, sValue) {
|
|
376
424
|
return OpaBuilder.create(this)
|
|
377
425
|
.hasId(sAction + "::" + sVHParameter + "::FilterBar::FilterField::" + sFieldName + "-inner")
|
|
@@ -0,0 +1,218 @@
|
|
|
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 _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); } }
|
|
11
|
+
|
|
12
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
13
|
+
|
|
14
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
15
|
+
|
|
16
|
+
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; }
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Mock class for a V4 Context
|
|
20
|
+
*/
|
|
21
|
+
var MockContext = function MockContext(oValues, oBinding) {
|
|
22
|
+
var _this = this;
|
|
23
|
+
|
|
24
|
+
_classCallCheck(this, MockContext);
|
|
25
|
+
|
|
26
|
+
_defineProperty(this, "getProperty", jest.fn(function (key) {
|
|
27
|
+
return _this.oValues[key];
|
|
28
|
+
}));
|
|
29
|
+
|
|
30
|
+
_defineProperty(this, "getObject", jest.fn(function (key) {
|
|
31
|
+
return _this.oValues[key];
|
|
32
|
+
}));
|
|
33
|
+
|
|
34
|
+
_defineProperty(this, "getPath", jest.fn(function () {
|
|
35
|
+
return _this.oValues["$path"];
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
_defineProperty(this, "getBinding", jest.fn(function () {
|
|
39
|
+
return _this.oBinding;
|
|
40
|
+
}));
|
|
41
|
+
|
|
42
|
+
this.oValues = oValues;
|
|
43
|
+
this.oBinding = oBinding;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
_exports.MockContext = MockContext;
|
|
47
|
+
|
|
48
|
+
var MockControl = function MockControl() {
|
|
49
|
+
_classCallCheck(this, MockControl);
|
|
50
|
+
|
|
51
|
+
_defineProperty(this, "getBindingInfo", jest.fn());
|
|
52
|
+
|
|
53
|
+
_defineProperty(this, "getBinding", jest.fn());
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Mock class for OData V4 ListBinding
|
|
57
|
+
*/
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
_exports.MockControl = MockControl;
|
|
61
|
+
|
|
62
|
+
var MockListBinding = /*#__PURE__*/function () {
|
|
63
|
+
function MockListBinding(aContexts) {
|
|
64
|
+
var _this2 = this;
|
|
65
|
+
|
|
66
|
+
_classCallCheck(this, MockListBinding);
|
|
67
|
+
|
|
68
|
+
_defineProperty(this, "setAggregation", jest.fn());
|
|
69
|
+
|
|
70
|
+
_defineProperty(this, "filter", jest.fn());
|
|
71
|
+
|
|
72
|
+
_defineProperty(this, "sort", jest.fn());
|
|
73
|
+
|
|
74
|
+
_defineProperty(this, "requestContexts", jest.fn(function () {
|
|
75
|
+
return Promise.resolve(_this2.aMockContexts);
|
|
76
|
+
}));
|
|
77
|
+
|
|
78
|
+
_defineProperty(this, "getCurrentContexts", jest.fn(function () {
|
|
79
|
+
return _this2.aMockContexts;
|
|
80
|
+
}));
|
|
81
|
+
|
|
82
|
+
aContexts = aContexts || [];
|
|
83
|
+
this.aMockContexts = aContexts.map(function (context) {
|
|
84
|
+
return new MockContext(context, _this2);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
_exports.MockListBinding = MockListBinding;
|
|
89
|
+
|
|
90
|
+
_createClass(MockListBinding, [{
|
|
91
|
+
key: "isA",
|
|
92
|
+
value: function isA(sClassName) {
|
|
93
|
+
return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
|
|
94
|
+
} // Mocked API
|
|
95
|
+
|
|
96
|
+
}]);
|
|
97
|
+
|
|
98
|
+
return MockListBinding;
|
|
99
|
+
}();
|
|
100
|
+
|
|
101
|
+
_exports.MockListBinding = MockListBinding;
|
|
102
|
+
|
|
103
|
+
var MockContextBinding = /*#__PURE__*/function () {
|
|
104
|
+
function MockContextBinding(oContext) {
|
|
105
|
+
var _this3 = this;
|
|
106
|
+
|
|
107
|
+
_classCallCheck(this, MockContextBinding);
|
|
108
|
+
|
|
109
|
+
_defineProperty(this, "getBoundContext", jest.fn(function () {
|
|
110
|
+
return _this3.oMockContext;
|
|
111
|
+
}));
|
|
112
|
+
|
|
113
|
+
_defineProperty(this, "attachEventOnce", jest.fn());
|
|
114
|
+
|
|
115
|
+
this.oMockContext = new MockContext(oContext || {}, this);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
_exports.MockContextBinding = MockContextBinding;
|
|
119
|
+
|
|
120
|
+
_createClass(MockContextBinding, [{
|
|
121
|
+
key: "isA",
|
|
122
|
+
value: function isA(sClassName) {
|
|
123
|
+
return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
|
|
124
|
+
}
|
|
125
|
+
}, {
|
|
126
|
+
key: "getInternalMockContext",
|
|
127
|
+
value: function getInternalMockContext() {
|
|
128
|
+
return this.oMockContext;
|
|
129
|
+
} // Mocked API
|
|
130
|
+
|
|
131
|
+
}]);
|
|
132
|
+
|
|
133
|
+
return MockContextBinding;
|
|
134
|
+
}();
|
|
135
|
+
/**
|
|
136
|
+
* Mock class for OData V4 MetaModel
|
|
137
|
+
*/
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
_exports.MockContextBinding = MockContextBinding;
|
|
141
|
+
|
|
142
|
+
var MockMetaModel = function MockMetaModel(oMetaData) {
|
|
143
|
+
var _this4 = this;
|
|
144
|
+
|
|
145
|
+
_classCallCheck(this, MockMetaModel);
|
|
146
|
+
|
|
147
|
+
_defineProperty(this, "getMetaContext", jest.fn(function (sPath) {
|
|
148
|
+
return new MockContext({
|
|
149
|
+
$path: sPath
|
|
150
|
+
});
|
|
151
|
+
}));
|
|
152
|
+
|
|
153
|
+
_defineProperty(this, "getObject", jest.fn(function (sPath) {
|
|
154
|
+
return _this4.oMetaContext.getProperty(sPath);
|
|
155
|
+
}));
|
|
156
|
+
|
|
157
|
+
this.oMetaContext = new MockContext(oMetaData || {});
|
|
158
|
+
} // Mocked API
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
160
|
+
;
|
|
161
|
+
/**
|
|
162
|
+
* Mock class for OData V4 Model
|
|
163
|
+
*/
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
_exports.MockMetaModel = MockMetaModel;
|
|
167
|
+
|
|
168
|
+
var MockModel = /*#__PURE__*/function () {
|
|
169
|
+
function MockModel(mockListBinding, mockContextBinding) {
|
|
170
|
+
var _this5 = this;
|
|
171
|
+
|
|
172
|
+
_classCallCheck(this, MockModel);
|
|
173
|
+
|
|
174
|
+
_defineProperty(this, "bindList", jest.fn(function () {
|
|
175
|
+
return _this5.mockListBinding;
|
|
176
|
+
}));
|
|
177
|
+
|
|
178
|
+
_defineProperty(this, "bindContext", jest.fn(function () {
|
|
179
|
+
return _this5.mockContextBinding;
|
|
180
|
+
}));
|
|
181
|
+
|
|
182
|
+
_defineProperty(this, "getMetaModel", jest.fn(function () {
|
|
183
|
+
return _this5.oMetaModel;
|
|
184
|
+
}));
|
|
185
|
+
|
|
186
|
+
this.mockListBinding = mockListBinding;
|
|
187
|
+
this.mockContextBinding = mockContextBinding;
|
|
188
|
+
} // Factories
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
_exports.MockModel = MockModel;
|
|
192
|
+
|
|
193
|
+
_createClass(MockModel, [{
|
|
194
|
+
key: "setMetaModel",
|
|
195
|
+
value: function setMetaModel(oMetaModel) {
|
|
196
|
+
this.oMetaModel = oMetaModel;
|
|
197
|
+
} // Mocked API
|
|
198
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
199
|
+
|
|
200
|
+
}], [{
|
|
201
|
+
key: "modelFromListBinding",
|
|
202
|
+
value: function modelFromListBinding(mockListBinding) {
|
|
203
|
+
return new MockModel(mockListBinding);
|
|
204
|
+
}
|
|
205
|
+
}, {
|
|
206
|
+
key: "modelFromContextBinding",
|
|
207
|
+
value: function modelFromContextBinding(mockContextBinding) {
|
|
208
|
+
return new MockModel(undefined, mockContextBinding);
|
|
209
|
+
}
|
|
210
|
+
}]);
|
|
211
|
+
|
|
212
|
+
return MockModel;
|
|
213
|
+
}();
|
|
214
|
+
|
|
215
|
+
_exports.MockModel = MockModel;
|
|
216
|
+
return _exports;
|
|
217
|
+
}, false);
|
|
218
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJqZXN0IiwiZm4iLCJrZXkiLCJNb2NrQ29udHJvbCIsIk1vY2tMaXN0QmluZGluZyIsImFDb250ZXh0cyIsIlByb21pc2UiLCJyZXNvbHZlIiwiYU1vY2tDb250ZXh0cyIsIm1hcCIsImNvbnRleHQiLCJzQ2xhc3NOYW1lIiwiTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJvTW9ja0NvbnRleHQiLCJNb2NrTWV0YU1vZGVsIiwib01ldGFEYXRhIiwic1BhdGgiLCIkcGF0aCIsIm9NZXRhQ29udGV4dCIsImdldFByb3BlcnR5IiwiTW9ja01vZGVsIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwib01ldGFNb2RlbCIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFGQTtBQUNBO0FBQ0E7TUFJYUEsVyxHQUNaLHFCQUEyQkMsT0FBM0IsRUFBaURDLFFBQWpELEVBQWlFO0FBQUE7O0FBQUE7O0FBQUEseUNBRTVDQyxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQzdDLGFBQU8sS0FBSSxDQUFDSixPQUFMLENBQWFJLEdBQWIsQ0FBUDtBQUNBLEtBRm9CLENBRjRDOztBQUFBLHVDQUs5Q0YsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUMzQyxhQUFPLEtBQUksQ0FBQ0osT0FBTCxDQUFhSSxHQUFiLENBQVA7QUFDQSxLQUZrQixDQUw4Qzs7QUFBQSxxQ0FRaERGLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDOUIsYUFBTyxLQUFJLENBQUNILE9BQUwsQ0FBYSxPQUFiLENBQVA7QUFDQSxLQUZnQixDQVJnRDs7QUFBQSx3Q0FZN0NFLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDakMsYUFBTyxL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T0FGb0IsQ0FwQjBGOztBQUFBLDRDQXVCekZ2QixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQ25DLGVBQVEsTUFBSSxDQUFDdUIsVUFBYjtBQUNBLE9BRnFCLENBdkJ5Rjs7QUFBQSxXQUFwRkYsZUFBb0YsR0FBcEZBLGVBQW9GO0FBQUEsV0FBekNDLGtCQUF5QyxHQUF6Q0Esa0JBQXlDO0FBQUUsSyxDQUVqSDs7Ozs7OzthQVFBLHNCQUFvQkMsVUFBcEIsRUFBK0M7QUFDOUMsYUFBS0EsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxPLENBRUQ7QUFDQTs7OzthQVpBLDhCQUE0QkYsZUFBNUIsRUFBeUU7QUFDeEUsZUFBTyxJQUFJRCxTQUFKLENBQWNDLGVBQWQsQ0FBUDtBQUNBOzs7YUFDRCxpQ0FBK0JDLGtCQUEvQixFQUFrRjtBQUNqRixlQUFPLElBQUlGLFNBQUosQ0FBY0ksU0FBZCxFQUF5QkYsa0JBQXpCLENBQVA7QUFDQSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBhIFY0IENvbnRleHRcbiAqL1xuXG5pbXBvcnQgeyBDb250ZXh0LCBPRGF0YUxpc3RCaW5kaW5nLCBPRGF0YUNvbnRleHRCaW5kaW5nLCBPRGF0YU1ldGFNb2RlbCwgT0RhdGFNb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjRcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG9WYWx1ZXM6IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyBnZXRQYXRoID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub1ZhbHVlc1tcIiRwYXRoXCJdO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9CaW5kaW5nO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sIHtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBMaXN0QmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgTW9ja0xpc3RCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUxpc3RCaW5kaW5nPiB7XG5cdHByaXZhdGUgYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUNvbnRleHRzPzogYW55W10pIHtcblx0XHRhQ29udGV4dHMgPSBhQ29udGV4dHMgfHwgW107XG5cblx0XHR0aGlzLmFNb2NrQ29udGV4dHMgPSBhQ29udGV4dHMubWFwKGNvbnRleHQgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dChjb250ZXh0LCB0aGlzKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIjtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgodGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSkgYXMgQ29udGV4dFtdKTtcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldEN1cnJlbnRDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkpIGFzIENvbnRleHRbXTtcblx0fSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udGV4dEJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0cHJpdmF0ZSBvTW9ja0NvbnRleHQ6IE1vY2tDb250ZXh0O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvQ29udGV4dD86IGFueSkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgYXR0YWNoRXZlbnRPbmNlID0gamVzdC5mbigpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1ldGFNb2RlbFxuICovXG5leHBvcnQgY2xhc3MgTW9ja01ldGFNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNZXRhTW9kZWw+IHtcblx0cHJpdmF0ZSBvTWV0YUNvbnRleHQ6IE1vY2tDb250ZXh0O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvTWV0YURhdGE/OiBhbnkpIHtcblx0XHR0aGlzLm9NZXRhQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvTWV0YURhdGEgfHwge30pO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRNZXRhQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gKG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkpIGFzIENvbnRleHQ7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0T2JqZWN0ID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1vZGVsXG4gKi9cblxuZXhwb3J0IGNsYXNzIE1vY2tNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgcHJpdmF0ZSBtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpIHt9XG5cblx0Ly8gRmFjdG9yaWVzXG5cdHN0YXRpYyBtb2RlbEZyb21MaXN0QmluZGluZyhtb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwobW9ja0xpc3RCaW5kaW5nKTtcblx0fVxuXHRzdGF0aWMgbW9kZWxGcm9tQ29udGV4dEJpbmRpbmcobW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKHVuZGVmaW5lZCwgbW9ja0NvbnRleHRCaW5kaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRNZXRhTW9kZWwob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRMaXN0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiAodGhpcy5tb2NrTGlzdEJpbmRpbmcgYXMgYW55KSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHR9KTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZENvbnRleHQgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm1vY2tDb250ZXh0QmluZGluZyBhcyBhbnkpIGFzIE9EYXRhQ29udGV4dEJpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TWV0YU1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuICh0aGlzLm9NZXRhTW9kZWwgYXMgYW55KSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock class for a V4 Context
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Context, ODataListBinding, ODataContextBinding, ODataMetaModel, ODataModel } from "sap/ui/model/odata/v4";
|
|
6
|
+
|
|
7
|
+
export class MockContext implements Partial<Context> {
|
|
8
|
+
public constructor(private oValues: any, private oBinding?: any) {}
|
|
9
|
+
|
|
10
|
+
public getProperty = jest.fn((key: string) => {
|
|
11
|
+
return this.oValues[key];
|
|
12
|
+
});
|
|
13
|
+
public getObject = jest.fn((key: string) => {
|
|
14
|
+
return this.oValues[key];
|
|
15
|
+
});
|
|
16
|
+
public getPath = jest.fn(() => {
|
|
17
|
+
return this.oValues["$path"];
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
public getBinding = jest.fn(() => {
|
|
21
|
+
return this.oBinding;
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class MockControl {
|
|
26
|
+
public getBindingInfo = jest.fn();
|
|
27
|
+
public getBinding = jest.fn();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Mock class for OData V4 ListBinding
|
|
32
|
+
*/
|
|
33
|
+
export class MockListBinding implements Partial<ODataListBinding> {
|
|
34
|
+
private aMockContexts: MockContext[];
|
|
35
|
+
|
|
36
|
+
public constructor(aContexts?: any[]) {
|
|
37
|
+
aContexts = aContexts || [];
|
|
38
|
+
|
|
39
|
+
this.aMockContexts = aContexts.map(context => {
|
|
40
|
+
return new MockContext(context, this);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public isA(sClassName: string): boolean {
|
|
45
|
+
return sClassName === "sap.ui.model.odata.v4.ODataListBinding";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Mocked API
|
|
49
|
+
public setAggregation = jest.fn();
|
|
50
|
+
public filter = jest.fn();
|
|
51
|
+
public sort = jest.fn();
|
|
52
|
+
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
54
|
+
public requestContexts = jest.fn((...args) => {
|
|
55
|
+
return Promise.resolve((this.aMockContexts as any) as Context[]);
|
|
56
|
+
});
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
58
|
+
public getCurrentContexts = jest.fn((...args) => {
|
|
59
|
+
return (this.aMockContexts as any) as Context[];
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class MockContextBinding implements Partial<ODataContextBinding> {
|
|
64
|
+
private oMockContext: MockContext;
|
|
65
|
+
|
|
66
|
+
public constructor(oContext?: any) {
|
|
67
|
+
this.oMockContext = new MockContext(oContext || {}, this);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public isA(sClassName: string): boolean {
|
|
71
|
+
return sClassName === "sap.ui.model.odata.v4.ODataContextBinding";
|
|
72
|
+
}
|
|
73
|
+
public getInternalMockContext(): MockContext {
|
|
74
|
+
return this.oMockContext;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Mocked API
|
|
78
|
+
public getBoundContext = jest.fn(() => {
|
|
79
|
+
return (this.oMockContext as any) as Context;
|
|
80
|
+
});
|
|
81
|
+
public attachEventOnce = jest.fn();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Mock class for OData V4 MetaModel
|
|
86
|
+
*/
|
|
87
|
+
export class MockMetaModel implements Partial<ODataMetaModel> {
|
|
88
|
+
private oMetaContext: MockContext;
|
|
89
|
+
|
|
90
|
+
public constructor(oMetaData?: any) {
|
|
91
|
+
this.oMetaContext = new MockContext(oMetaData || {});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Mocked API
|
|
95
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
96
|
+
public getMetaContext = jest.fn((sPath: string) => {
|
|
97
|
+
return (new MockContext({ $path: sPath }) as any) as Context;
|
|
98
|
+
});
|
|
99
|
+
public getObject = jest.fn((sPath: string) => {
|
|
100
|
+
return this.oMetaContext.getProperty(sPath);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Mock class for OData V4 Model
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
export class MockModel implements Partial<ODataModel> {
|
|
109
|
+
private oMetaModel?: MockMetaModel;
|
|
110
|
+
|
|
111
|
+
public constructor(private mockListBinding?: MockListBinding, private mockContextBinding?: MockContextBinding) {}
|
|
112
|
+
|
|
113
|
+
// Factories
|
|
114
|
+
static modelFromListBinding(mockListBinding: MockListBinding): MockModel {
|
|
115
|
+
return new MockModel(mockListBinding);
|
|
116
|
+
}
|
|
117
|
+
static modelFromContextBinding(mockContextBinding: MockContextBinding): MockModel {
|
|
118
|
+
return new MockModel(undefined, mockContextBinding);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
public setMetaModel(oMetaModel: MockMetaModel) {
|
|
122
|
+
this.oMetaModel = oMetaModel;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Mocked API
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
127
|
+
public bindList = jest.fn((...args) => {
|
|
128
|
+
return (this.mockListBinding as any) as ODataListBinding;
|
|
129
|
+
});
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
131
|
+
public bindContext = jest.fn((...args) => {
|
|
132
|
+
return (this.mockContextBinding as any) as ODataContextBinding;
|
|
133
|
+
});
|
|
134
|
+
public getMetaModel = jest.fn(() => {
|
|
135
|
+
return (this.oMetaModel as any) as ODataMetaModel;
|
|
136
|
+
});
|
|
137
|
+
}
|