Skip to content

Commit

Permalink
resolve conflicts
Browse files Browse the repository at this point in the history
  • Loading branch information
musienko-maxim committed Sep 22, 2023
1 parent e862bb5 commit f3e3416
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 24 deletions.
96 changes: 96 additions & 0 deletions tests/e2e/specs/miscellaneous/WorkpaseWithParent.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/** *******************************************************************
* copyright (c) 2023 Red Hat, Inc.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
**********************************************************************/
import { e2eContainer } from '../../configs/inversify.config';
import { ShellExecutor } from '../../utils/ShellExecutor';
import { InputBox, QuickOpenBox, QuickPickItem, SideBarView, ViewItem, ViewSection, Workbench } from 'monaco-page-objects';
import { CLASSES } from '../../configs/inversify.types';
import { ProjectAndFileTests } from '../../tests-library/ProjectAndFileTests';
import { LoginTests } from '../../tests-library/LoginTests';
import { Dashboard } from '../../pageobjects/dashboard/Dashboard';
import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil';
import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS';
import { expect } from 'chai';
import { API_TEST_CONSTANTS } from '../../constants/API_TEST_CONSTANTS';
import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests';
import { registerRunningWorkspace } from '../MochaHooks';
import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor';

suite('Workspace using a parent test suite', function (): void {
const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests);
const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests);
const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil);
const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard);
const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor);
const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests);
const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get(
CLASSES.KubernetesCommandLineToolsExecutor
);
let podName: string = '';
loginTests.loginIntoChe();
kubernetesCommandLineToolsExecutor.loginToOcp();

test('Create a workspace using a parent', async function (): Promise<void> {
const factoryUrl: string = `${BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL}/dashboard/#https://github.com/testsfactory/parentDevfile`;
await dashboard.waitPage();
await browserTabsUtil.navigateTo(factoryUrl);
await workspaceHandlingTests.obtainWorkspaceNameFromStartingPage();
registerRunningWorkspace(WorkspaceHandlingTests.getWorkspaceName());
await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
await projectAndFileTests.performTrustAuthorDialog();
});

test('Check cloning of the test project', async function (): Promise<void> {
const expectedProjectItems: string[] = ['.devfile.yaml', 'parent.yaml', 'README.md'];
const visibleContent: ViewSection = await new SideBarView().getContent().getSection('parentdevfile');

for (const expectedProjectItem of expectedProjectItems) {
const visibleItem: ViewItem | undefined = await visibleContent.findItem(expectedProjectItem);
expect(visibleItem).not.equal(undefined);
}
});

test('Check devfile VS Code tasks ', async function (): Promise<void> {
const input: QuickOpenBox | InputBox = await new Workbench().openCommandPrompt();
await input.setText('>Tasks: Run Task');
const runTaskItem: QuickPickItem | undefined = await input.findQuickPick('Tasks: Run Task');
await runTaskItem?.click();
const devFileTask: QuickPickItem | undefined = await input.findQuickPick('devfile');
await devFileTask?.click();
const firstExpectedQuickPick: QuickPickItem | undefined = await input.findQuickPick('1. This command from the devfile');
const secondExpectedQuickPick: QuickPickItem | undefined = await input.findQuickPick('2. This command from the parent');
expect(firstExpectedQuickPick).not.eqls(undefined);
expect(secondExpectedQuickPick).not.undefined;
});

test('Check expected containers in the parent POD', function (): void {
const getPodNameCommand: string = `${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} get pods --selector=controller.devfile.io/devworkspace_name=sample-using-parent --output jsonpath=\'{.items[0].metadata.name}\'`;

podName = shellExecutor.executeArbitraryShellScript(getPodNameCommand);
const containerNames: string = shellExecutor.executeArbitraryShellScript(
`${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} get pod ${podName} --output jsonpath=\'{.spec.containers[*].name}\'`
);
expect(containerNames).contain('tools');
expect(containerNames).contains('che-gateway');

const initContainerName: string = shellExecutor.executeArbitraryShellScript(
`${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} get pod ${podName} --output jsonpath=\'{.spec.initContainers[].name}\'`
);
expect(initContainerName).contain('che-code-injector');
});

test('Check expected environment variables', function (): void {
const envList: string = shellExecutor.executeArbitraryShellScript(
`${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} exec -i ${podName} -c tools -- sh -c env`
);
expect(envList).contain('DEVFILE_ENV_VAR=true');
expect(envList).contain('PARENT_ENV_VAR=true');
});
loginTests.logoutFromChe();
});
43 changes: 20 additions & 23 deletions tests/e2e/specs/miscellaneous/WorkspaceWithParent.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,27 +16,25 @@ import { LoginTests } from '../../tests-library/LoginTests';
import { Dashboard } from '../../pageobjects/dashboard/Dashboard';
import { BrowserTabsUtil } from '../../utils/BrowserTabsUtil';
import { BASE_TEST_CONSTANTS } from '../../constants/BASE_TEST_CONSTANTS';
import { assert, expect } from 'chai';
import { expect } from 'chai';
import { API_TEST_CONSTANTS } from '../../constants/API_TEST_CONSTANTS';
import { ShellString } from 'shelljs';
import { WorkspaceHandlingTests } from '../../tests-library/WorkspaceHandlingTests';
import { registerRunningWorkspace } from '../MochaHooks';
const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests);
const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests);
const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil);
const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard);
const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor);
const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests);
function executeArbitraryShellScript(command: string): string {
const output: ShellString = shellExecutor.executeCommand(command);
if (output.stderr.length > 0) {
assert.fail(output.stderr);
}
return output.stdout;
}
import { KubernetesCommandLineToolsExecutor } from '../../utils/KubernetesCommandLineToolsExecutor';

suite('Workspace using a parent test suite', function (): void {
loginTests.loginIntoChe();
const projectAndFileTests: ProjectAndFileTests = e2eContainer.get(CLASSES.ProjectAndFileTests);
const loginTests: LoginTests = e2eContainer.get(CLASSES.LoginTests);
const browserTabsUtil: BrowserTabsUtil = e2eContainer.get(CLASSES.BrowserTabsUtil);
const dashboard: Dashboard = e2eContainer.get(CLASSES.Dashboard);
const shellExecutor: ShellExecutor = e2eContainer.get(CLASSES.ShellExecutor);
const workspaceHandlingTests: WorkspaceHandlingTests = e2eContainer.get(CLASSES.WorkspaceHandlingTests);
const kubernetesCommandLineToolsExecutor: KubernetesCommandLineToolsExecutor = e2eContainer.get(
CLASSES.KubernetesCommandLineToolsExecutor
);
let podName: string = '';
loginTests.loginIntoChe();
kubernetesCommandLineToolsExecutor.loginToOcp();

test('Create a workspace using a parent', async function (): Promise<void> {
const factoryUrl: string = `${BASE_TEST_CONSTANTS.TS_SELENIUM_BASE_URL}/dashboard/#https://github.com/testsfactory/parentDevfile`;
Expand All @@ -45,8 +43,6 @@ suite('Workspace using a parent test suite', function (): void {
await workspaceHandlingTests.obtainWorkspaceNameFromStartingPage();
registerRunningWorkspace(WorkspaceHandlingTests.getWorkspaceName());
await projectAndFileTests.waitWorkspaceReadinessForCheCodeEditor();
// sometimes the trust dialog does not appear at first time, for avoiding this problem we send click event for activating
await new Workbench().click();
await projectAndFileTests.performTrustAuthorDialog();
});

Expand All @@ -70,30 +66,31 @@ suite('Workspace using a parent test suite', function (): void {
const firstExpectedQuickPick: QuickPickItem | undefined = await input.findQuickPick('1. This command from the devfile');
const secondExpectedQuickPick: QuickPickItem | undefined = await input.findQuickPick('2. This command from the parent');
expect(firstExpectedQuickPick).not.eqls(undefined);
expect(secondExpectedQuickPick).not.eqls(undefined);
expect(secondExpectedQuickPick).not.undefined;
});

test('Check expected containers in the parent POD', function (): void {
const getPodNameCommand: string = `${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} get pods --selector=controller.devfile.io/devworkspace_name=sample-using-parent --output jsonpath=\'{.items[0].metadata.name}\'`;

podName = executeArbitraryShellScript(getPodNameCommand);
const containerNames: string = executeArbitraryShellScript(
podName = shellExecutor.executeArbitraryShellScript(getPodNameCommand);
const containerNames: string = shellExecutor.executeArbitraryShellScript(
`${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} get pod ${podName} --output jsonpath=\'{.spec.containers[*].name}\'`
);
expect(containerNames).contain('tools');
expect(containerNames).contains('che-gateway');

const initContainerName: string = executeArbitraryShellScript(
const initContainerName: string = shellExecutor.executeArbitraryShellScript(
`${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} get pod ${podName} --output jsonpath=\'{.spec.initContainers[].name}\'`
);
expect(initContainerName).contain('che-code-injector');
});

test('Check expected environment variables', function (): void {
const envList: string = executeArbitraryShellScript(
const envList: string = shellExecutor.executeArbitraryShellScript(
`${API_TEST_CONSTANTS.TS_API_TEST_KUBERNETES_COMMAND_LINE_TOOL} exec -i ${podName} -c tools -- sh -c env`
);
expect(envList).contain('DEVFILE_ENV_VAR=true');
expect(envList).contain('PARENT_ENV_VAR=true');
});
loginTests.logoutFromChe();
});
4 changes: 3 additions & 1 deletion tests/e2e/tests-library/ProjectAndFileTests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { CLASSES } from '../configs/inversify.types';
import { Logger } from '../utils/Logger';
import { TIMEOUT_CONSTANTS } from '../constants/TIMEOUT_CONSTANTS';
import { CheCodeLocatorLoader } from '../pageobjects/ide/CheCodeLocatorLoader';
import { Workbench } from 'monaco-page-objects';

@injectable()
export class ProjectAndFileTests {
Expand Down Expand Up @@ -43,7 +44,8 @@ export class ProjectAndFileTests {

async performTrustAuthorDialog(): Promise<void> {
Logger.debug();

// sometimes the trust dialog does not appear at first time, for avoiding this problem we send click event for activating
await new Workbench().click();
await this.driverHelper.waitAndClick(
this.cheCodeLocatorLoader.webCheCodeLocators.WelcomeContent.button,
TIMEOUT_CONSTANTS.TS_DIALOG_WINDOW_DEFAULT_TIMEOUT
Expand Down
8 changes: 8 additions & 0 deletions tests/e2e/utils/ShellExecutor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import { exec, ShellString } from 'shelljs';
import { Logger } from './Logger';
import { injectable } from 'inversify';
import { assert } from 'chai';

@injectable()
export class ShellExecutor {
Expand All @@ -25,4 +26,11 @@ export class ShellExecutor {
Logger.debug(command);
return exec(command);
}
executeArbitraryShellScript(command: string): string {
const output: ShellString = this.executeCommand(command);
if (output.stderr.length > 0) {
assert.fail(output.stderr);
}
return output.stdout;
}
}

0 comments on commit f3e3416

Please sign in to comment.