@eclipse-che/che-e2e 7.87.0-next-b640f5c → 7.87.0-next-ccb99a6

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.
@@ -20,6 +20,42 @@ const TIMEOUT_CONSTANTS_1 = require("../../constants/TIMEOUT_CONSTANTS");
20
20
  const PLUGIN_TEST_CONSTANTS_1 = require("../../constants/PLUGIN_TEST_CONSTANTS");
21
21
  const BASE_TEST_CONSTANTS_1 = require("../../constants/BASE_TEST_CONSTANTS");
22
22
  const samples = PLUGIN_TEST_CONSTANTS_1.PLUGIN_TEST_CONSTANTS.TS_SAMPLE_LIST.split(',');
23
+ // get visible items from Extension view, transform this from array to sorted string and compares it with existed recommended extensions
24
+ async function getVisibleFilteredItemsAndCompareWithRecommended(recommendations) {
25
+ const extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
26
+ const [marketplaceSection] = (await extensionsView?.getContent().getSections());
27
+ const sections = await extensionsView?.getContent().getSections();
28
+ // if we have a big recommender extension list it can be overlapped by other recommendations panel,
29
+ // in this case we need to collapse it for instance: it is actual for Quarkus example
30
+ if (sections !== undefined) {
31
+ for (let i = 0; i < sections.length; i++) {
32
+ const currentSection = sections[i];
33
+ const isOtherRecommendedSectionPresent = (await currentSection.getTitle()) === 'Other Recommendations';
34
+ const isOtherRecommendationExpanded = await sections[i].isExpanded();
35
+ if (isOtherRecommendedSectionPresent && isOtherRecommendationExpanded) {
36
+ await currentSection.collapse();
37
+ }
38
+ }
39
+ }
40
+ Logger_1.Logger.debug('marketplaceSection.getVisibleItems()');
41
+ const allFoundRecommendedItems = await marketplaceSection.getVisibleItems();
42
+ const allFoundRecommendedAuthors = await Promise.all(allFoundRecommendedItems.map(async (item) => await item.getAuthor()));
43
+ const allFoundAuthorsAsSortedString = allFoundRecommendedAuthors.sort().toString();
44
+ const allPublisherNamesAsSorString = recommendations.sort().toString();
45
+ return allFoundAuthorsAsSortedString === allPublisherNamesAsSorString;
46
+ }
47
+ // get visible items from Extension view, transform this from array to sorted string and compares it with existed installed extensions
48
+ async function getVisibleFilteredItemsAndCompareWithInstalled(recommendations) {
49
+ const extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
50
+ const [marketplaceSection] = (await extensionsView?.getContent().getSections());
51
+ Logger_1.Logger.debug('marketplaceSection.getVisibleItems()');
52
+ const allFoundRecommendedItems = await marketplaceSection.getVisibleItems();
53
+ const allFoundRecommendedAuthors = await Promise.all(allFoundRecommendedItems.map(async (item) => await item.getAuthor()));
54
+ const allFoundAuthorsAsSortedString = allFoundRecommendedAuthors.sort().toString();
55
+ const allPublisherNamesAsSortString = recommendations.sort().toString();
56
+ // in some cases we can have installed not only recommended extensions with some samples (for example .Net)
57
+ return allFoundAuthorsAsSortedString.includes(allPublisherNamesAsSortString);
58
+ }
23
59
  for (const sample of samples) {
24
60
  suite(`Check if recommended extensions installed for ${sample} ${BASE_TEST_CONSTANTS_1.BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function () {
25
61
  const projectAndFileTests = inversify_config_1.e2eContainer.get(inversify_types_1.CLASSES.ProjectAndFileTests);
@@ -34,10 +70,12 @@ for (const sample of samples) {
34
70
  let projectSection;
35
71
  let extensionSection;
36
72
  let extensionsView;
73
+ let publisherNames;
37
74
  const [pathToExtensionsListFileName, extensionsListFileName] = ['.vscode', 'extensions.json'];
38
75
  let recommendedExtensions = {
39
76
  recommendations: []
40
77
  };
78
+ let parsedRecommendations;
41
79
  suiteSetup('Login', async function () {
42
80
  await loginTests.loginIntoChe();
43
81
  });
@@ -55,6 +93,9 @@ for (const sample of samples) {
55
93
  await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
56
94
  });
57
95
  test('Check the project files were imported', async function () {
96
+ // add TS_IDE_LOAD_TIMEOUT timeout for waiting for finishing animation of all IDE parts (Welcome parts. bottom widgets. etc.)
97
+ // using TS_IDE_LOAD_TIMEOUT easier than performing of finishing animation all elements
98
+ await driverHelper.wait(TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT);
58
99
  projectSection = await projectAndFileTests.getProjectViewSession();
59
100
  (0, chai_1.expect)(await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName), 'Files not imported').not
60
101
  .undefined;
@@ -63,7 +104,14 @@ for (const sample of samples) {
63
104
  await projectAndFileTests.performTrustAuthorDialog();
64
105
  });
65
106
  test(`Get recommended extensions list from ${extensionsListFileName}`, async function () {
66
- await (await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName))?.select();
107
+ // sometimes the Trust Dialog does not appear as expected - as result we need to execute "projectAndFileTests.performManageWorkspaceTrustBox()" method. In this case.
108
+ try {
109
+ await (await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName))?.select();
110
+ }
111
+ catch (err) {
112
+ await projectAndFileTests.performManageWorkspaceTrustBox();
113
+ await (await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName))?.select();
114
+ }
67
115
  await (await projectAndFileTests.getProjectTreeItem(projectSection, extensionsListFileName, 3))?.select();
68
116
  Logger_1.Logger.debug(`EditorView().openEditor(${extensionsListFileName})`);
69
117
  const editor = (await new monaco_page_objects_1.EditorView().openEditor(extensionsListFileName));
@@ -71,16 +119,24 @@ for (const sample of samples) {
71
119
  Logger_1.Logger.debug('editor.getText(): get recommended extensions as text from editor, delete comments and parse to object.');
72
120
  recommendedExtensions = JSON.parse((await editor.getText()).replace(/\/\*[\s\S]*?\*\/|(?<=[^:])\/\/.*|^\/\/.*/g, '').trim());
73
121
  Logger_1.Logger.debug('recommendedExtensions.recommendations: Get recommendations clear names using map().');
74
- recommendedExtensions.recommendations = recommendedExtensions.recommendations.map((r) => {
75
- const [publisher, name] = r.split('.');
122
+ parsedRecommendations = recommendedExtensions.recommendations.map((rec) => {
123
+ const [publisher, name] = rec.split('.');
76
124
  return { publisher, name };
77
125
  });
78
- Logger_1.Logger.debug(`Recommended extension for this workspace:\n${JSON.stringify(recommendedExtensions.recommendations)}.`);
79
- (0, chai_1.expect)(recommendedExtensions.recommendations, 'Recommendations not found').not.empty;
126
+ Logger_1.Logger.debug(`Recommended extension for this workspace:\n${JSON.stringify(parsedRecommendations)}.`);
127
+ publisherNames = parsedRecommendations.map((rec) => rec.publisher);
128
+ (0, chai_1.expect)(parsedRecommendations, 'Recommendations not found').not.empty;
80
129
  });
81
130
  test('Open "Extensions" view section', async function () {
82
131
  Logger_1.Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): open Extensions view.');
83
- extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
132
+ // sometimes the Trust Dialog does not appear as expected - as result we need to execute "projectAndFileTests.performManageWorkspaceTrustBox()" method. In this case.
133
+ try {
134
+ extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
135
+ }
136
+ catch (err) {
137
+ await projectAndFileTests.performManageWorkspaceTrustBox();
138
+ extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
139
+ }
84
140
  (0, chai_1.expect)(extensionsView, 'Can`t find Extension section').not.undefined;
85
141
  });
86
142
  test('Let extensions complete installation', async function () {
@@ -90,65 +146,49 @@ for (const sample of samples) {
90
146
  });
91
147
  test('Check if extensions are installed and enabled', async function () {
92
148
  // timeout 15 seconds per extensions
93
- this.timeout(TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_FIND_EXTENSION_TEST_TIMEOUT * recommendedExtensions.recommendations.length);
149
+ this.timeout(TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_FIND_EXTENSION_TEST_TIMEOUT * parsedRecommendations.length);
94
150
  Logger_1.Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): open Extensions view.');
95
151
  extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
96
152
  Logger_1.Logger.debug('extensionsView?.getContent().getSections(): get current section.');
97
153
  [extensionSection] = (await extensionsView?.getContent().getSections());
98
154
  (0, chai_1.expect)(extensionSection, 'Can`t find Extension section').not.undefined;
99
155
  await driverHelper.waitVisibility(webCheCodeLocators.ExtensionsViewSection.itemTitle, TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
100
- for (const extension of recommendedExtensions.recommendations) {
101
- Logger_1.Logger.debug(`extensionSection.findItem(${extension.name}).`);
102
- await extensionSection.findItem(extension.name);
103
- const isReloadRequired = await driverHelper.isVisible(webCheCodeLocators.ExtensionsViewSection.requireReloadButton);
104
- Logger_1.Logger.debug(`Is extensions require reload the editor: ${isReloadRequired}`);
105
- if (isReloadRequired) {
106
- Logger_1.Logger.debug('Refreshing the page..');
107
- await browserTabsUtil.refreshPage();
108
- await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
109
- await driverHelper.waitVisibility(webCheCodeLocators.ActivityBar.viewContainer, TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
110
- Logger_1.Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): reopen Extensions view.');
111
- extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
112
- await driverHelper.waitVisibility(webCheCodeLocators.ExtensionsViewSection.itemTitle, TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
113
- (0, chai_1.expect)(extensionsView, 'Can`t find Extension View section').not.undefined;
114
- [extensionSection] = (await extensionsView?.getContent().getSections());
115
- (0, chai_1.expect)(extensionSection, 'Can`t find Extension section').not.undefined;
116
- Logger_1.Logger.debug(`extensionSection.findItem(${extension.name}).`);
117
- await extensionSection.findItem(extension.name);
118
- }
119
- Logger_1.Logger.debug('extensionsView.getContent().getSections(): switch to marketplace section.');
120
- const [marketplaceSection] = (await extensionsView
121
- ?.getContent()
122
- .getSections());
123
- Logger_1.Logger.debug('marketplaceSection.getVisibleItems()');
124
- const allFinedItems = await marketplaceSection.getVisibleItems();
125
- (0, chai_1.expect)(allFinedItems, 'Extensions not found').not.empty;
126
- let itemWithRightNameAndPublisher = undefined;
127
- for (const item of allFinedItems) {
128
- Logger_1.Logger.debug(`Try to find extension published by ${extension.publisher}.`);
129
- if ((await item.getAuthor()) === extension.publisher) {
130
- itemWithRightNameAndPublisher = item;
131
- Logger_1.Logger.debug(`Extension was found: ${await itemWithRightNameAndPublisher?.getTitle()}`);
132
- break;
133
- }
134
- (0, chai_1.expect)(itemWithRightNameAndPublisher, `Extension ${extension.name} not found`).not.undefined;
135
- }
136
- Logger_1.Logger.debug('itemWithRightNameAndPublisher?.isInstalled()');
137
- const isInstalled = (await itemWithRightNameAndPublisher?.isInstalled());
138
- Logger_1.Logger.debug(`itemWithRightNameAndPublisher?.isInstalled(): ${isInstalled}.`);
139
- (0, chai_1.expect)(isInstalled, `Extension ${extension.name} not installed`).to.be.true;
140
- Logger_1.Logger.debug('itemWithRightNameAndPublisher.manage(): get context menu.');
141
- const extensionManageMenu = await itemWithRightNameAndPublisher.manage();
142
- Logger_1.Logger.debug('extensionManageMenu.getItems(): get menu items.');
143
- const extensionMenuItems = await extensionManageMenu.getItems();
144
- let extensionMenuItemLabels = '';
145
- Logger_1.Logger.trace('extensionMenuItems -> item.getLabel(): get menu items names.');
146
- for (const item of extensionMenuItems) {
147
- extensionMenuItemLabels += (await item.getLabel()) + ' ';
148
- }
149
- Logger_1.Logger.debug(`extensionMenuItemLabels: ${extensionMenuItemLabels}.`);
150
- (0, chai_1.expect)(extensionMenuItemLabels, `Extension ${extension.name} not enabled`).contains('Disable').and.not.contains('Enable');
156
+ Logger_1.Logger.debug('extensionSection.findItem by @recommended filter');
157
+ try {
158
+ await extensionSection.findItem('@recommended');
159
+ }
160
+ catch (err) {
161
+ await driverHelper.wait(TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EXPAND_PROJECT_TREE_ITEM_TIMEOUT);
162
+ await extensionSection.findItem('@recommended');
163
+ }
164
+ const isReloadRequired = await driverHelper.isVisible(webCheCodeLocators.ExtensionsViewSection.requireReloadButton);
165
+ Logger_1.Logger.debug(`Is extensions require reload the editor: ${isReloadRequired}`);
166
+ if (isReloadRequired) {
167
+ Logger_1.Logger.debug('Refreshing the page..');
168
+ await browserTabsUtil.refreshPage();
169
+ await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
170
+ await driverHelper.waitVisibility(webCheCodeLocators.ActivityBar.viewContainer, TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
171
+ Logger_1.Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): reopen Extensions view.');
172
+ extensionsView = await (await new monaco_page_objects_1.ActivityBar().getViewControl('Extensions'))?.openView();
173
+ await driverHelper.waitVisibility(webCheCodeLocators.ExtensionsViewSection.itemTitle, TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT);
174
+ (0, chai_1.expect)(extensionsView, 'Can`t find Extension View section').not.undefined;
175
+ [extensionSection] = (await extensionsView?.getContent().getSections());
176
+ (0, chai_1.expect)(extensionSection, 'Can`t find Extension section').not.undefined;
177
+ await extensionSection.findItem('@recommended ');
178
+ }
179
+ Logger_1.Logger.debug('extensionSection.findItem by @recommended filter');
180
+ (0, chai_1.expect)(await getVisibleFilteredItemsAndCompareWithRecommended(publisherNames)).to.be.true;
181
+ Logger_1.Logger.debug(`All recommended extensions were found by @recommended filter: ---- ${publisherNames} ----`);
182
+ Logger_1.Logger.debug('extensionSection.findItem by @installed filter');
183
+ try {
184
+ await extensionSection.findItem('@installed ');
185
+ }
186
+ catch (err) {
187
+ await driverHelper.wait(TIMEOUT_CONSTANTS_1.TIMEOUT_CONSTANTS.TS_EXPAND_PROJECT_TREE_ITEM_TIMEOUT);
188
+ await extensionSection.findItem('@installed ');
151
189
  }
190
+ (0, chai_1.expect)(await getVisibleFilteredItemsAndCompareWithInstalled(publisherNames)).to.be.true;
191
+ Logger_1.Logger.debug(`All recommended extensions were found by @installed filter: ---- ${publisherNames} ----`);
152
192
  });
153
193
  suiteTeardown('Open dashboard and close all other tabs', async function () {
154
194
  await dashboard.openDashboard();
@@ -1 +1 @@
1
- {"version":3,"file":"RecommendedExtensions.spec.js","sourceRoot":"","sources":["../../../specs/dashboard-samples/RecommendedExtensions.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RecommendedExtensions.spec.js","sourceRoot":"","sources":["../../../specs/dashboard-samples/RecommendedExtensions.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-che/che-e2e",
3
- "version": "7.87.0-next-b640f5c",
3
+ "version": "7.87.0-next-ccb99a6",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -10,8 +10,6 @@
10
10
 
11
11
  import {
12
12
  ActivityBar,
13
- ContextMenu,
14
- ContextMenuItem,
15
13
  EditorView,
16
14
  ExtensionsViewItem,
17
15
  ExtensionsViewSection,
@@ -39,6 +37,49 @@ import { Dashboard } from '../../pageobjects/dashboard/Dashboard';
39
37
 
40
38
  const samples: string[] = PLUGIN_TEST_CONSTANTS.TS_SAMPLE_LIST.split(',');
41
39
 
40
+ // get visible items from Extension view, transform this from array to sorted string and compares it with existed recommended extensions
41
+ async function getVisibleFilteredItemsAndCompareWithRecommended(recommendations: string[]): Promise<boolean> {
42
+ const extensionsView: SideBarView | undefined = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
43
+ const [marketplaceSection]: ExtensionsViewSection[] = (await extensionsView?.getContent().getSections()) as ExtensionsViewSection[];
44
+ const sections: ViewSection[] | undefined = await extensionsView?.getContent().getSections();
45
+
46
+ // if we have a big recommender extension list it can be overlapped by other recommendations panel,
47
+ // in this case we need to collapse it for instance: it is actual for Quarkus example
48
+ if (sections !== undefined) {
49
+ for (let i: number = 0; i < sections.length; i++) {
50
+ const currentSection: ViewSection = sections[i];
51
+ const isOtherRecommendedSectionPresent: boolean = (await currentSection.getTitle()) === 'Other Recommendations';
52
+ const isOtherRecommendationExpanded: boolean = await sections[i].isExpanded();
53
+ if (isOtherRecommendedSectionPresent && isOtherRecommendationExpanded) {
54
+ await currentSection.collapse();
55
+ }
56
+ }
57
+ }
58
+ Logger.debug('marketplaceSection.getVisibleItems()');
59
+ const allFoundRecommendedItems: ExtensionsViewItem[] = await marketplaceSection.getVisibleItems();
60
+ const allFoundRecommendedAuthors: string[] = await Promise.all(
61
+ allFoundRecommendedItems.map(async (item: ExtensionsViewItem): Promise<string> => await item.getAuthor())
62
+ );
63
+
64
+ const allFoundAuthorsAsSortedString: string = allFoundRecommendedAuthors.sort().toString();
65
+ const allPublisherNamesAsSorString: string = recommendations.sort().toString();
66
+ return allFoundAuthorsAsSortedString === allPublisherNamesAsSorString;
67
+ }
68
+ // get visible items from Extension view, transform this from array to sorted string and compares it with existed installed extensions
69
+ async function getVisibleFilteredItemsAndCompareWithInstalled(recommendations: string[]): Promise<boolean> {
70
+ const extensionsView: SideBarView | undefined = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
71
+ const [marketplaceSection]: ExtensionsViewSection[] = (await extensionsView?.getContent().getSections()) as ExtensionsViewSection[];
72
+ Logger.debug('marketplaceSection.getVisibleItems()');
73
+ const allFoundRecommendedItems: ExtensionsViewItem[] = await marketplaceSection.getVisibleItems();
74
+ const allFoundRecommendedAuthors: string[] = await Promise.all(
75
+ allFoundRecommendedItems.map(async (item: ExtensionsViewItem): Promise<string> => await item.getAuthor())
76
+ );
77
+
78
+ const allFoundAuthorsAsSortedString: string = allFoundRecommendedAuthors.sort().toString();
79
+ const allPublisherNamesAsSortString: string = recommendations.sort().toString();
80
+ // in some cases we can have installed not only recommended extensions with some samples (for example .Net)
81
+ return allFoundAuthorsAsSortedString.includes(allPublisherNamesAsSortString);
82
+ }
42
83
  for (const sample of samples) {
43
84
  suite(`Check if recommended extensions installed for ${sample} ${BASE_TEST_CONSTANTS.TEST_ENVIRONMENT}`, function (): void {
44
85
  const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests);
@@ -50,16 +91,18 @@ for (const sample of samples) {
50
91
  const webCheCodeLocators: Locators = cheCodeLocatorLoader.webCheCodeLocators;
51
92
  const testWorkspaceUtil: ITestWorkspaceUtil = e2eContainer.get(TYPES.WorkspaceUtil);
52
93
  const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard);
53
-
54
94
  let projectSection: ViewSection;
55
95
  let extensionSection: ExtensionsViewSection;
56
96
  let extensionsView: SideBarView | undefined;
97
+ let publisherNames: string[];
57
98
 
58
99
  const [pathToExtensionsListFileName, extensionsListFileName]: string[] = ['.vscode', 'extensions.json'];
100
+
59
101
  let recommendedExtensions: any = {
60
102
  recommendations: []
61
103
  };
62
104
 
105
+ let parsedRecommendations: Array<{ name: string; publisher: string }>;
63
106
  suiteSetup('Login', async function (): Promise<void> {
64
107
  await loginTests.loginIntoChe();
65
108
  });
@@ -81,6 +124,9 @@ for (const sample of samples) {
81
124
  });
82
125
 
83
126
  test('Check the project files were imported', async function (): Promise<void> {
127
+ // add TS_IDE_LOAD_TIMEOUT timeout for waiting for finishing animation of all IDE parts (Welcome parts. bottom widgets. etc.)
128
+ // using TS_IDE_LOAD_TIMEOUT easier than performing of finishing animation all elements
129
+ await driverHelper.wait(TIMEOUT_CONSTANTS.TS_IDE_LOAD_TIMEOUT);
84
130
  projectSection = await projectAndFileTests.getProjectViewSession();
85
131
  expect(await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName), 'Files not imported').not
86
132
  .undefined;
@@ -91,7 +137,13 @@ for (const sample of samples) {
91
137
  });
92
138
 
93
139
  test(`Get recommended extensions list from ${extensionsListFileName}`, async function (): Promise<void> {
94
- await (await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName))?.select();
140
+ // sometimes the Trust Dialog does not appear as expected - as result we need to execute "projectAndFileTests.performManageWorkspaceTrustBox()" method. In this case.
141
+ try {
142
+ await (await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName))?.select();
143
+ } catch (err) {
144
+ await projectAndFileTests.performManageWorkspaceTrustBox();
145
+ await (await projectAndFileTests.getProjectTreeItem(projectSection, pathToExtensionsListFileName))?.select();
146
+ }
95
147
  await (await projectAndFileTests.getProjectTreeItem(projectSection, extensionsListFileName, 3))?.select();
96
148
  Logger.debug(`EditorView().openEditor(${extensionsListFileName})`);
97
149
  const editor: TextEditor = (await new EditorView().openEditor(extensionsListFileName)) as TextEditor;
@@ -99,19 +151,25 @@ for (const sample of samples) {
99
151
  Logger.debug('editor.getText(): get recommended extensions as text from editor, delete comments and parse to object.');
100
152
  recommendedExtensions = JSON.parse((await editor.getText()).replace(/\/\*[\s\S]*?\*\/|(?<=[^:])\/\/.*|^\/\/.*/g, '').trim());
101
153
  Logger.debug('recommendedExtensions.recommendations: Get recommendations clear names using map().');
102
- recommendedExtensions.recommendations = recommendedExtensions.recommendations.map(
103
- (r: { split: (arg: string) => [any, any] }): { name: any; publisher: any } => {
104
- const [publisher, name] = r.split('.');
105
- return { publisher, name };
106
- }
107
- );
108
- Logger.debug(`Recommended extension for this workspace:\n${JSON.stringify(recommendedExtensions.recommendations)}.`);
109
- expect(recommendedExtensions.recommendations, 'Recommendations not found').not.empty;
154
+ parsedRecommendations = recommendedExtensions.recommendations.map((rec: string): { name: string; publisher: string } => {
155
+ const [publisher, name] = rec.split('.');
156
+ return { publisher, name };
157
+ });
158
+ Logger.debug(`Recommended extension for this workspace:\n${JSON.stringify(parsedRecommendations)}.`);
159
+
160
+ publisherNames = parsedRecommendations.map((rec: { name: string; publisher: string }): string => rec.publisher);
161
+ expect(parsedRecommendations, 'Recommendations not found').not.empty;
110
162
  });
111
163
 
112
164
  test('Open "Extensions" view section', async function (): Promise<void> {
113
165
  Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): open Extensions view.');
114
- extensionsView = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
166
+ // sometimes the Trust Dialog does not appear as expected - as result we need to execute "projectAndFileTests.performManageWorkspaceTrustBox()" method. In this case.
167
+ try {
168
+ extensionsView = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
169
+ } catch (err) {
170
+ await projectAndFileTests.performManageWorkspaceTrustBox();
171
+ extensionsView = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
172
+ }
115
173
  expect(extensionsView, 'Can`t find Extension section').not.undefined;
116
174
  });
117
175
 
@@ -125,7 +183,7 @@ for (const sample of samples) {
125
183
 
126
184
  test('Check if extensions are installed and enabled', async function (): Promise<void> {
127
185
  // timeout 15 seconds per extensions
128
- this.timeout(TIMEOUT_CONSTANTS.TS_FIND_EXTENSION_TEST_TIMEOUT * recommendedExtensions.recommendations.length);
186
+ this.timeout(TIMEOUT_CONSTANTS.TS_FIND_EXTENSION_TEST_TIMEOUT * parsedRecommendations.length);
129
187
  Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): open Extensions view.');
130
188
  extensionsView = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
131
189
 
@@ -137,75 +195,51 @@ for (const sample of samples) {
137
195
  TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT
138
196
  );
139
197
 
140
- for (const extension of recommendedExtensions.recommendations) {
141
- Logger.debug(`extensionSection.findItem(${extension.name}).`);
142
- await extensionSection.findItem(extension.name);
198
+ Logger.debug('extensionSection.findItem by @recommended filter');
199
+ try {
200
+ await extensionSection.findItem('@recommended');
201
+ } catch (err) {
202
+ await driverHelper.wait(TIMEOUT_CONSTANTS.TS_EXPAND_PROJECT_TREE_ITEM_TIMEOUT);
203
+ await extensionSection.findItem('@recommended');
204
+ }
205
+ const isReloadRequired: boolean = await driverHelper.isVisible(
206
+ (webCheCodeLocators.ExtensionsViewSection as any).requireReloadButton
207
+ );
208
+ Logger.debug(`Is extensions require reload the editor: ${isReloadRequired}`);
143
209
 
144
- const isReloadRequired: boolean = await driverHelper.isVisible(
145
- (webCheCodeLocators.ExtensionsViewSection as any).requireReloadButton
210
+ if (isReloadRequired) {
211
+ Logger.debug('Refreshing the page..');
212
+ await browserTabsUtil.refreshPage();
213
+ await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
214
+ await driverHelper.waitVisibility(
215
+ webCheCodeLocators.ActivityBar.viewContainer,
216
+ TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT
146
217
  );
147
- Logger.debug(`Is extensions require reload the editor: ${isReloadRequired}`);
148
-
149
- if (isReloadRequired) {
150
- Logger.debug('Refreshing the page..');
151
- await browserTabsUtil.refreshPage();
152
- await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
153
- await driverHelper.waitVisibility(
154
- webCheCodeLocators.ActivityBar.viewContainer,
155
- TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT
156
- );
157
- Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): reopen Extensions view.');
158
- extensionsView = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
159
- await driverHelper.waitVisibility(
160
- webCheCodeLocators.ExtensionsViewSection.itemTitle,
161
- TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT
162
- );
163
- expect(extensionsView, 'Can`t find Extension View section').not.undefined;
164
- [extensionSection] = (await extensionsView?.getContent().getSections()) as ExtensionsViewSection[];
165
- expect(extensionSection, 'Can`t find Extension section').not.undefined;
166
- Logger.debug(`extensionSection.findItem(${extension.name}).`);
167
- await extensionSection.findItem(extension.name);
168
- }
169
-
170
- Logger.debug('extensionsView.getContent().getSections(): switch to marketplace section.');
171
- const [marketplaceSection]: ExtensionsViewSection[] = (await extensionsView
172
- ?.getContent()
173
- .getSections()) as ExtensionsViewSection[];
174
-
175
- Logger.debug('marketplaceSection.getVisibleItems()');
176
- const allFinedItems: ExtensionsViewItem[] = await marketplaceSection.getVisibleItems();
177
- expect(allFinedItems, 'Extensions not found').not.empty;
178
- let itemWithRightNameAndPublisher: ExtensionsViewItem | undefined = undefined;
179
- for (const item of allFinedItems) {
180
- Logger.debug(`Try to find extension published by ${extension.publisher}.`);
181
- if ((await item.getAuthor()) === extension.publisher) {
182
- itemWithRightNameAndPublisher = item;
183
- Logger.debug(`Extension was found: ${await itemWithRightNameAndPublisher?.getTitle()}`);
184
- break;
185
- }
186
- expect(itemWithRightNameAndPublisher, `Extension ${extension.name} not found`).not.undefined;
187
- }
188
-
189
- Logger.debug('itemWithRightNameAndPublisher?.isInstalled()');
190
- const isInstalled: boolean = (await itemWithRightNameAndPublisher?.isInstalled()) as boolean;
191
-
192
- Logger.debug(`itemWithRightNameAndPublisher?.isInstalled(): ${isInstalled}.`);
193
- expect(isInstalled, `Extension ${extension.name} not installed`).to.be.true;
194
-
195
- Logger.debug('itemWithRightNameAndPublisher.manage(): get context menu.');
196
- const extensionManageMenu: ContextMenu = await (itemWithRightNameAndPublisher as ExtensionsViewItem).manage();
197
-
198
- Logger.debug('extensionManageMenu.getItems(): get menu items.');
199
- const extensionMenuItems: ContextMenuItem[] = await extensionManageMenu.getItems();
200
- let extensionMenuItemLabels: string = '';
201
- Logger.trace('extensionMenuItems -> item.getLabel(): get menu items names.');
202
- for (const item of extensionMenuItems) {
203
- extensionMenuItemLabels += (await item.getLabel()) + ' ';
204
- }
205
-
206
- Logger.debug(`extensionMenuItemLabels: ${extensionMenuItemLabels}.`);
207
- expect(extensionMenuItemLabels, `Extension ${extension.name} not enabled`).contains('Disable').and.not.contains('Enable');
218
+ Logger.debug('ActivityBar().getViewControl("Extensions"))?.openView(): reopen Extensions view.');
219
+ extensionsView = await (await new ActivityBar().getViewControl('Extensions'))?.openView();
220
+ await driverHelper.waitVisibility(
221
+ webCheCodeLocators.ExtensionsViewSection.itemTitle,
222
+ TIMEOUT_CONSTANTS.TS_EDITOR_TAB_INTERACTION_TIMEOUT
223
+ );
224
+ expect(extensionsView, 'Can`t find Extension View section').not.undefined;
225
+ [extensionSection] = (await extensionsView?.getContent().getSections()) as ExtensionsViewSection[];
226
+ expect(extensionSection, 'Can`t find Extension section').not.undefined;
227
+ await extensionSection.findItem('@recommended ');
228
+ }
229
+
230
+ Logger.debug('extensionSection.findItem by @recommended filter');
231
+ expect(await getVisibleFilteredItemsAndCompareWithRecommended(publisherNames)).to.be.true;
232
+ Logger.debug(`All recommended extensions were found by @recommended filter: ---- ${publisherNames} ----`);
233
+
234
+ Logger.debug('extensionSection.findItem by @installed filter');
235
+ try {
236
+ await extensionSection.findItem('@installed ');
237
+ } catch (err) {
238
+ await driverHelper.wait(TIMEOUT_CONSTANTS.TS_EXPAND_PROJECT_TREE_ITEM_TIMEOUT);
239
+ await extensionSection.findItem('@installed ');
208
240
  }
241
+ expect(await getVisibleFilteredItemsAndCompareWithInstalled(publisherNames)).to.be.true;
242
+ Logger.debug(`All recommended extensions were found by @installed filter: ---- ${publisherNames} ----`);
209
243
  });
210
244
 
211
245
  suiteTeardown('Open dashboard and close all other tabs', async function (): Promise<void> {