Skip to content

Commit

Permalink
Refactoring test codebase accordind to recomendations
Browse files Browse the repository at this point in the history
  • Loading branch information
musienko-maxim committed Sep 22, 2023
1 parent e862bb5 commit f0bda13
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 27 deletions.
48 changes: 22 additions & 26 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 @@ -69,31 +65,31 @@ suite('Workspace using a parent test suite', function (): void {
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.eqls(undefined);
expect(firstExpectedQuickPick).not.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');
expect(envList).contain('DEVFILE_ENV_VAR=true').and.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
9 changes: 9 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,12 @@ export class ShellExecutor {
Logger.debug(command);
return exec(command);
}
executeArbitraryShellScript(command: string): string {
Logger.debug(command);
const output: ShellString = this.executeCommand(command);
if (output.stderr.length > 0) {
assert.fail(output.stderr);
}
return output.stdout;
}
}

0 comments on commit f0bda13

Please sign in to comment.