Skip to content

Commit 4ab17d5

Browse files
authored
Update deployWorkspaceProject tests to reflect the new deployment modes (#973)
1 parent 7567177 commit 4ab17d5

File tree

13 files changed

+285
-219
lines changed

13 files changed

+285
-219
lines changed

src/commands/image/imageSource/containerRegistry/acr/AcrListStep.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { RegistryNameStep } from "./createAcr/RegistryNameStep";
1616
import { SkuListStep } from "./createAcr/SkuListStep";
1717

1818
export interface AcrListStepOptions {
19+
createIfNone?: boolean;
1920
suppressCreatePick?: boolean;
2021
pickUpdateStrategy?: AcrPickUpdateStrategy;
2122
}
@@ -48,7 +49,7 @@ export class AcrListStep<T extends ContainerRegistryImageSourceContext> extends
4849
let result: Registry | typeof noMatchingResources | undefined;
4950
do {
5051
const picks: IAzureQuickPickItem<Registry | typeof noMatchingResources | undefined>[] = await this.getPicks(context);
51-
if (picks.length === 1 && picks[0] === acrCreatePick) {
52+
if (this.options.createIfNone && picks.length === 1 && picks[0] === acrCreatePick) {
5253
pick = acrCreatePick;
5354
result = pick.data as typeof acrCreatePick['data'];
5455
break;

test/nightly/deployWorkspaceProject/deployWorkspaceProject.test.ts

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,11 @@
33
* Licensed under the MIT License. See LICENSE.md in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { type ManagedEnvironment } from "@azure/arm-appcontainers";
7-
import { type Registry } from "@azure/arm-containerregistry";
8-
import { runWithTestActionContext } from "@microsoft/vscode-azext-dev";
9-
import { nonNullProp, randomUtils } from "@microsoft/vscode-azext-utils";
10-
import * as assert from "assert";
11-
import { createAcr, createManagedEnvironment } from "../../../extension.bundle";
6+
import { nonNullProp } from "@microsoft/vscode-azext-utils";
127
import { longRunningTestsEnabled } from '../../global.test';
13-
import { resourceGroupsToDelete } from "../global.nightly.test";
14-
import { buildParallelTestScenarios, type DwpParallelTestScenario } from './buildParallelScenarios';
8+
import { generateParallelTests, type DwpParallelTestScenario } from "./parallelTests";
159

16-
let setupTask: Promise<void>;
17-
const testScenarios: DwpParallelTestScenario[] = buildParallelTestScenarios();
10+
const testScenarios: DwpParallelTestScenario[] = generateParallelTests();
1811

1912
suite('deployWorkspaceProject', async function (this: Mocha.Suite) {
2013
this.timeout(15 * 60 * 1000);
@@ -24,13 +17,8 @@ suite('deployWorkspaceProject', async function (this: Mocha.Suite) {
2417
this.skip();
2518
}
2619

27-
// Create a container registry & managed environment first so that we can guarantee one is always built before workspace deployment tests start.
28-
// This is crucial for test consistency because some resource prompts will skip if no existing resources exist to choose from
29-
// Creating at least one of each resource first ensures consistent reproduceability.
30-
setupTask = setupResources();
31-
3220
for (const s of testScenarios) {
33-
s.scenario = s.callback(setupTask);
21+
s.scenario = s.callback();
3422
}
3523
});
3624

@@ -40,39 +28,3 @@ suite('deployWorkspaceProject', async function (this: Mocha.Suite) {
4028
});
4129
}
4230
});
43-
44-
async function setupResources(): Promise<void> {
45-
let envResourceTask: Promise<void> | undefined;
46-
let managedEnvironment: ManagedEnvironment | undefined;
47-
try {
48-
envResourceTask = runWithTestActionContext('createManagedEnvironment', async context => {
49-
const resourceName: string = 'dwp' + randomUtils.getRandomHexString(6);
50-
await context.ui.runWithInputs([resourceName, 'East US'], async () => {
51-
managedEnvironment = await createManagedEnvironment(context);
52-
});
53-
});
54-
} catch (e) {
55-
console.error(e);
56-
}
57-
58-
let acrResourceTask: Promise<void> | undefined;
59-
let registry: Registry | undefined;
60-
try {
61-
acrResourceTask = runWithTestActionContext('createContainerRegistry', async context => {
62-
const resourceName: string = 'dwp' + randomUtils.getRandomHexString(6);
63-
await context.ui.runWithInputs([resourceName, 'Basic', 'East US'], async () => {
64-
registry = await createAcr(context);
65-
});
66-
});
67-
} catch (e) {
68-
console.error(e);
69-
}
70-
71-
await Promise.allSettled([envResourceTask, acrResourceTask]);
72-
73-
assert.ok(managedEnvironment, 'Failed to create managed environment - skipping "deployWorkspaceProject" tests.');
74-
resourceGroupsToDelete.add(nonNullProp(managedEnvironment, 'name'));
75-
76-
assert.ok(registry, 'Failed to create container registry - skipping "deployWorkspaceProject" tests.');
77-
resourceGroupsToDelete.add(nonNullProp(registry, 'name'));
78-
}

test/nightly/deployWorkspaceProject/dwpTestScenarios.ts

Lines changed: 0 additions & 44 deletions
This file was deleted.

test/nightly/deployWorkspaceProject/dwpTestUtils.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import * as assert from "assert";
1010
import { createContainerAppsAPIClient, type DeployWorkspaceProjectResults } from "../../../extension.bundle";
1111
import { type StringOrRegExpProps } from "../../typeUtils";
1212
import { subscriptionContext } from "../global.nightly.test";
13-
import { type PostTestAssertion } from "./testCases/DeployWorkspaceProjectTestCase";
13+
import { type PostTestAssertion } from "./scenarios/DeployWorkspaceProjectTestScenario";
1414

1515
export namespace dwpTestUtils {
1616
export function generateExpectedResultsWithCredentials(sharedResourceName: string, acrResourceName: string, appResourceName: string): StringOrRegExpProps<DeployWorkspaceProjectResults> {
@@ -19,10 +19,10 @@ export namespace dwpTestUtils {
1919
imageName: new RegExp(appResourceName, 'i'),
2020
logAnalyticsWorkspaceId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.OperationalInsights\/workspaces\/${sharedResourceName}`, 'i'),
2121
managedEnvironmentId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.App\/managedEnvironments\/${sharedResourceName}`, 'i'),
22-
registryId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.ContainerRegistry\/registries\/${acrResourceName}.{6}`, 'i'),
23-
registryLoginServer: new RegExp(`${acrResourceName}.{6}\.azurecr\.io`, 'i'),
22+
registryId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.ContainerRegistry\/registries\/${acrResourceName}`, 'i'),
23+
registryLoginServer: new RegExp(`${acrResourceName}(?:.{6})?\.azurecr\.io`, 'i'),
2424
registryPassword: new RegExp('.*'),
25-
registryUsername: new RegExp(`${acrResourceName}.{6}`, 'i'),
25+
registryUsername: new RegExp(acrResourceName, 'i'),
2626
resourceGroupId: new RegExp(`\/resourceGroups\/${sharedResourceName}`, 'i')
2727
};
2828
}
@@ -33,8 +33,8 @@ export namespace dwpTestUtils {
3333
imageName: new RegExp(appResourceName, 'i'),
3434
logAnalyticsWorkspaceId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.OperationalInsights\/workspaces\/${sharedResourceName}`, 'i'),
3535
managedEnvironmentId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.App\/managedEnvironments\/${sharedResourceName}`, 'i'),
36-
registryId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.ContainerRegistry\/registries\/${acrResourceName}.{6}`, 'i'),
37-
registryLoginServer: new RegExp(`${acrResourceName}.{6}\.azurecr\.io`, 'i'),
36+
registryId: new RegExp(`\/resourceGroups\/${sharedResourceName}\/providers\/Microsoft\.ContainerRegistry\/registries\/${acrResourceName}`, 'i'),
37+
registryLoginServer: new RegExp(`${acrResourceName}(?:.{6})?\.azurecr\.io`, 'i'),
3838
registryPassword: undefined,
3939
registryUsername: undefined,
4040
resourceGroupId: new RegExp(`\/resourceGroups\/${sharedResourceName}`, 'i')

test/nightly/deployWorkspaceProject/buildParallelScenarios.ts renamed to test/nightly/deployWorkspaceProject/parallelTests.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,26 @@ import { workspace, type Uri, type WorkspaceFolder } from "vscode";
1010
import { AzExtFsExtra, deployWorkspaceProject, dwpSettingUtilsV2, ext, parseError, settingUtils, type DeploymentConfigurationSettings, type DeployWorkspaceProjectResults, type IParsedError } from "../../../extension.bundle";
1111
import { assertStringPropsMatch, getWorkspaceFolderUri } from "../../testUtils";
1212
import { resourceGroupsToDelete } from "../global.nightly.test";
13-
import { getDwpTestScenarios, type DeployWorkspaceProjectTestScenario } from "./dwpTestScenarios";
13+
import { type DeployWorkspaceProjectTestScenario } from "./scenarios/DeployWorkspaceProjectTestScenario";
14+
import { generateTestScenarios } from "./scenarios/testScenarios";
1415

1516
export interface DwpParallelTestScenario {
1617
title: string;
17-
callback(setupTask: Promise<void>): Promise<void>;
18+
callback(): Promise<void>;
1819
scenario?: Promise<void>;
1920
}
2021

21-
export function buildParallelTestScenarios(): DwpParallelTestScenario[] {
22-
return getDwpTestScenarios().map(scenario => {
22+
export function generateParallelTests(): DwpParallelTestScenario[] {
23+
return generateTestScenarios().map(scenario => {
2324
return {
2425
title: scenario.label,
25-
callback: buildParallelScenarioCallback(scenario),
26+
callback: runTestScenario(scenario),
2627
};
2728
});
2829
}
2930

30-
function buildParallelScenarioCallback(scenario: DeployWorkspaceProjectTestScenario): DwpParallelTestScenario['callback'] {
31-
return async (setupTask: Promise<void>) => {
32-
await setupTask;
33-
31+
function runTestScenario(scenario: DeployWorkspaceProjectTestScenario): DwpParallelTestScenario['callback'] {
32+
return async () => {
3433
const workspaceFolderUri: Uri = getWorkspaceFolderUri(scenario.folderName);
3534
const rootFolder: WorkspaceFolder | undefined = workspace.getWorkspaceFolder(workspaceFolderUri);
3635
assert.ok(rootFolder, 'Could not retrieve root workspace folder.');

test/nightly/deployWorkspaceProject/testCases/DeployWorkspaceProjectTestCase.ts renamed to test/nightly/deployWorkspaceProject/scenarios/DeployWorkspaceProjectTestScenario.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
import { type DeploymentConfigurationSettings, type DeployWorkspaceProjectResults, type IActionContext } from "../../../../extension.bundle";
77
import { type StringOrRegExpProps } from "../../../typeUtils";
88

9+
export interface DeployWorkspaceProjectTestScenario {
10+
label: string;
11+
folderName: string;
12+
testCases: DeployWorkspaceProjectTestCase[];
13+
}
14+
915
export interface DeployWorkspaceProjectTestCase {
1016
/**
1117
* Label to display when executing the test

0 commit comments

Comments
 (0)