@gravitee/ui-policy-studio-angular 9.5.2 → 9.6.0-angular-16-c8d84dc

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.
Files changed (100) hide show
  1. package/{esm2020 → esm2022}/lib/components/filter-pipe/gio-flter-connectors-by-mode.pipe.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components/flow-details/gio-ps-flow-details.component.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.mjs +4 -4
  4. package/{esm2020 → esm2022}/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.mjs +4 -4
  5. package/{esm2020 → esm2022}/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.mjs +4 -4
  6. package/{esm2020 → esm2022}/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.component.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.component.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/components/flows-menu/gio-ps-flows-menu.component.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.component.mjs +4 -4
  11. package/{esm2020 → esm2022}/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.component.mjs +4 -4
  12. package/{esm2020 → esm2022}/lib/components/step-form/gio-ps-step-form.component.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/gio-policy-studio.component.mjs +4 -4
  14. package/{esm2020 → esm2022}/lib/gio-policy-studio.module.mjs +53 -53
  15. package/{esm2020 → esm2022}/lib/gio-policy-studio.service.mjs +4 -4
  16. package/esm2022/testing/lib/components/flow-details/gio-ps-flow-details.harness.mjs +41 -0
  17. package/esm2022/testing/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.mjs +35 -0
  18. package/esm2022/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.mjs +126 -0
  19. package/esm2022/testing/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.mjs +50 -0
  20. package/esm2022/testing/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.mjs +60 -0
  21. package/esm2022/testing/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.mjs +128 -0
  22. package/esm2022/testing/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.mjs +98 -0
  23. package/esm2022/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.mjs +71 -0
  24. package/esm2022/testing/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.mjs +87 -0
  25. package/{esm2020 → esm2022}/testing/lib/components/step-edit-dialog/gio-ps-step-edit-dialog.harness.mjs +2 -2
  26. package/esm2022/testing/lib/components/step-form/gio-ps-step-form.harness.mjs +49 -0
  27. package/esm2022/testing/lib/gio-policy-studio.harness.mjs +161 -0
  28. package/{fesm2020 → fesm2022}/gravitee-ui-policy-studio-angular-testing.mjs +12 -12
  29. package/{fesm2020 → fesm2022}/gravitee-ui-policy-studio-angular-testing.mjs.map +1 -1
  30. package/{fesm2020 → fesm2022}/gravitee-ui-policy-studio-angular.mjs +94 -94
  31. package/{fesm2020 → fesm2022}/gravitee-ui-policy-studio-angular.mjs.map +1 -1
  32. package/lib/components/flow-details/gio-ps-flow-details.component.d.ts +1 -1
  33. package/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.component.d.ts +1 -1
  34. package/lib/components/flow-details-phase/gio-ps-flow-details-phase.component.d.ts +1 -1
  35. package/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.component.d.ts +1 -1
  36. package/lib/components/flows-menu/gio-ps-flows-menu.component.d.ts +1 -1
  37. package/lib/components/step-form/gio-ps-step-form.component.d.ts +1 -1
  38. package/lib/gio-policy-studio.component.d.ts +1 -1
  39. package/package.json +14 -22
  40. package/esm2020/testing/lib/components/flow-details/gio-ps-flow-details.harness.mjs +0 -41
  41. package/esm2020/testing/lib/components/flow-details-info-bar/gio-ps-flow-details-info-bar.harness.mjs +0 -35
  42. package/esm2020/testing/lib/components/flow-details-phase/gio-ps-flow-details-phase.harness.mjs +0 -126
  43. package/esm2020/testing/lib/components/flow-details-phase-step/gio-ps-flow-details-phase-step.harness.mjs +0 -50
  44. package/esm2020/testing/lib/components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness.mjs +0 -60
  45. package/esm2020/testing/lib/components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness.mjs +0 -128
  46. package/esm2020/testing/lib/components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness.mjs +0 -98
  47. package/esm2020/testing/lib/components/flows-menu/gio-ps-flows-menu.harness.mjs +0 -71
  48. package/esm2020/testing/lib/components/policies-catalog-dialog/gio-ps-policies-catalog-dialog.harness.mjs +0 -87
  49. package/esm2020/testing/lib/components/step-form/gio-ps-step-form.harness.mjs +0 -49
  50. package/esm2020/testing/lib/gio-policy-studio.harness.mjs +0 -161
  51. package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs +0 -1443
  52. package/fesm2015/gravitee-ui-policy-studio-angular-testing.mjs.map +0 -1
  53. package/fesm2015/gravitee-ui-policy-studio-angular.mjs +0 -1645
  54. package/fesm2015/gravitee-ui-policy-studio-angular.mjs.map +0 -1
  55. /package/{esm2020 → esm2022}/gravitee-ui-policy-studio-angular.mjs +0 -0
  56. /package/{esm2020 → esm2022}/lib/components/flow-form-dialog/gio-ps-flow-form-dialog-result.model.mjs +0 -0
  57. /package/{esm2020 → esm2022}/lib/gio-policy-studio.model.mjs +0 -0
  58. /package/{esm2020 → esm2022}/lib/models/ConnectorsInfo.mjs +0 -0
  59. /package/{esm2020 → esm2022}/lib/models/PolicySchemaFetcher.mjs +0 -0
  60. /package/{esm2020 → esm2022}/lib/models/SaveOutput.mjs +0 -0
  61. /package/{esm2020 → esm2022}/lib/models/flow/ApiType.mjs +0 -0
  62. /package/{esm2020 → esm2022}/lib/models/flow/Flow.mjs +0 -0
  63. /package/{esm2020 → esm2022}/lib/models/flow/FlowExecution.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/models/flow/HttpMethod.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/models/flow/Selector.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/models/flow/Step.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/models/flow/index.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/models/plan/Plan.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/models/plan/index.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/models/policy/Policy.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/models/policy/index.mjs +0 -0
  73. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  74. /package/{esm2020 → esm2022}/testing/gravitee-ui-policy-studio-angular-testing.mjs +0 -0
  75. /package/{esm2020 → esm2022}/testing/lib/models/ConnectorsInfo.fixture.mjs +0 -0
  76. /package/{esm2020 → esm2022}/testing/lib/models/ConnectorsInfo.mjs +0 -0
  77. /package/{esm2020 → esm2022}/testing/lib/models/PolicySchemaFetcher.mjs +0 -0
  78. /package/{esm2020 → esm2022}/testing/lib/models/SaveOutput.mjs +0 -0
  79. /package/{esm2020 → esm2022}/testing/lib/models/flow/ApiType.mjs +0 -0
  80. /package/{esm2020 → esm2022}/testing/lib/models/flow/Flow.fixture.mjs +0 -0
  81. /package/{esm2020 → esm2022}/testing/lib/models/flow/Flow.mjs +0 -0
  82. /package/{esm2020 → esm2022}/testing/lib/models/flow/FlowExecution.fixture.mjs +0 -0
  83. /package/{esm2020 → esm2022}/testing/lib/models/flow/FlowExecution.mjs +0 -0
  84. /package/{esm2020 → esm2022}/testing/lib/models/flow/HttpMethod.mjs +0 -0
  85. /package/{esm2020 → esm2022}/testing/lib/models/flow/Selector.mjs +0 -0
  86. /package/{esm2020 → esm2022}/testing/lib/models/flow/Step.fixture.mjs +0 -0
  87. /package/{esm2020 → esm2022}/testing/lib/models/flow/Step.mjs +0 -0
  88. /package/{esm2020 → esm2022}/testing/lib/models/flow/index-testing.mjs +0 -0
  89. /package/{esm2020 → esm2022}/testing/lib/models/flow/index.mjs +0 -0
  90. /package/{esm2020 → esm2022}/testing/lib/models/index-testing.mjs +0 -0
  91. /package/{esm2020 → esm2022}/testing/lib/models/index.mjs +0 -0
  92. /package/{esm2020 → esm2022}/testing/lib/models/plan/Plan.fixture.mjs +0 -0
  93. /package/{esm2020 → esm2022}/testing/lib/models/plan/Plan.mjs +0 -0
  94. /package/{esm2020 → esm2022}/testing/lib/models/plan/index-testing.mjs +0 -0
  95. /package/{esm2020 → esm2022}/testing/lib/models/plan/index.mjs +0 -0
  96. /package/{esm2020 → esm2022}/testing/lib/models/policy/Policy.fixture.mjs +0 -0
  97. /package/{esm2020 → esm2022}/testing/lib/models/policy/Policy.mjs +0 -0
  98. /package/{esm2020 → esm2022}/testing/lib/models/policy/index-testing.mjs +0 -0
  99. /package/{esm2020 → esm2022}/testing/lib/models/policy/index.mjs +0 -0
  100. /package/{esm2020 → esm2022}/testing/public-testing-api.mjs +0 -0
@@ -0,0 +1,161 @@
1
+ /*
2
+ * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ComponentHarness } from '@angular/cdk/testing';
17
+ import { MatButtonHarness } from '@angular/material/button/testing';
18
+ import { MatTabGroupHarness } from '@angular/material/tabs/testing';
19
+ import { GioPolicyStudioFlowsMenuHarness } from './components/flows-menu/gio-ps-flows-menu.harness';
20
+ import { GioPolicyStudioDetailsHarness } from './components/flow-details/gio-ps-flow-details.harness';
21
+ import { GioPolicyStudioFlowProxyFormDialogHarness } from './components/flow-form-dialog/flow-proxy-form-dialog/gio-ps-flow-proxy-form-dialog.harness';
22
+ import { GioPolicyStudioFlowMessageFormDialogHarness } from './components/flow-form-dialog/flow-message-form-dialog/gio-ps-flow-message-form-dialog.harness';
23
+ import { GioPolicyStudioFlowExecutionFormDialogHarness } from './components/flow-execution-form-dialog/gio-ps-flow-execution-form-dialog.harness';
24
+ import { GioPolicyStudioDetailsPhaseHarness } from './components/flow-details-phase/gio-ps-flow-details-phase.harness';
25
+ export class GioPolicyStudioHarness extends ComponentHarness {
26
+ constructor() {
27
+ super(...arguments);
28
+ this.menuHarness = this.locatorFor(GioPolicyStudioFlowsMenuHarness);
29
+ this.detailsHarness = this.locatorFor(GioPolicyStudioDetailsHarness);
30
+ this.phaseHarness = (phaseType) => this.locatorFor(GioPolicyStudioDetailsPhaseHarness.with({ type: phaseType }))();
31
+ }
32
+ static { this.hostSelector = 'gio-policy-studio'; }
33
+ /**
34
+ * Add a flow to a plan or to "Common flows"
35
+ *
36
+ * @param groupName Plan name where to add the flow. You also can define "Common flows" to add a flow to this group.
37
+ * @param flow Flow to add
38
+ */
39
+ async addFlow(groupName, flow) {
40
+ await (await this.menuHarness()).addFlow(new RegExp(groupName, 'i'));
41
+ await this.setFlowFormDialog(flow);
42
+ }
43
+ /**
44
+ * Edit a flow configuration
45
+ *
46
+ * @param flowName Flow name to edit
47
+ * @param flow
48
+ */
49
+ async editFlowConfig(flowName, flow) {
50
+ (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));
51
+ await (await this.detailsHarness()).clickEditFlowBtn();
52
+ await this.setFlowFormDialog(flow);
53
+ }
54
+ /**
55
+ * Delete a flow
56
+ *
57
+ * @param flowName Flow name to delete
58
+ */
59
+ async deleteFlow(flowName) {
60
+ (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));
61
+ await (await this.detailsHarness()).clickDeleteFlowBtn();
62
+ }
63
+ /**
64
+ * Select a flow in the menu
65
+ *
66
+ * @param flowName Flow name to select
67
+ */
68
+ async selectFlowInMenu(flowName) {
69
+ await (await this.menuHarness()).selectFlow(new RegExp(flowName, 'i'));
70
+ }
71
+ /**
72
+ * Get the list of flows in the menu
73
+ */
74
+ async getFlowsMenu() {
75
+ return (await this.menuHarness()).getAllFlowsGroups();
76
+ }
77
+ /**
78
+ * Get selected flow infos
79
+ */
80
+ async getSelectedFlowInfos() {
81
+ return await (await this.detailsHarness()).getFlowInfos();
82
+ }
83
+ /**
84
+ * Get selected flow phase harness
85
+ * @param phaseType Phase type to get
86
+ */
87
+ async getSelectedFlowPhase(phaseType) {
88
+ if (phaseType === 'PUBLISH' || phaseType === 'SUBSCRIBE') {
89
+ const matTabsHarness = await this.locatorFor(MatTabGroupHarness.with({ selector: '.content__tabs' }))();
90
+ await matTabsHarness.selectTab({ label: 'Event messages' });
91
+ }
92
+ const steps = await this.phaseHarness(phaseType);
93
+ return steps ? steps : undefined;
94
+ }
95
+ /**
96
+ * Get Save button state
97
+ */
98
+ async getSaveButtonState() {
99
+ const saveButton = await this.locatorFor(MatButtonHarness.with({ ancestor: '.header__btn' }))();
100
+ const disabled = await saveButton.isDisabled();
101
+ const text = await saveButton.getText();
102
+ if (text === 'Saving...') {
103
+ return 'SAVING';
104
+ }
105
+ if (disabled) {
106
+ return 'DISABLED';
107
+ }
108
+ return 'VISIBLE';
109
+ }
110
+ /**
111
+ * Click on the "Save" button
112
+ */
113
+ async save() {
114
+ await (await this.locatorFor(MatButtonHarness.with({ text: /Save/ }))()).click();
115
+ }
116
+ async setFlowFormDialog(flow) {
117
+ const channelSelector = flow.selectors?.find(s => s.type === 'CHANNEL');
118
+ const httpSelector = flow.selectors?.find(s => s.type === 'HTTP');
119
+ const conditionSelector = flow.selectors?.find(s => s.type === 'CONDITION');
120
+ if (!!channelSelector && !!httpSelector) {
121
+ throw new Error('Channel and HTTP selectors are not be used together.');
122
+ }
123
+ if (channelSelector) {
124
+ const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowMessageFormDialogHarness)();
125
+ const toChannelOperator = {
126
+ STARTS_WITH: 'Starts with',
127
+ EQUALS: 'Equals',
128
+ };
129
+ await flowFormNewDialog.setFlowFormValues({
130
+ name: flow.name,
131
+ channel: channelSelector?.channel,
132
+ channelOperator: toChannelOperator[channelSelector.channelOperator],
133
+ entrypoints: channelSelector?.entrypoints,
134
+ operations: channelSelector?.operations,
135
+ condition: conditionSelector?.condition,
136
+ });
137
+ await flowFormNewDialog.save();
138
+ return;
139
+ }
140
+ if (httpSelector) {
141
+ const flowFormNewDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowProxyFormDialogHarness)();
142
+ await flowFormNewDialog.setFlowFormValues({
143
+ name: flow.name,
144
+ path: httpSelector?.path,
145
+ pathOperator: httpSelector?.pathOperator,
146
+ methods: httpSelector?.methods,
147
+ condition: conditionSelector?.condition,
148
+ });
149
+ await flowFormNewDialog.save();
150
+ return;
151
+ }
152
+ throw new Error('No selector found for this flow. Needed to select Message or Proxy flow form dialog.');
153
+ }
154
+ async setFlowExecutionConfig(flowExecution) {
155
+ await (await this.menuHarness()).openFlowExecutionConfig();
156
+ const flowExecutionDialog = await this.documentRootLocatorFactory().locatorFor(GioPolicyStudioFlowExecutionFormDialogHarness)();
157
+ await flowExecutionDialog.setFlowFormValues(flowExecution);
158
+ await flowExecutionDialog.save();
159
+ }
160
+ }
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLXBvbGljeS1zdHVkaW8uaGFybmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLXBvbGljeS1zdHVkaW8tYW5ndWxhci9zcmMvbGliL2dpby1wb2xpY3ktc3R1ZGlvLmhhcm5lc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdwRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN0RyxPQUFPLEVBQUUseUNBQXlDLEVBQUUsTUFBTSw0RkFBNEYsQ0FBQztBQUN2SixPQUFPLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxnR0FBZ0csQ0FBQztBQUM3SixPQUFPLEVBQUUsNkNBQTZDLEVBQUUsTUFBTSxtRkFBbUYsQ0FBQztBQUNsSixPQUFPLEVBQUUsa0NBQWtDLEVBQWEsTUFBTSxtRUFBbUUsQ0FBQztBQUVsSSxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsZ0JBQWdCO0lBQTVEOztRQUdVLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBRS9ELG1CQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBRWhFLGlCQUFZLEdBQUcsQ0FBQyxTQUFvQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQXFL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QUM7UUFFM0QsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFLENBQUM7UUFDaEksTUFBTSxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRCxNQUFNLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDIyIFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnRIYXJuZXNzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Rlc3RpbmcnO1xuaW1wb3J0IHsgTWF0QnV0dG9uSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi90ZXN0aW5nJztcbmltcG9ydCB7IE1hdFRhYkdyb3VwSGFybmVzcyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMvdGVzdGluZyc7XG5cbmltcG9ydCB7IENoYW5uZWxTZWxlY3RvciwgQ29uZGl0aW9uU2VsZWN0b3IsIEZsb3csIEZsb3dFeGVjdXRpb24sIEh0dHBTZWxlY3RvciB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0Zsb3dzTWVudUhhcm5lc3MgfSBmcm9tICcuL2NvbXBvbmVudHMvZmxvd3MtbWVudS9naW8tcHMtZmxvd3MtbWVudS5oYXJuZXNzJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0RldGFpbHNIYXJuZXNzIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zsb3ctZGV0YWlscy9naW8tcHMtZmxvdy1kZXRhaWxzLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvRmxvd1Byb3h5Rm9ybURpYWxvZ0hhcm5lc3MgfSBmcm9tICcuL2NvbXBvbmVudHMvZmxvdy1mb3JtLWRpYWxvZy9mbG93LXByb3h5LWZvcm0tZGlhbG9nL2dpby1wcy1mbG93LXByb3h5LWZvcm0tZGlhbG9nLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvRmxvd01lc3NhZ2VGb3JtRGlhbG9nSGFybmVzcyB9IGZyb20gJy4vY29tcG9uZW50cy9mbG93LWZvcm0tZGlhbG9nL2Zsb3ctbWVzc2FnZS1mb3JtLWRpYWxvZy9naW8tcHMtZmxvdy1tZXNzYWdlLWZvcm0tZGlhbG9nLmhhcm5lc3MnO1xuaW1wb3J0IHsgR2lvUG9saWN5U3R1ZGlvRmxvd0V4ZWN1dGlvbkZvcm1EaWFsb2dIYXJuZXNzIH0gZnJvbSAnLi9jb21wb25lbnRzL2Zsb3ctZXhlY3V0aW9uLWZvcm0tZGlhbG9nL2dpby1wcy1mbG93LWV4ZWN1dGlvbi1mb3JtLWRpYWxvZy5oYXJuZXNzJztcbmltcG9ydCB7IEdpb1BvbGljeVN0dWRpb0RldGFpbHNQaGFzZUhhcm5lc3MsIFBoYXNlVHlwZSB9IGZyb20gJy4vY29tcG9uZW50cy9mbG93LWRldGFpbHMtcGhhc2UvZ2lvLXBzLWZsb3ctZGV0YWlscy1waGFzZS5oYXJuZXNzJztcblxuZXhwb3J0IGNsYXNzIEdpb1BvbGljeVN0dWRpb0hhcm5lc3MgZXh0ZW5kcyBDb21wb25lbnRIYXJuZXNzIHtcbiAgcHVibGljIHN0YXRpYyBob3N0U2VsZWN0b3IgPSAnZ2lvLXBvbGljeS1zdHVkaW8nO1xuXG4gIHByaXZhdGUgbWVudUhhcm5lc3MgPSB0aGlzLmxvY2F0b3JGb3IoR2lvUG9saWN5U3R1ZGlvRmxvd3NNZW51SGFybmVzcyk7XG5cbiAgcHJpdmF0ZSBkZXRhaWxzSGFybmVzcyA9IHRoaXMubG9jYXRvckZvcihHaW9Qb2xpY3lTdHVkaW9EZXRhaWxzSGFybmVzcyk7XG5cbiAgcHJpdmF0ZSBwaGFzZUhhcm5lc3MgPSAocGhhc2VUeXBlOiBQaGFzZVR5cGUpID0+IHRoaXMubG9jYXRvckZvcihHaW9Qb2xpY3lTdHVkaW9EZXRhaWxzUGhhc2VIYXJuZXNzLndpdGgoeyB0eXBlOiBwaGFzZVR5cGUgfSkpKCk7XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZsb3cgdG8gYSBwbGFuIG9yIHRvIFwiQ29tbW9uIGZsb3dzXCJcbiAgICpcbiAgICogQHBhcmFtIGdyb3VwTmFtZSBQbGFuIG5hbWUgd2hlcmUgdG8gYWRkIHRoZSBmbG93LiBZb3UgYWxzbyBjYW4gZGVmaW5lIFwiQ29tbW9uIGZsb3dzXCIgdG8gYWRkIGEgZmxvdyB0byB0aGlzIGdyb3VwLlxuICAgKiBAcGFyYW0gZmxvdyBGbG93IHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFkZEZsb3coZ3JvdXBOYW1lOiBzdHJpbmcsIGZsb3c6IEZsb3cpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5tZW51SGFybmVzcygpKS5hZGRGbG93KG5ldyBSZWdFeHAoZ3JvdXBOYW1lLCAnaScpKTtcblxuICAgIGF3YWl0IHRoaXMuc2V0Rmxvd0Zvcm1EaWFsb2coZmxvdyk7XG4gIH1cblxuICAvKipcbiAgICogRWRpdCBhIGZsb3cgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZmxvd05hbWUgRmxvdyBuYW1lIHRvIGVkaXRcbiAgICogQHBhcmFtIGZsb3dcbiAgICovXG4gIHB1YmxpYyBhc3luYyBlZGl0Rmxvd0NvbmZpZyhmbG93TmFtZTogc3RyaW5nLCBmbG93OiBQYXJ0aWFsPEZsb3c+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgKGF3YWl0IHRoaXMubWVudUhhcm5lc3MoKSkuc2VsZWN0RmxvdyhuZXcgUmVnRXhwKGZsb3dOYW1lLCAnaScpKTtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5kZXRhaWxzSGFybmVzcygpKS5jbGlja0VkaXRGbG93QnRuKCk7XG5cbiAgICBhd2FpdCB0aGlzLnNldEZsb3dGb3JtRGlhbG9nKGZsb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIGZsb3dcbiAgICpcbiAgICogQHBhcmFtIGZsb3dOYW1lIEZsb3cgbmFtZSB0byBkZWxldGVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZWxldGVGbG93KGZsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAoYXdhaXQgdGhpcy5tZW51SGFybmVzcygpKS5zZWxlY3RGbG93KG5ldyBSZWdFeHAoZmxvd05hbWUsICdpJykpO1xuICAgIGF3YWl0IChhd2FpdCB0aGlzLmRldGFpbHNIYXJuZXNzKCkpLmNsaWNrRGVsZXRlRmxvd0J0bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhIGZsb3cgaW4gdGhlIG1lbnVcbiAgICpcbiAgICogQHBhcmFtIGZsb3dOYW1lIEZsb3cgbmFtZSB0byBzZWxlY3RcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZWxlY3RGbG93SW5NZW51KGZsb3dOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCAoYXdhaXQgdGhpcy5tZW51SGFybmVzcygpKS5zZWxlY3RGbG93KG5ldyBSZWdFeHAoZmxvd05hbWUsICdpJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBmbG93cyBpbiB0aGUgbWVudVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEZsb3dzTWVudSgpOiBQcm9taXNlPFxuICAgIHtcbiAgICAgIG5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICBmbG93czoge1xuICAgICAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBpc1NlbGVjdGVkOiBib29sZWFuO1xuICAgICAgICBpbmZvczogc3RyaW5nIHwgbnVsbDtcbiAgICAgIH1bXTtcbiAgICB9W11cbiAgPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLm1lbnVIYXJuZXNzKCkpLmdldEFsbEZsb3dzR3JvdXBzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlbGVjdGVkIGZsb3cgaW5mb3NcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3RlZEZsb3dJbmZvcygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIChzdHJpbmcgfCBudWxsKVtdPj4ge1xuICAgIHJldHVybiBhd2FpdCAoYXdhaXQgdGhpcy5kZXRhaWxzSGFybmVzcygpKS5nZXRGbG93SW5mb3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0ZWQgZmxvdyBwaGFzZSBoYXJuZXNzXG4gICAqIEBwYXJhbSBwaGFzZVR5cGUgUGhhc2UgdHlwZSB0byBnZXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZWxlY3RlZEZsb3dQaGFzZShwaGFzZVR5cGU6IFBoYXNlVHlwZSk6IFByb21pc2U8R2lvUG9saWN5U3R1ZGlvRGV0YWlsc1BoYXNlSGFybmVzcyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChwaGFzZVR5cGUgPT09ICdQVUJMSVNIJyB8fCBwaGFzZVR5cGUgPT09ICdTVUJTQ1JJQkUnKSB7XG4gICAgICBjb25zdCBtYXRUYWJzSGFybmVzcyA9IGF3YWl0IHRoaXMubG9jYXRvckZvcihNYXRUYWJHcm91cEhhcm5lc3Mud2l0aCh7IHNlbGVjdG9yOiAnLmNvbnRlbnRfX3RhYnMnIH0pKSgpO1xuICAgICAgYXdhaXQgbWF0VGFic0hhcm5lc3Muc2VsZWN0VGFiKHsgbGFiZWw6ICdFdmVudCBtZXNzYWdlcycgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcHMgPSBhd2FpdCB0aGlzLnBoYXNlSGFybmVzcyhwaGFzZVR5cGUpO1xuXG4gICAgcmV0dXJuIHN0ZXBzID8gc3RlcHMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFNhdmUgYnV0dG9uIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2F2ZUJ1dHRvblN0YXRlKCk6IFByb21pc2U8J1ZJU0lCTEUnIHwgJ0RJU0FCTEVEJyB8ICdTQVZJTkcnPiB7XG4gICAgY29uc3Qgc2F2ZUJ1dHRvbiA9IGF3YWl0IHRoaXMubG9jYXRvckZvcihNYXRCdXR0b25IYXJuZXNzLndpdGgoeyBhbmNlc3RvcjogJy5oZWFkZXJfX2J0bicgfSkpKCk7XG4gICAgY29uc3QgZGlzYWJsZWQgPSBhd2FpdCBzYXZlQnV0dG9uLmlzRGlzYWJsZWQoKTtcbiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgc2F2ZUJ1dHRvbi5nZXRUZXh0KCk7XG5cbiAgICBpZiAodGV4dCA9PT0gJ1NhdmluZy4uLicpIHtcbiAgICAgIHJldHVybiAnU0FWSU5HJztcbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiAnRElTQUJMRUQnO1xuICAgIH1cblxuICAgIHJldHVybiAnVklTSUJMRSc7XG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgb24gdGhlIFwiU2F2ZVwiIGJ1dHRvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgKGF3YWl0IHRoaXMubG9jYXRvckZvcihNYXRCdXR0b25IYXJuZXNzLndpdGgoeyB0ZXh0OiAvU2F2ZS8gfSkpKCkpLmNsaWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldEZsb3dGb3JtRGlhbG9nKGZsb3c6IFBhcnRpYWw8Rmxvdz4pIHtcbiAgICBjb25zdCBjaGFubmVsU2VsZWN0b3IgPSBmbG93LnNlbGVjdG9ycz8uZmluZChzID0+IHMudHlwZSA9PT0gJ0NIQU5ORUwnKSBhcyBDaGFubmVsU2VsZWN0b3IgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgaHR0cFNlbGVjdG9yID0gZmxvdy5zZWxlY3RvcnM/LmZpbmQocyA9PiBzLnR5cGUgPT09ICdIVFRQJykgYXMgSHR0cFNlbGVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbmRpdGlvblNlbGVjdG9yID0gZmxvdy5zZWxlY3RvcnM/LmZpbmQocyA9PiBzLnR5cGUgPT09ICdDT05ESVRJT04nKSBhcyBDb25kaXRpb25TZWxlY3RvciB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghIWNoYW5uZWxTZWxlY3RvciAmJiAhIWh0dHBTZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIGFuZCBIVFRQIHNlbGVjdG9ycyBhcmUgbm90IGJlIHVzZWQgdG9nZXRoZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5uZWxTZWxlY3Rvcikge1xuICAgICAgY29uc3QgZmxvd0Zvcm1OZXdEaWFsb2cgPSBhd2FpdCB0aGlzLmRvY3VtZW50Um9vdExvY2F0b3JGYWN0b3J5KCkubG9jYXRvckZvcihHaW9Qb2xpY3lTdHVkaW9GbG93TWVzc2FnZUZvcm1EaWFsb2dIYXJuZXNzKSgpO1xuXG4gICAgICBjb25zdCB0b0NoYW5uZWxPcGVyYXRvciA9IHtcbiAgICAgICAgU1RBUlRTX1dJVEg6ICdTdGFydHMgd2l0aCcsXG4gICAgICAgIEVRVUFMUzogJ0VxdWFscycsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBmbG93Rm9ybU5ld0RpYWxvZy5zZXRGbG93Rm9ybVZhbHVlcyh7XG4gICAgICAgIG5hbWU6IGZsb3cubmFtZSxcbiAgICAgICAgY2hhbm5lbDogY2hhbm5lbFNlbGVjdG9yPy5jaGFubmVsLFxuICAgICAgICBjaGFubmVsT3BlcmF0b3I6IHRvQ2hhbm5lbE9wZXJhdG9yW2NoYW5uZWxTZWxlY3Rvci5jaGFubmVsT3BlcmF0b3JdLFxuICAgICAgICBlbnRyeXBvaW50czogY2hhbm5lbFNlbGVjdG9yPy5lbnRyeXBvaW50cyxcbiAgICAgICAgb3BlcmF0aW9uczogY2hhbm5lbFNlbGVjdG9yPy5vcGVyYXRpb25zLFxuICAgICAgICBjb25kaXRpb246IGNvbmRpdGlvblNlbGVjdG9yPy5jb25kaXRpb24sXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgZmxvd0Zvcm1OZXdEaWFsb2cuc2F2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChodHRwU2VsZWN0b3IpIHtcbiAgICAgIGNvbnN0IGZsb3dGb3JtTmV3RGlhbG9nID0gYXdhaXQgdGhpcy5kb2N1bWVudFJvb3RMb2NhdG9yRmFjdG9yeSgpLmxvY2F0b3JGb3IoR2lvUG9saWN5U3R1ZGlvRmxvd1Byb3h5Rm9ybURpYWxvZ0hhcm5lc3MpKCk7XG5cbiAgICAgIGF3YWl0IGZsb3dGb3JtTmV3RGlhbG9nLnNldEZsb3dGb3JtVmFsdWVzKHtcbiAgICAgICAgbmFtZTogZmxvdy5uYW1lLFxuICAgICAgICBwYXRoOiBodHRwU2VsZWN0b3I/LnBhdGgsXG4gICAgICAgIHBhdGhPcGVyYXRvcjogaHR0cFNlbGVjdG9yPy5wYXRoT3BlcmF0b3IsXG4gICAgICAgIG1ldGhvZHM6IGh0dHBTZWxlY3Rvcj8ubWV0aG9kcyxcbiAgICAgICAgY29uZGl0aW9uOiBjb25kaXRpb25TZWxlY3Rvcj8uY29uZGl0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGZsb3dGb3JtTmV3RGlhbG9nLnNhdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlbGVjdG9yIGZvdW5kIGZvciB0aGlzIGZsb3cuIE5lZWRlZCB0byBzZWxlY3QgTWVzc2FnZSBvciBQcm94eSBmbG93IGZvcm0gZGlhbG9nLicpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldEZsb3dFeGVjdXRpb25Db25maWcoZmxvd0V4ZWN1dGlvbjogRmxvd0V4ZWN1dGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IChhd2FpdCB0aGlzLm1lbnVIYXJuZXNzKCkpLm9wZW5GbG93RXhlY3V0aW9uQ29uZmlnKCk7XG5cbiAgICBjb25zdCBmbG93RXhlY3V0aW9uRGlhbG9nID0gYXdhaXQgdGhpcy5kb2N1bWVudFJvb3RMb2NhdG9yRmFjdG9yeSgpLmxvY2F0b3JGb3IoR2lvUG9saWN5U3R1ZGlvRmxvd0V4ZWN1dGlvbkZvcm1EaWFsb2dIYXJuZXNzKSgpO1xuICAgIGF3YWl0IGZsb3dFeGVjdXRpb25EaWFsb2cuc2V0Rmxvd0Zvcm1WYWx1ZXMoZmxvd0V4ZWN1dGlvbik7XG4gICAgYXdhaXQgZmxvd0V4ZWN1dGlvbkRpYWxvZy5zYXZlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -653,6 +653,7 @@ class GioPolicyStudioFlowsMenuHarness extends ComponentHarness {
653
653
  this.locateGroupByText = (text) => this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup', text }));
654
654
  this.locateSelectedFlow = this.locatorForOptional(DivHarness.with({ selector: '.list__flowsGroup__flow.selected' }));
655
655
  }
656
+ static { this.hostSelector = 'gio-ps-flows-menu'; }
656
657
  async getAllFlowsGroups() {
657
658
  const flowsGroups = await this.locateFlowsGroups();
658
659
  return parallel(() => flowsGroups.map(async (flowsGroup) => {
@@ -695,7 +696,6 @@ class GioPolicyStudioFlowsMenuHarness extends ComponentHarness {
695
696
  await (await this.locatorFor(MatButtonHarness.with({ selector: '.header__configBtn_edit' }))())?.click();
696
697
  }
697
698
  }
698
- GioPolicyStudioFlowsMenuHarness.hostSelector = 'gio-ps-flows-menu';
699
699
 
700
700
  /*
701
701
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -713,6 +713,7 @@ GioPolicyStudioFlowsMenuHarness.hostSelector = 'gio-ps-flows-menu';
713
713
  * limitations under the License.
714
714
  */
715
715
  class GioPolicyStudioDetailsInfoBarHarness extends ComponentHarness {
716
+ static { this.hostSelector = 'gio-ps-flow-details-info-bar'; }
716
717
  async getInfos() {
717
718
  const infosDiv = await this.locatorForAll(DivHarness.with({ selector: '.info' }))();
718
719
  const allKeyValue = await parallel(() => infosDiv.map(async (info) => {
@@ -728,7 +729,6 @@ class GioPolicyStudioDetailsInfoBarHarness extends ComponentHarness {
728
729
  }, {});
729
730
  }
730
731
  }
731
- GioPolicyStudioDetailsInfoBarHarness.hostSelector = 'gio-ps-flow-details-info-bar';
732
732
 
733
733
  /*
734
734
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -746,6 +746,7 @@ GioPolicyStudioDetailsInfoBarHarness.hostSelector = 'gio-ps-flow-details-info-ba
746
746
  * limitations under the License.
747
747
  */
748
748
  class GioPolicyStudioDetailsHarness extends ComponentHarness {
749
+ static { this.hostSelector = 'gio-ps-flow-details'; }
749
750
  async isDisplayEmptyFlow() {
750
751
  const hostText = await (await this.host()).text();
751
752
  return hostText.includes('No flows yet');
@@ -766,7 +767,6 @@ class GioPolicyStudioDetailsHarness extends ComponentHarness {
766
767
  await deleteFlowBtn.click();
767
768
  }
768
769
  }
769
- GioPolicyStudioDetailsHarness.hostSelector = 'gio-ps-flow-details';
770
770
 
771
771
  /*
772
772
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -794,6 +794,7 @@ class GioPolicyStudioFlowProxyFormDialogHarness extends ComponentHarness {
794
794
  this.methodsInput = this.locatorFor(GioFormTagsInputHarness.with({ selector: '[formControlName="methods"]' }));
795
795
  this.conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName="condition"]' }));
796
796
  }
797
+ static { this.hostSelector = 'gio-ps-flow-proxy-form-dialog'; }
797
798
  async setFlowFormValues(flow) {
798
799
  if (flow.name) {
799
800
  const nameInput = await this.nameInput();
@@ -859,7 +860,6 @@ class GioPolicyStudioFlowProxyFormDialogHarness extends ComponentHarness {
859
860
  await button.click();
860
861
  }
861
862
  }
862
- GioPolicyStudioFlowProxyFormDialogHarness.hostSelector = 'gio-ps-flow-proxy-form-dialog';
863
863
 
864
864
  /*
865
865
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -888,6 +888,7 @@ class GioPolicyStudioFlowMessageFormDialogHarness extends ComponentHarness {
888
888
  this.entrypointsInput = this.locatorFor(MatSelectHarness.with({ selector: '[formControlName="entrypoints"]' }));
889
889
  this.conditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName="condition"]' }));
890
890
  }
891
+ static { this.hostSelector = 'gio-ps-flow-message-form-dialog'; }
891
892
  async setFlowFormValues(flow) {
892
893
  if (flow.name) {
893
894
  const nameInput = await this.nameInput();
@@ -983,7 +984,6 @@ class GioPolicyStudioFlowMessageFormDialogHarness extends ComponentHarness {
983
984
  };
984
985
  }
985
986
  }
986
- GioPolicyStudioFlowMessageFormDialogHarness.hostSelector = 'gio-ps-flow-message-form-dialog';
987
987
 
988
988
  /*
989
989
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1006,6 +1006,7 @@ class GioPolicyStudioFlowExecutionFormDialogHarness extends ComponentHarness {
1006
1006
  this.getSaveBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__saveBtn' }));
1007
1007
  this.getCancelBtn = this.locatorFor(MatButtonHarness.with({ selector: '.actions__cancelBtn' }));
1008
1008
  }
1009
+ static { this.hostSelector = 'gio-ps-flow-execution-form-dialog'; }
1009
1010
  async setFlowFormValues(flowExecution) {
1010
1011
  const modeInput = await this.locatorFor(MatSelectHarness.with({ selector: '[formControlName="mode"]' }))();
1011
1012
  const matchRequiredInput = await this.locatorFor(MatSlideToggleHarness.with({ selector: '[formControlName="matchRequired"]' }))();
@@ -1039,7 +1040,6 @@ class GioPolicyStudioFlowExecutionFormDialogHarness extends ComponentHarness {
1039
1040
  await button.click();
1040
1041
  }
1041
1042
  }
1042
- GioPolicyStudioFlowExecutionFormDialogHarness.hostSelector = 'gio-ps-flow-execution-form-dialog';
1043
1043
 
1044
1044
  /*
1045
1045
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1057,6 +1057,7 @@ GioPolicyStudioFlowExecutionFormDialogHarness.hostSelector = 'gio-ps-flow-execut
1057
1057
  * limitations under the License.
1058
1058
  */
1059
1059
  class GioPolicyStudioDetailsPhaseStepHarness extends ComponentHarness {
1060
+ static { this.hostSelector = 'gio-ps-flow-details-phase-step'; }
1060
1061
  /**
1061
1062
  * Get Harness with the given filter.
1062
1063
  *
@@ -1085,7 +1086,6 @@ class GioPolicyStudioDetailsPhaseStepHarness extends ComponentHarness {
1085
1086
  await matMenu.clickItem({ text: /Disable|Enable/ });
1086
1087
  }
1087
1088
  }
1088
- GioPolicyStudioDetailsPhaseStepHarness.hostSelector = 'gio-ps-flow-details-phase-step';
1089
1089
 
1090
1090
  /*
1091
1091
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1108,6 +1108,7 @@ class GioPolicyStudioStepFormHarness extends ComponentHarness {
1108
1108
  this.getDescriptionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName="description"]' }));
1109
1109
  this.getConditionInput = this.locatorFor(MatInputHarness.with({ selector: '[formControlName="condition"]' }));
1110
1110
  }
1111
+ static { this.hostSelector = 'gio-ps-step-form'; }
1111
1112
  async setStepForm(stepForm) {
1112
1113
  if (stepForm.description) {
1113
1114
  const descriptionInput = await this.getDescriptionInput();
@@ -1132,7 +1133,6 @@ class GioPolicyStudioStepFormHarness extends ComponentHarness {
1132
1133
  return documentation.getAttribute('ng-reflect-content');
1133
1134
  }
1134
1135
  }
1135
- GioPolicyStudioStepFormHarness.hostSelector = 'gio-ps-step-form';
1136
1136
 
1137
1137
  /*
1138
1138
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1150,6 +1150,7 @@ GioPolicyStudioStepFormHarness.hostSelector = 'gio-ps-step-form';
1150
1150
  * limitations under the License.
1151
1151
  */
1152
1152
  class GioPolicyStudioStepEditDialogHarness extends ComponentHarness {
1153
+ static { this.hostSelector = 'gio-ps-step-edit-dialog'; }
1153
1154
  async getPolicyName() {
1154
1155
  return (await this.locatorFor('.title__name')()).text();
1155
1156
  }
@@ -1160,7 +1161,6 @@ class GioPolicyStudioStepEditDialogHarness extends ComponentHarness {
1160
1161
  return (await this.locatorFor('.actions__saveBtn')()).click();
1161
1162
  }
1162
1163
  }
1163
- GioPolicyStudioStepEditDialogHarness.hostSelector = 'gio-ps-step-edit-dialog';
1164
1164
 
1165
1165
  /*
1166
1166
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1183,6 +1183,7 @@ class GioPolicyStudioPoliciesCatalogDialogHarness extends ComponentHarness {
1183
1183
  this.policiesLocator = this.locatorForAll(DivHarness.with({ selector: '.policiesCatalog__list__policy' }));
1184
1184
  this.getCategoriesFilter = this.locatorForOptional(MatChipListboxHarness.with({ selector: '[formControlName="categories"]' }));
1185
1185
  }
1186
+ static { this.hostSelector = 'gio-ps-policies-catalog-dialog'; }
1186
1187
  async getPhase() {
1187
1188
  const phase = await this.locatorFor('.title__phase')();
1188
1189
  return phase.text();
@@ -1241,7 +1242,6 @@ class GioPolicyStudioPoliciesCatalogDialogHarness extends ComponentHarness {
1241
1242
  }
1242
1243
  }
1243
1244
  }
1244
- GioPolicyStudioPoliciesCatalogDialogHarness.hostSelector = 'gio-ps-policies-catalog-dialog';
1245
1245
 
1246
1246
  /*
1247
1247
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1269,6 +1269,7 @@ class GioPolicyStudioDetailsPhaseHarness extends ComponentHarness {
1269
1269
  super(...arguments);
1270
1270
  this.getHeaderName = () => this.locatorForOptional(SpanHarness.with({ selector: '.header__name' }))().then(async (span) => span?.getText() ?? null);
1271
1271
  }
1272
+ static { this.hostSelector = 'gio-ps-flow-details-phase'; }
1272
1273
  /**
1273
1274
  * Get Harness with the given filter.
1274
1275
  *
@@ -1360,7 +1361,6 @@ class GioPolicyStudioDetailsPhaseHarness extends ComponentHarness {
1360
1361
  await step.clickOnDisableEnable();
1361
1362
  }
1362
1363
  }
1363
- GioPolicyStudioDetailsPhaseHarness.hostSelector = 'gio-ps-flow-details-phase';
1364
1364
 
1365
1365
  /*
1366
1366
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)
@@ -1384,6 +1384,7 @@ class GioPolicyStudioHarness extends ComponentHarness {
1384
1384
  this.detailsHarness = this.locatorFor(GioPolicyStudioDetailsHarness);
1385
1385
  this.phaseHarness = (phaseType) => this.locatorFor(GioPolicyStudioDetailsPhaseHarness.with({ type: phaseType }))();
1386
1386
  }
1387
+ static { this.hostSelector = 'gio-policy-studio'; }
1387
1388
  /**
1388
1389
  * Add a flow to a plan or to "Common flows"
1389
1390
  *
@@ -1512,7 +1513,6 @@ class GioPolicyStudioHarness extends ComponentHarness {
1512
1513
  await flowExecutionDialog.save();
1513
1514
  }
1514
1515
  }
1515
- GioPolicyStudioHarness.hostSelector = 'gio-policy-studio';
1516
1516
 
1517
1517
  /*
1518
1518
  * Copyright (C) 2022 The Gravitee team (http://gravitee.io)