@microsoft/power-apps-cli 0.6.0 → 0.6.4
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.
- package/lib/ArgumentProvider.d.ts.map +1 -1
- package/lib/ArgumentProvider.js +11 -7
- package/lib/ArgumentProvider.js.map +1 -1
- package/lib/Authentication/NodeMsalAuthenticationProvider.d.ts +4 -1
- package/lib/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -1
- package/lib/Authentication/NodeMsalAuthenticationProvider.js +5 -1
- package/lib/Authentication/NodeMsalAuthenticationProvider.js.map +1 -1
- package/lib/Authentication/PacCliAuthenticationProvider.d.ts +2 -1
- package/lib/Authentication/PacCliAuthenticationProvider.d.ts.map +1 -1
- package/lib/Authentication/PacCliAuthenticationProvider.js +1 -1
- package/lib/Authentication/PacCliAuthenticationProvider.js.map +1 -1
- package/lib/Authentication/ServicePrincipalAuthenticationProvider.d.ts +3 -1
- package/lib/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -1
- package/lib/Authentication/ServicePrincipalAuthenticationProvider.js +4 -2
- package/lib/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -1
- package/lib/Cli.d.ts.map +1 -1
- package/lib/Cli.js +1 -2
- package/lib/Cli.js.map +1 -1
- package/lib/CliUtils.d.ts +1 -1
- package/lib/CliUtils.d.ts.map +1 -1
- package/lib/CliUtils.js +36 -9
- package/lib/CliUtils.js.map +1 -1
- package/lib/HttpClient/CliHttpClient.d.ts.map +1 -1
- package/lib/HttpClient/CliHttpClient.js +2 -1
- package/lib/HttpClient/CliHttpClient.js.map +1 -1
- package/lib/Types/Cli.types.d.ts +2 -1
- package/lib/Types/Cli.types.d.ts.map +1 -1
- package/lib/Utils/EnhanceNetworkError.d.ts +14 -0
- package/lib/Utils/EnhanceNetworkError.d.ts.map +1 -0
- package/lib/Utils/EnhanceNetworkError.js +59 -0
- package/lib/Utils/EnhanceNetworkError.js.map +1 -0
- package/lib/Verbs/Init.d.ts.map +1 -1
- package/lib/Verbs/Init.js +3 -0
- package/lib/Verbs/Init.js.map +1 -1
- package/lib/__tests__/E2eTests/basicSetup/loggingConfiguration.test.d.ts +5 -0
- package/lib/__tests__/E2eTests/basicSetup/loggingConfiguration.test.d.ts.map +1 -0
- package/lib/__tests__/E2eTests/basicSetup/loggingConfiguration.test.js +246 -0
- package/lib/__tests__/E2eTests/basicSetup/loggingConfiguration.test.js.map +1 -0
- package/lib/__tests__/E2eTests/cliUsability/cliHelp.test.d.ts +5 -0
- package/lib/__tests__/E2eTests/cliUsability/cliHelp.test.d.ts.map +1 -0
- package/lib/__tests__/E2eTests/cliUsability/cliHelp.test.js +162 -0
- package/lib/__tests__/E2eTests/cliUsability/cliHelp.test.js.map +1 -0
- package/lib/__tests__/E2eTests/cliUsability/logoutReauth.test.d.ts +5 -0
- package/lib/__tests__/E2eTests/cliUsability/logoutReauth.test.d.ts.map +1 -0
- package/lib/__tests__/E2eTests/cliUsability/logoutReauth.test.js +115 -0
- package/lib/__tests__/E2eTests/cliUsability/logoutReauth.test.js.map +1 -0
- package/lib/__tests__/E2eTests/cliUsability/missingParameters.test.d.ts +5 -0
- package/lib/__tests__/E2eTests/cliUsability/missingParameters.test.d.ts.map +1 -0
- package/lib/__tests__/E2eTests/cliUsability/missingParameters.test.js +189 -0
- package/lib/__tests__/E2eTests/cliUsability/missingParameters.test.js.map +1 -0
- package/lib/__tests__/E2eTests/commonUserWorkflowSmokeTest.test.js +8 -6
- package/lib/__tests__/E2eTests/commonUserWorkflowSmokeTest.test.js.map +1 -1
- package/lib/__tests__/E2eTests/e2eConfig.d.ts +95 -0
- package/lib/__tests__/E2eTests/e2eConfig.d.ts.map +1 -0
- package/lib/__tests__/E2eTests/e2eConfig.js +122 -0
- package/lib/__tests__/E2eTests/e2eConfig.js.map +1 -0
- package/lib/__tests__/UnitTests/CliUtils.spec.d.ts +5 -0
- package/lib/__tests__/UnitTests/CliUtils.spec.d.ts.map +1 -0
- package/lib/__tests__/UnitTests/CliUtils.spec.js +94 -0
- package/lib/__tests__/UnitTests/CliUtils.spec.js.map +1 -0
- package/lib/__tests__/UnitTests/ServicePrincipalAuthenticationProvider.spec.js +3 -3
- package/lib/__tests__/UnitTests/ServicePrincipalAuthenticationProvider.spec.js.map +1 -1
- package/lib/__tests__/UnitTests/enhanceNetworkError.test.d.ts +5 -0
- package/lib/__tests__/UnitTests/enhanceNetworkError.test.d.ts.map +1 -0
- package/lib/__tests__/UnitTests/enhanceNetworkError.test.js +177 -0
- package/lib/__tests__/UnitTests/enhanceNetworkError.test.js.map +1 -0
- package/lib/__tests__/helpers/e2eTestHelpers.d.ts.map +1 -1
- package/lib/__tests__/helpers/e2eTestHelpers.js +16 -0
- package/lib/__tests__/helpers/e2eTestHelpers.js.map +1 -1
- package/lib/__tests__/helpers/testHelpers.d.ts +146 -30
- package/lib/__tests__/helpers/testHelpers.d.ts.map +1 -1
- package/lib/__tests__/helpers/testHelpers.js +245 -74
- package/lib/__tests__/helpers/testHelpers.js.map +1 -1
- package/lib-cjs/ArgumentProvider.d.ts.map +1 -1
- package/lib-cjs/ArgumentProvider.js +7 -1
- package/lib-cjs/ArgumentProvider.js.map +1 -1
- package/lib-cjs/Authentication/NodeMsalAuthenticationProvider.d.ts +4 -1
- package/lib-cjs/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -1
- package/lib-cjs/Authentication/NodeMsalAuthenticationProvider.js +4 -1
- package/lib-cjs/Authentication/NodeMsalAuthenticationProvider.js.map +1 -1
- package/lib-cjs/Authentication/PacCliAuthenticationProvider.d.ts +2 -1
- package/lib-cjs/Authentication/PacCliAuthenticationProvider.d.ts.map +1 -1
- package/lib-cjs/Authentication/PacCliAuthenticationProvider.js +1 -1
- package/lib-cjs/Authentication/PacCliAuthenticationProvider.js.map +1 -1
- package/lib-cjs/Authentication/ServicePrincipalAuthenticationProvider.d.ts +3 -1
- package/lib-cjs/Authentication/ServicePrincipalAuthenticationProvider.d.ts.map +1 -1
- package/lib-cjs/Authentication/ServicePrincipalAuthenticationProvider.js +4 -2
- package/lib-cjs/Authentication/ServicePrincipalAuthenticationProvider.js.map +1 -1
- package/lib-cjs/Cli.d.ts.map +1 -1
- package/lib-cjs/Cli.js +14 -18
- package/lib-cjs/Cli.js.map +1 -1
- package/lib-cjs/CliUtils.d.ts +1 -1
- package/lib-cjs/CliUtils.d.ts.map +1 -1
- package/lib-cjs/CliUtils.js +38 -11
- package/lib-cjs/CliUtils.js.map +1 -1
- package/lib-cjs/HttpClient/CliHttpClient.d.ts.map +1 -1
- package/lib-cjs/HttpClient/CliHttpClient.js +2 -1
- package/lib-cjs/HttpClient/CliHttpClient.js.map +1 -1
- package/lib-cjs/Types/Cli.types.d.ts +2 -1
- package/lib-cjs/Types/Cli.types.d.ts.map +1 -1
- package/lib-cjs/Utils/EnhanceNetworkError.d.ts +13 -0
- package/lib-cjs/Utils/EnhanceNetworkError.d.ts.map +1 -0
- package/lib-cjs/Utils/EnhanceNetworkError.js +63 -0
- package/lib-cjs/Utils/EnhanceNetworkError.js.map +1 -0
- package/lib-cjs/Verbs/Init.d.ts.map +1 -1
- package/lib-cjs/Verbs/Init.js +4 -0
- package/lib-cjs/Verbs/Init.js.map +1 -1
- package/lib-cjs/__tests__/E2eTests/basicSetup/loggingConfiguration.test.d.ts +4 -0
- package/lib-cjs/__tests__/E2eTests/basicSetup/loggingConfiguration.test.d.ts.map +1 -0
- package/lib-cjs/__tests__/E2eTests/basicSetup/loggingConfiguration.test.js +271 -0
- package/lib-cjs/__tests__/E2eTests/basicSetup/loggingConfiguration.test.js.map +1 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/cliHelp.test.d.ts +4 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/cliHelp.test.d.ts.map +1 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/cliHelp.test.js +187 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/cliHelp.test.js.map +1 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/logoutReauth.test.d.ts +4 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/logoutReauth.test.d.ts.map +1 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/logoutReauth.test.js +140 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/logoutReauth.test.js.map +1 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/missingParameters.test.d.ts +4 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/missingParameters.test.d.ts.map +1 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/missingParameters.test.js +191 -0
- package/lib-cjs/__tests__/E2eTests/cliUsability/missingParameters.test.js.map +1 -0
- package/lib-cjs/__tests__/E2eTests/commonUserWorkflowSmokeTest.test.js +5 -5
- package/lib-cjs/__tests__/E2eTests/commonUserWorkflowSmokeTest.test.js.map +1 -1
- package/lib-cjs/__tests__/E2eTests/e2eConfig.d.ts +94 -0
- package/lib-cjs/__tests__/E2eTests/e2eConfig.d.ts.map +1 -0
- package/lib-cjs/__tests__/E2eTests/e2eConfig.js +149 -0
- package/lib-cjs/__tests__/E2eTests/e2eConfig.js.map +1 -0
- package/lib-cjs/__tests__/UnitTests/CliUtils.spec.d.ts +4 -0
- package/lib-cjs/__tests__/UnitTests/CliUtils.spec.d.ts.map +1 -0
- package/lib-cjs/__tests__/UnitTests/CliUtils.spec.js +97 -0
- package/lib-cjs/__tests__/UnitTests/CliUtils.spec.js.map +1 -0
- package/lib-cjs/__tests__/UnitTests/ServicePrincipalAuthenticationProvider.spec.js +3 -3
- package/lib-cjs/__tests__/UnitTests/ServicePrincipalAuthenticationProvider.spec.js.map +1 -1
- package/lib-cjs/__tests__/UnitTests/enhanceNetworkError.test.d.ts +4 -0
- package/lib-cjs/__tests__/UnitTests/enhanceNetworkError.test.d.ts.map +1 -0
- package/lib-cjs/__tests__/UnitTests/enhanceNetworkError.test.js +179 -0
- package/lib-cjs/__tests__/UnitTests/enhanceNetworkError.test.js.map +1 -0
- package/lib-cjs/__tests__/helpers/e2eTestHelpers.d.ts.map +1 -1
- package/lib-cjs/__tests__/helpers/e2eTestHelpers.js +16 -0
- package/lib-cjs/__tests__/helpers/e2eTestHelpers.js.map +1 -1
- package/lib-cjs/__tests__/helpers/testHelpers.d.ts +146 -30
- package/lib-cjs/__tests__/helpers/testHelpers.d.ts.map +1 -1
- package/lib-cjs/__tests__/helpers/testHelpers.js +242 -98
- package/lib-cjs/__tests__/helpers/testHelpers.js.map +1 -1
- package/node_modules/@microsoft/powerapps-data/package.json +2 -2
- package/node_modules/@microsoft/powerapps-player-actions/lib/Actions/ListTables.d.ts +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib/Actions/ListTables.d.ts.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib/Actions/ListTables.js +11 -2
- package/node_modules/@microsoft/powerapps-player-actions/lib/Actions/ListTables.js.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib/CodeGen/modelServiceGenerator.d.ts +10 -0
- package/node_modules/@microsoft/powerapps-player-actions/lib/CodeGen/modelServiceGenerator.d.ts.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib/CodeGen/modelServiceGenerator.js +98 -36
- package/node_modules/@microsoft/powerapps-player-actions/lib/CodeGen/modelServiceGenerator.js.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib/__tests__/ModelServiceGenerator.spec.js +16 -2
- package/node_modules/@microsoft/powerapps-player-actions/lib/__tests__/ModelServiceGenerator.spec.js.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/Actions/ListTables.d.ts +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/Actions/ListTables.d.ts.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/Actions/ListTables.js +14 -5
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/Actions/ListTables.js.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/CodeGen/modelServiceGenerator.d.ts +10 -0
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/CodeGen/modelServiceGenerator.d.ts.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/CodeGen/modelServiceGenerator.js +139 -65
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/CodeGen/modelServiceGenerator.js.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/__tests__/ModelServiceGenerator.spec.js +31 -1
- package/node_modules/@microsoft/powerapps-player-actions/lib-cjs/__tests__/ModelServiceGenerator.spec.js.map +1 -1
- package/node_modules/@microsoft/powerapps-player-actions/package.json +2 -2
- package/node_modules/@pa-client/powerapps-player-services/lib/Services/Connectivity/__tests__/ApimService.spec.js +3 -0
- package/node_modules/@pa-client/powerapps-player-services/lib/Services/Connectivity/__tests__/ApimService.spec.js.map +1 -1
- package/node_modules/@pa-client/powerapps-player-services/lib/Services/PlayerLaunchService/PlayerLaunchService.types.d.ts +1 -0
- package/node_modules/@pa-client/powerapps-player-services/lib/Services/PlayerLaunchService/PlayerLaunchService.types.d.ts.map +1 -1
- package/node_modules/@pa-client/powerapps-player-services/lib-cjs/Services/Connectivity/__tests__/ApimService.spec.js +3 -0
- package/node_modules/@pa-client/powerapps-player-services/lib-cjs/Services/Connectivity/__tests__/ApimService.spec.js.map +1 -1
- package/node_modules/@pa-client/powerapps-player-services/lib-cjs/Services/PlayerLaunchService/PlayerLaunchService.types.d.ts +1 -0
- package/node_modules/@pa-client/powerapps-player-services/lib-cjs/Services/PlayerLaunchService/PlayerLaunchService.types.d.ts.map +1 -1
- package/node_modules/@pa-client/powerapps-player-services/package.json +1 -1
- package/package.json +4 -4
|
@@ -42,7 +42,7 @@ describe('ServicePrincipalAuthenticationProvider', () => {
|
|
|
42
42
|
});
|
|
43
43
|
it('initializes MSAL with the expected authority and credentials', async () => {
|
|
44
44
|
const provider = new ServicePrincipalAuthenticationProvider();
|
|
45
|
-
await provider.initAsync();
|
|
45
|
+
await provider.initAsync('prod');
|
|
46
46
|
expect(MockedConfidentialClientApplication).toHaveBeenCalledWith({
|
|
47
47
|
auth: {
|
|
48
48
|
clientId: 'client-id',
|
|
@@ -54,7 +54,7 @@ describe('ServicePrincipalAuthenticationProvider', () => {
|
|
|
54
54
|
it('acquires and returns an access token for the requested resource', async () => {
|
|
55
55
|
acquireTokenByClientCredentialMock.mockResolvedValueOnce({ accessToken: 'token-value' });
|
|
56
56
|
const provider = new ServicePrincipalAuthenticationProvider();
|
|
57
|
-
await provider.initAsync();
|
|
57
|
+
await provider.initAsync('prod');
|
|
58
58
|
const token = await provider.getAccessTokenForResource('https://resource');
|
|
59
59
|
expect(acquireTokenByClientCredentialMock).toHaveBeenCalledWith({
|
|
60
60
|
scopes: ['https://resource/.default'],
|
|
@@ -64,7 +64,7 @@ describe('ServicePrincipalAuthenticationProvider', () => {
|
|
|
64
64
|
it('throws when MSAL returns no access token', async () => {
|
|
65
65
|
acquireTokenByClientCredentialMock.mockResolvedValueOnce(undefined);
|
|
66
66
|
const provider = new ServicePrincipalAuthenticationProvider();
|
|
67
|
-
await provider.initAsync();
|
|
67
|
+
await provider.initAsync('prod');
|
|
68
68
|
await expect(provider.getAccessTokenForResource('https://resource')).rejects.toThrow('Failed to acquire token using service principal');
|
|
69
69
|
});
|
|
70
70
|
it('throws if getAccessTokenForResource is called before initAsync', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServicePrincipalAuthenticationProvider.spec.js","sourceRoot":"","sources":["../../../src/__tests__/UnitTests/ServicePrincipalAuthenticationProvider.spec.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,kCAAkC;AACtC,8DAA8D;AAC9D,IAAI,CAAC,EAAE,EAAiE,CAAC;AAE3E,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,UAAU,EAAE,IAAI;IAChB,6BAA6B,EAAE,IAAI,CAAC,EAAE,EAAE;CACzC,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,sCAAsC,EAAE,MAAM,6DAA6D,CAAC;AAErH,MAAM,mCAAmC,GAAG,6BAAqD,CAAC;AAElG,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACtD,MAAM,WAAW,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEvC,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC;IACzC,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,kCAAkC,CAAC,SAAS,EAAE,CAAC;QAC/C,mCAAmC,CAAC,SAAS,EAAE,CAAC;QAChD,mCAAmC,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5D,8BAA8B,EAAE,kCAAkC;SACnE,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAChC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACpC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,sCAAsC,EAAE,CAAC,CAAC,OAAO,CAChE,sGAAsG,CACvG,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,UAAU,CAAC,GAAG,EAAE;YACd,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,QAAQ,GAAG,IAAI,sCAAsC,EAAE,CAAC;YAC9D,MAAM,QAAQ,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"ServicePrincipalAuthenticationProvider.spec.js","sourceRoot":"","sources":["../../../src/__tests__/UnitTests/ServicePrincipalAuthenticationProvider.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanceNetworkError.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/UnitTests/enhanceNetworkError.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, it } from '@jest/globals';
|
|
5
|
+
import { enhanceNetworkError } from '../../Utils/EnhanceNetworkError';
|
|
6
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
|
+
describe('enhanceNetworkError', () => {
|
|
8
|
+
const testMethod = 'GET';
|
|
9
|
+
const testUrl = 'https://example.com/api/test';
|
|
10
|
+
describe('non-fetch errors', () => {
|
|
11
|
+
it('returns Error objects unchanged', () => {
|
|
12
|
+
const originalError = new Error('Some other error');
|
|
13
|
+
const result = enhanceNetworkError(originalError, testMethod, testUrl);
|
|
14
|
+
expect(result).toBe(originalError);
|
|
15
|
+
expect(result.message).toBe('Some other error');
|
|
16
|
+
});
|
|
17
|
+
it('wraps non-Error values in Error objects', () => {
|
|
18
|
+
const result = enhanceNetworkError('string error', testMethod, testUrl);
|
|
19
|
+
expect(result).toBeInstanceOf(Error);
|
|
20
|
+
expect(result.message).toBe('string error');
|
|
21
|
+
});
|
|
22
|
+
it('returns TypeError without "fetch failed" message unchanged', () => {
|
|
23
|
+
const originalError = new TypeError('Invalid URL');
|
|
24
|
+
const result = enhanceNetworkError(originalError, testMethod, testUrl);
|
|
25
|
+
expect(result).toBe(originalError);
|
|
26
|
+
expect(result.message).toBe('Invalid URL');
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe('fetch failures with specific error codes', () => {
|
|
30
|
+
it('enhances ENOTFOUND error (DNS lookup failure)', () => {
|
|
31
|
+
const fetchError = new TypeError('fetch failed');
|
|
32
|
+
fetchError.cause = {
|
|
33
|
+
code: 'ENOTFOUND',
|
|
34
|
+
message: 'getaddrinfo ENOTFOUND example.com',
|
|
35
|
+
};
|
|
36
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
37
|
+
expect(result).toBeInstanceOf(Error);
|
|
38
|
+
expect(result.message).toContain('Network request failed for GET https://example.com/api/test');
|
|
39
|
+
expect(result.message).toContain('DNS lookup failed - unable to resolve hostname');
|
|
40
|
+
expect(result.message).toContain('Details: getaddrinfo ENOTFOUND example.com');
|
|
41
|
+
expect(result.cause).toBe(fetchError);
|
|
42
|
+
});
|
|
43
|
+
it('enhances ECONNREFUSED error (connection refused)', () => {
|
|
44
|
+
const fetchError = new TypeError('fetch failed');
|
|
45
|
+
fetchError.cause = {
|
|
46
|
+
code: 'ECONNREFUSED',
|
|
47
|
+
message: 'connect ECONNREFUSED 127.0.0.1:443',
|
|
48
|
+
};
|
|
49
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
50
|
+
expect(result.message).toContain('Connection refused - server is not accepting connections');
|
|
51
|
+
expect(result.message).toContain('Details: connect ECONNREFUSED 127.0.0.1:443');
|
|
52
|
+
});
|
|
53
|
+
it('enhances ETIMEDOUT error (connection timeout)', () => {
|
|
54
|
+
const fetchError = new TypeError('fetch failed');
|
|
55
|
+
fetchError.cause = {
|
|
56
|
+
code: 'ETIMEDOUT',
|
|
57
|
+
message: 'connect ETIMEDOUT',
|
|
58
|
+
};
|
|
59
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
60
|
+
expect(result.message).toContain('Connection timed out - server did not respond in time');
|
|
61
|
+
});
|
|
62
|
+
it('enhances ECONNRESET error (connection reset)', () => {
|
|
63
|
+
const fetchError = new TypeError('fetch failed');
|
|
64
|
+
fetchError.cause = {
|
|
65
|
+
code: 'ECONNRESET',
|
|
66
|
+
message: 'socket hang up',
|
|
67
|
+
};
|
|
68
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
69
|
+
expect(result.message).toContain('Connection reset - server closed the connection unexpectedly');
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('certificate validation errors', () => {
|
|
73
|
+
it('enhances UNABLE_TO_VERIFY_LEAF_SIGNATURE error', () => {
|
|
74
|
+
const fetchError = new TypeError('fetch failed');
|
|
75
|
+
fetchError.cause = {
|
|
76
|
+
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
|
|
77
|
+
message: 'unable to verify the first certificate',
|
|
78
|
+
};
|
|
79
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
80
|
+
expect(result.message).toContain('Certificate validation failed (UNABLE_TO_VERIFY_LEAF_SIGNATURE)');
|
|
81
|
+
});
|
|
82
|
+
it('enhances CERT_HAS_EXPIRED error', () => {
|
|
83
|
+
const fetchError = new TypeError('fetch failed');
|
|
84
|
+
fetchError.cause = {
|
|
85
|
+
code: 'CERT_HAS_EXPIRED',
|
|
86
|
+
message: 'certificate has expired',
|
|
87
|
+
};
|
|
88
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
89
|
+
expect(result.message).toContain('Certificate validation failed (CERT_HAS_EXPIRED)');
|
|
90
|
+
});
|
|
91
|
+
it('enhances any CERT_* prefixed error', () => {
|
|
92
|
+
const fetchError = new TypeError('fetch failed');
|
|
93
|
+
fetchError.cause = {
|
|
94
|
+
code: 'CERT_REVOKED',
|
|
95
|
+
message: 'certificate revoked',
|
|
96
|
+
};
|
|
97
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
98
|
+
expect(result.message).toContain('Certificate validation failed (CERT_REVOKED)');
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
describe('generic system errors', () => {
|
|
102
|
+
it('enhances unknown error codes', () => {
|
|
103
|
+
const fetchError = new TypeError('fetch failed');
|
|
104
|
+
fetchError.cause = {
|
|
105
|
+
code: 'UNKNOWN_ERROR',
|
|
106
|
+
message: 'Something went wrong',
|
|
107
|
+
};
|
|
108
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
109
|
+
expect(result.message).toContain('System error: UNKNOWN_ERROR');
|
|
110
|
+
expect(result.message).toContain('Details: Something went wrong');
|
|
111
|
+
});
|
|
112
|
+
it('uses errno if code is not present', () => {
|
|
113
|
+
const fetchError = new TypeError('fetch failed');
|
|
114
|
+
fetchError.cause = {
|
|
115
|
+
errno: -3008,
|
|
116
|
+
message: 'Network error',
|
|
117
|
+
};
|
|
118
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
119
|
+
expect(result.message).toContain('System error: -3008');
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
describe('fetch failures without specific error codes', () => {
|
|
123
|
+
it('provides general suggestions when no error code is available', () => {
|
|
124
|
+
const fetchError = new TypeError('fetch failed');
|
|
125
|
+
fetchError.cause = {
|
|
126
|
+
message: 'Generic network failure',
|
|
127
|
+
};
|
|
128
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
129
|
+
expect(result.message).toContain('Network request failed for GET https://example.com/api/test');
|
|
130
|
+
expect(result.message).toContain('Possible causes: network connectivity issues');
|
|
131
|
+
expect(result.message).toContain('DNS resolution failure');
|
|
132
|
+
expect(result.message).toContain('VPN/proxy configuration');
|
|
133
|
+
expect(result.message).toContain('firewall/certificate issues');
|
|
134
|
+
});
|
|
135
|
+
it('provides general suggestions when cause is missing entirely', () => {
|
|
136
|
+
const fetchError = new TypeError('fetch failed');
|
|
137
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
138
|
+
expect(result.message).toContain('Network request failed for GET https://example.com/api/test');
|
|
139
|
+
expect(result.message).toContain('Possible causes: network connectivity issues');
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
describe('cause chain preservation', () => {
|
|
143
|
+
it('preserves the original error as cause', () => {
|
|
144
|
+
const originalCause = {
|
|
145
|
+
code: 'ENOTFOUND',
|
|
146
|
+
message: 'DNS error',
|
|
147
|
+
};
|
|
148
|
+
const fetchError = new TypeError('fetch failed');
|
|
149
|
+
fetchError.cause = originalCause;
|
|
150
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
151
|
+
expect(result.cause).toBe(fetchError);
|
|
152
|
+
expect(fetchError.cause).toBe(originalCause);
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('message formatting', () => {
|
|
156
|
+
it('includes HTTP method and URL in message', () => {
|
|
157
|
+
const fetchError = new TypeError('fetch failed');
|
|
158
|
+
fetchError.cause = { code: 'ENOTFOUND' };
|
|
159
|
+
const result = enhanceNetworkError(fetchError, 'POST', 'https://api.example.com/v1/users');
|
|
160
|
+
expect(result.message).toContain('POST');
|
|
161
|
+
expect(result.message).toContain('https://api.example.com/v1/users');
|
|
162
|
+
});
|
|
163
|
+
it('does not duplicate cause message if it matches error message', () => {
|
|
164
|
+
const fetchError = new TypeError('fetch failed');
|
|
165
|
+
fetchError.cause = {
|
|
166
|
+
code: 'ENOTFOUND',
|
|
167
|
+
message: 'fetch failed', // Same as error message
|
|
168
|
+
};
|
|
169
|
+
const result = enhanceNetworkError(fetchError, testMethod, testUrl);
|
|
170
|
+
// Should only appear once in the message
|
|
171
|
+
const matches = result.message.match(/fetch failed/g);
|
|
172
|
+
expect(matches).toBeNull(); // Neither should appear since we don't include them
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
177
|
+
//# sourceMappingURL=enhanceNetworkError.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhanceNetworkError.test.js","sourceRoot":"","sources":["../../../src/__tests__/UnitTests/enhanceNetworkError.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2eTestHelpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/e2eTestHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,SAI9B,CAAC;
|
|
1
|
+
{"version":3,"file":"e2eTestHelpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/e2eTestHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,SAI9B,CAAC;AAsBF,eAAO,MAAM,WAAW,EAAE,OAAO,QAE7B,CAAC"}
|
|
@@ -22,6 +22,22 @@ import { describe } from '@jest/globals';
|
|
|
22
22
|
export const hasRequiredEnvVars = !!(process.env.SP_CLIENT_ID &&
|
|
23
23
|
process.env.SP_CLIENT_SECRET &&
|
|
24
24
|
process.env.SP_TENANT_ID);
|
|
25
|
+
// Report missing environment variables
|
|
26
|
+
if (!hasRequiredEnvVars) {
|
|
27
|
+
const missingVars = [];
|
|
28
|
+
if (!process.env.SP_CLIENT_ID) {
|
|
29
|
+
missingVars.push('SP_CLIENT_ID');
|
|
30
|
+
}
|
|
31
|
+
if (!process.env.SP_CLIENT_SECRET) {
|
|
32
|
+
missingVars.push('SP_CLIENT_SECRET');
|
|
33
|
+
}
|
|
34
|
+
if (!process.env.SP_TENANT_ID) {
|
|
35
|
+
missingVars.push('SP_TENANT_ID');
|
|
36
|
+
}
|
|
37
|
+
console.warn('\n E2E tests are being skipped due to missing environment variables:\n' +
|
|
38
|
+
` Missing: ${missingVars.join(', ')}\n` +
|
|
39
|
+
' Please set these variables to run E2E tests.\n');
|
|
40
|
+
}
|
|
25
41
|
export const describeE2E = (() => {
|
|
26
42
|
return (hasRequiredEnvVars ? describe : describe.skip);
|
|
27
43
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2eTestHelpers.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/e2eTestHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAClC,OAAO,CAAC,GAAG,CAAC,YAAY;IACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB;IAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAoB,CAAC,GAAG,EAAE;IAChD,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAoB,CAAC;AAC5E,CAAC,CAAC,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"e2eTestHelpers.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/e2eTestHelpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,CAClC,OAAO,CAAC,GAAG,CAAC,YAAY;IACxB,OAAO,CAAC,GAAG,CAAC,gBAAgB;IAC5B,OAAO,CAAC,GAAG,CAAC,YAAY,CACzB,CAAC;AAEF,uCAAuC;AACvC,IAAI,CAAC,kBAAkB,EAAE;IACvB,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;QAC7B,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAClC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE;QACjC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACtC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;QAC7B,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAClC;IAED,OAAO,CAAC,IAAI,CACV,wEAAwE;QACtE,eAAe,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QACzC,mDAAmD,CACtD,CAAC;CACH;AAED,MAAM,CAAC,MAAM,WAAW,GAAoB,CAAC,GAAG,EAAE;IAChD,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAoB,CAAC;AAC5E,CAAC,CAAC,EAAE,CAAC"}
|
|
@@ -1,5 +1,36 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { PowerAppsRepoConfig } from '@microsoft/powerapps-player-actions/lib/Config/Config.types';
|
|
3
|
+
/**
|
|
4
|
+
* Gets the path to power.config.json for a project.
|
|
5
|
+
*
|
|
6
|
+
* @param {string | E2eTestSetup} projectRootOrSetup - Project root path or E2eTestSetup object
|
|
7
|
+
* @returns {string} Path to power.config.json
|
|
8
|
+
*/
|
|
9
|
+
export declare function getConfigPath(projectRootOrSetup: string | E2eTestSetup): string;
|
|
10
|
+
/**
|
|
11
|
+
* Gets the auth cache directory path for a test setup.
|
|
12
|
+
*
|
|
13
|
+
* @param {E2eTestSetup} testSetup - The test setup object
|
|
14
|
+
* @returns {string} Path to auth cache directory
|
|
15
|
+
*/
|
|
16
|
+
export declare function getAuthCachePath(testSetup: E2eTestSetup): string;
|
|
17
|
+
/**
|
|
18
|
+
* Combines stdout and stderr to lowercase for test assertions.
|
|
19
|
+
*
|
|
20
|
+
* @param {object} result - Command result with stdout and stderr
|
|
21
|
+
* @returns {string} Combined lowercase output
|
|
22
|
+
*/
|
|
23
|
+
export declare function getCombinedOutput(result: {
|
|
24
|
+
stdout: string;
|
|
25
|
+
stderr: string;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* Normalizes whitespace for help text comparison.
|
|
29
|
+
*
|
|
30
|
+
* @param {string} text - Text to normalize
|
|
31
|
+
* @returns {string} Text with whitespace normalized
|
|
32
|
+
*/
|
|
33
|
+
export declare function normalizeWhitespace(text: string): string;
|
|
3
34
|
/**
|
|
4
35
|
* Creates a test folder relative to the current working directory.
|
|
5
36
|
*
|
|
@@ -13,21 +44,7 @@ export declare function createTestFolder(folderName: string): string;
|
|
|
13
44
|
* @param {string} folderName
|
|
14
45
|
*/
|
|
15
46
|
export declare function cleanupTestFolder(folderName: string): void;
|
|
16
|
-
/**
|
|
17
|
-
* Copies a host template app from source to destination directory.
|
|
18
|
-
*
|
|
19
|
-
* @param {string} source - Source directory path
|
|
20
|
-
* @param {string} destination - Destination directory path
|
|
21
|
-
*/
|
|
22
|
-
export declare function copyHostTemplateApp(source: string, destination: string): void;
|
|
23
47
|
export declare function readJson(filePath: string): Record<string, unknown>;
|
|
24
|
-
/**
|
|
25
|
-
* Recursively copies a directory and its contents from source to destination.
|
|
26
|
-
*
|
|
27
|
-
* @param {string} src - Source directory path
|
|
28
|
-
* @param {string} dest - Destination directory path
|
|
29
|
-
*/
|
|
30
|
-
export declare function copyDirRecursive(src: string, dest: string): void;
|
|
31
48
|
/**
|
|
32
49
|
* Validates that generated model and service files exist for a given data source.
|
|
33
50
|
* Generated files follow the pattern: {DataSourceName}Model.ts and {DataSourceName}Service.ts
|
|
@@ -68,21 +85,7 @@ export declare function extractZip(source: string, destination: string): void;
|
|
|
68
85
|
*/
|
|
69
86
|
export declare function cleanupE2eTestProject(projectRoot: string): void;
|
|
70
87
|
/**
|
|
71
|
-
* Creates a
|
|
72
|
-
* Isolates the stdout and stderr for each executor instance.
|
|
73
|
-
*
|
|
74
|
-
* @param {string} [options.cliPath] - Path to the CLI entry point (defaults to dist/nomodule/powerapps-player-cli.js)
|
|
75
|
-
* @param {string} options.workingDirectory - Working directory for command execution
|
|
76
|
-
* @param {NodeJS.ProcessEnv} [options.envOverrides] - Environment variable overrides
|
|
77
|
-
* @returns {(verb: string, args?: string[]) => CliCommandResult} Command executor function
|
|
78
|
-
*/
|
|
79
|
-
export declare function createExecuteCodeCommand(options: {
|
|
80
|
-
cliPath?: string;
|
|
81
|
-
workingDirectory: string;
|
|
82
|
-
envOverrides?: NodeJS.ProcessEnv;
|
|
83
|
-
}): (verb: string, args?: string[]) => import("./commandLineUtils").CliCommandResult;
|
|
84
|
-
/**
|
|
85
|
-
* Creates a command executor that allows CLI command failures without throwing.
|
|
88
|
+
* Creates a command executor that allows CLI command failures.
|
|
86
89
|
* Useful for testing error scenarios and validating error handling.
|
|
87
90
|
*
|
|
88
91
|
* @param {object} options - Configuration object
|
|
@@ -91,10 +94,123 @@ export declare function createExecuteCodeCommand(options: {
|
|
|
91
94
|
* @param {NodeJS.ProcessEnv} [options.envOverrides] - Environment variable overrides
|
|
92
95
|
* @returns {(verb: string, args?: string[]) => CliCommandResultWithExitCode} executor function
|
|
93
96
|
*/
|
|
94
|
-
export declare function
|
|
97
|
+
export declare function createExecuteCodeCommand(options: {
|
|
95
98
|
cliPath?: string;
|
|
96
99
|
workingDirectory: string;
|
|
97
100
|
envOverrides?: NodeJS.ProcessEnv;
|
|
98
101
|
}): (verb: string, args?: string[]) => import("./commandLineUtils").CliCommandResultWithExitCode;
|
|
99
102
|
export declare function readConfig(projectRoot: string): PowerAppsRepoConfig;
|
|
103
|
+
/**
|
|
104
|
+
* Creates a minimal power.config.json for testing.
|
|
105
|
+
* Use this instead of manually creating config objects in individual test files.
|
|
106
|
+
*
|
|
107
|
+
* @param overrides - Partial config to override defaults
|
|
108
|
+
* @returns A complete minimal config object
|
|
109
|
+
*/
|
|
110
|
+
export declare function createMinimalConfig(overrides?: Partial<PowerAppsRepoConfig>): PowerAppsRepoConfig;
|
|
111
|
+
/**
|
|
112
|
+
* Writes a minimal config file to the test project root.
|
|
113
|
+
* Convenience wrapper around createMinimalConfig + fs.writeFileSync.
|
|
114
|
+
*
|
|
115
|
+
* @param testSetup - The E2eTestSetup object
|
|
116
|
+
* @param overrides - Partial config to override defaults
|
|
117
|
+
*/
|
|
118
|
+
export declare function writeMinimalConfig(testSetup: E2eTestSetup, overrides?: Partial<PowerAppsRepoConfig>): void;
|
|
119
|
+
/**
|
|
120
|
+
* Result of setupE2eTest containing all test infrastructure.
|
|
121
|
+
*/
|
|
122
|
+
export interface E2eTestSetup {
|
|
123
|
+
/** Root directory of the test project */
|
|
124
|
+
projectRoot: string;
|
|
125
|
+
/** Isolated CLI config directory for this test */
|
|
126
|
+
cliConfigDir: string;
|
|
127
|
+
/** Path to userSettings.json in the isolated config dir */
|
|
128
|
+
userSettingsPath: string;
|
|
129
|
+
/** Environment variable overrides including isolated config */
|
|
130
|
+
envOverrides: Record<string, string>;
|
|
131
|
+
/** Command executor */
|
|
132
|
+
execute: ReturnType<typeof createExecuteCodeCommand>;
|
|
133
|
+
/** Cleanup function to call in afterAll */
|
|
134
|
+
cleanup: () => void;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Sets up a complete E2E test environment with isolated configuration.
|
|
138
|
+
* This is the recommended way to set up E2E tests as it:
|
|
139
|
+
* - Creates a unique project directory
|
|
140
|
+
* - Creates an isolated CLI config directory to prevent test interference
|
|
141
|
+
* - Pre-configures command executors with proper environment overrides
|
|
142
|
+
* - Provides a cleanup function for afterAll
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* let testSetup: E2eTestSetup;
|
|
147
|
+
*
|
|
148
|
+
* beforeAll(() => {
|
|
149
|
+
* testSetup = setupE2eTest({ testFolderName: 'myTests' });
|
|
150
|
+
* });
|
|
151
|
+
*
|
|
152
|
+
* afterAll(() => {
|
|
153
|
+
* testSetup.cleanup();
|
|
154
|
+
* });
|
|
155
|
+
*
|
|
156
|
+
* it('runs a command', () => {
|
|
157
|
+
* const result = testSetup.execute('logout', []);
|
|
158
|
+
* expect(result.stderr).toBe('');
|
|
159
|
+
* });
|
|
160
|
+
* ```
|
|
161
|
+
*
|
|
162
|
+
* @param config - Configuration options
|
|
163
|
+
* @param config.testFolderName - Unique name for the test folder
|
|
164
|
+
* @param config.tempBaseDir - Optional base directory for temp folders
|
|
165
|
+
* @param config.hostTemplateFolder - Optional host template to copy
|
|
166
|
+
* @param config.cliPath - Optional path to CLI entry point
|
|
167
|
+
* @returns E2eTestSetup object with all test infrastructure
|
|
168
|
+
*/
|
|
169
|
+
export declare function setupE2eTest(config: {
|
|
170
|
+
testFolderName: string;
|
|
171
|
+
tempBaseDir?: string;
|
|
172
|
+
hostTemplateFolder?: string;
|
|
173
|
+
cliPath?: string;
|
|
174
|
+
}): E2eTestSetup;
|
|
175
|
+
/**
|
|
176
|
+
* Executes a callback with the power.config.json temporarily removed.
|
|
177
|
+
* Useful for testing error scenarios when config is missing.
|
|
178
|
+
* The config file is automatically restored after the callback completes (or throws).
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* it('errors when config is missing', () => {
|
|
183
|
+
* withoutConfig(testSetup, () => {
|
|
184
|
+
* const result = testSetup.executeAllowFailure('list-codeapps', []);
|
|
185
|
+
* expect(result.exitCode).not.toBe(0);
|
|
186
|
+
* });
|
|
187
|
+
* });
|
|
188
|
+
* ```
|
|
189
|
+
*
|
|
190
|
+
* @param testSetup - The E2eTestSetup object containing the project root
|
|
191
|
+
* @param callback - Function to execute while config is absent
|
|
192
|
+
* @returns The return value of the callback
|
|
193
|
+
*/
|
|
194
|
+
export declare function withoutConfig<T>(testSetup: E2eTestSetup, callback: () => T): T;
|
|
195
|
+
/**
|
|
196
|
+
* Executes a callback with a custom power.config.json temporarily in place.
|
|
197
|
+
* Useful for testing error scenarios with corrupted or incomplete configs.
|
|
198
|
+
* The original config file is automatically restored after the callback completes (or throws).
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* it('errors when config is invalid', () => {
|
|
203
|
+
* withTemporaryConfig(testSetup, '{ invalid json }', () => {
|
|
204
|
+
* const result = testSetup.executeAllowFailure('list-codeapps', []);
|
|
205
|
+
* expect(result.exitCode).not.toBe(0);
|
|
206
|
+
* });
|
|
207
|
+
* });
|
|
208
|
+
* ```
|
|
209
|
+
*
|
|
210
|
+
* @param testSetup - The E2eTestSetup object containing the project root
|
|
211
|
+
* @param temporaryContent - Content to write as power.config.json during the callback
|
|
212
|
+
* @param callback - Function to execute with the temporary config
|
|
213
|
+
* @returns The return value of the callback
|
|
214
|
+
*/
|
|
215
|
+
export declare function withTemporaryConfig<T>(testSetup: E2eTestSetup, temporaryContent: string | object, callback: () => T): T;
|
|
100
216
|
//# sourceMappingURL=testHelpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/testHelpers.ts"],"names":[],"mappings":";AAgBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;
|
|
1
|
+
{"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/testHelpers.ts"],"names":[],"mappings":"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"}
|