@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
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
/**
|
|
30
|
+
* E2E Tests: Basic Setup - Logging Configuration
|
|
31
|
+
*
|
|
32
|
+
* Tests that the CLI logging and telemetry configuration works correctly.
|
|
33
|
+
* Test Cases:
|
|
34
|
+
* - TC 35840167: Logging Configuration Baseline
|
|
35
|
+
* - TC 35840168: Telemetry Event Emission on Command Execution
|
|
36
|
+
*/
|
|
37
|
+
var globals_1 = require("@jest/globals");
|
|
38
|
+
var fs = __importStar(require("fs"));
|
|
39
|
+
var path = __importStar(require("path"));
|
|
40
|
+
var e2eTestHelpers_1 = require("../../helpers/e2eTestHelpers");
|
|
41
|
+
var testHelpers_1 = require("../../helpers/testHelpers");
|
|
42
|
+
var e2eConfig_1 = require("../e2eConfig");
|
|
43
|
+
var TEST_FOLDER_NAME = 'loggingConfigTests';
|
|
44
|
+
(0, e2eTestHelpers_1.describeE2E)('Basic Setup - Logging Configuration (TC: 35840167, 35840168)', function () {
|
|
45
|
+
var testSetup;
|
|
46
|
+
(0, globals_1.beforeAll)(function () {
|
|
47
|
+
testSetup = (0, testHelpers_1.setupE2eTest)({
|
|
48
|
+
testFolderName: TEST_FOLDER_NAME,
|
|
49
|
+
tempBaseDir: e2eConfig_1.E2E_CONFIG.tempBaseDir,
|
|
50
|
+
});
|
|
51
|
+
// Create power.config.json
|
|
52
|
+
var configPath = path.join(testSetup.projectRoot, 'power.config.json');
|
|
53
|
+
fs.writeFileSync(configPath, JSON.stringify({
|
|
54
|
+
version: '1.0',
|
|
55
|
+
appId: null,
|
|
56
|
+
appDisplayName: 'Logging Config Test App',
|
|
57
|
+
region: e2eConfig_1.E2E_CONFIG.region,
|
|
58
|
+
environmentId: e2eConfig_1.E2E_CONFIG.environmentId,
|
|
59
|
+
connectionReferences: {},
|
|
60
|
+
databaseReferences: {},
|
|
61
|
+
}));
|
|
62
|
+
});
|
|
63
|
+
(0, globals_1.afterAll)(function () {
|
|
64
|
+
testSetup.cleanup();
|
|
65
|
+
});
|
|
66
|
+
(0, globals_1.describe)('default logging behavior (TC: 35840167)', function () {
|
|
67
|
+
(0, globals_1.beforeEach)(function () {
|
|
68
|
+
// Remove user settings to test defaults
|
|
69
|
+
if (fs.existsSync(testSetup.userSettingsPath)) {
|
|
70
|
+
fs.unlinkSync(testSetup.userSettingsPath);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
(0, globals_1.it)('CLI runs without user settings file', function () {
|
|
74
|
+
(0, globals_1.expect)(fs.existsSync(testSetup.userSettingsPath)).toBe(false);
|
|
75
|
+
var result = testSetup.execute('logout', []);
|
|
76
|
+
// Should succeed even without settings
|
|
77
|
+
(0, globals_1.expect)(result.stderr).toBe('');
|
|
78
|
+
(0, globals_1.expect)(result.stdout.includes('Successfully logged out') || result.stdout.includes('No user found')).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
(0, globals_1.it)('--help works without any configuration', function () {
|
|
81
|
+
var result = testSetup.execute('', ['--help']);
|
|
82
|
+
(0, globals_1.expect)(result.exitCode).toBe(0);
|
|
83
|
+
(0, globals_1.expect)(result.stderr).toBe('');
|
|
84
|
+
(0, globals_1.expect)(result.stdout).toContain('Usage:');
|
|
85
|
+
});
|
|
86
|
+
(0, globals_1.it)('default output is user-friendly (not verbose telemetry)', function () {
|
|
87
|
+
var result = testSetup.execute('logout', []);
|
|
88
|
+
// Default output should be clean, not full of telemetry
|
|
89
|
+
(0, globals_1.expect)(result.stdout).not.toContain('[scenario:start]');
|
|
90
|
+
(0, globals_1.expect)(result.stdout).not.toContain('[scenario:complete]');
|
|
91
|
+
(0, globals_1.expect)(result.stdout).not.toContain('scenarioGuid');
|
|
92
|
+
});
|
|
93
|
+
(0, globals_1.it)('errors are displayed in user-friendly format', function () {
|
|
94
|
+
var result = testSetup.execute('add-data-source', []);
|
|
95
|
+
// Error output should be readable
|
|
96
|
+
(0, globals_1.expect)(result.stderr.length + result.stdout.length).toBeGreaterThan(0);
|
|
97
|
+
// Should not be a raw stack trace by default
|
|
98
|
+
var combinedOutput = "".concat(result.stdout, " ").concat(result.stderr);
|
|
99
|
+
// Check it's not just a stack trace
|
|
100
|
+
if (result.exitCode !== 0) {
|
|
101
|
+
(0, globals_1.expect)(combinedOutput.toLowerCase().includes('required') ||
|
|
102
|
+
combinedOutput.toLowerCase().includes('missing') ||
|
|
103
|
+
combinedOutput.toLowerCase().includes('usage') ||
|
|
104
|
+
combinedOutput.toLowerCase().includes('error') ||
|
|
105
|
+
combinedOutput.includes('--')).toBe(true);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
(0, globals_1.describe)('telemetry settings persistence', function () {
|
|
110
|
+
(0, globals_1.it)('settings persist across command executions', function () {
|
|
111
|
+
// Write settings
|
|
112
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({
|
|
113
|
+
enabled: true,
|
|
114
|
+
consoleOnly: true,
|
|
115
|
+
outputToConsole: true,
|
|
116
|
+
}));
|
|
117
|
+
// Run multiple commands
|
|
118
|
+
var result1 = testSetup.execute('logout', []);
|
|
119
|
+
var result2 = testSetup.execute('logout', []);
|
|
120
|
+
// Settings should still exist
|
|
121
|
+
(0, globals_1.expect)(fs.existsSync(testSetup.userSettingsPath)).toBe(true);
|
|
122
|
+
// Both should have similar behavior
|
|
123
|
+
(0, globals_1.expect)(result1.exitCode).toBe(result2.exitCode);
|
|
124
|
+
});
|
|
125
|
+
(0, globals_1.it)('invalid settings file is handled gracefully', function () {
|
|
126
|
+
// Write invalid JSON
|
|
127
|
+
fs.writeFileSync(testSetup.userSettingsPath, '{ invalid json }');
|
|
128
|
+
var result = testSetup.execute('logout', []);
|
|
129
|
+
// Should either recover gracefully or report clear error
|
|
130
|
+
// Should not crash with unhandled exception
|
|
131
|
+
(0, globals_1.expect)(result.stdout.length + result.stderr.length).toBeGreaterThan(0);
|
|
132
|
+
});
|
|
133
|
+
(0, globals_1.it)('empty settings file is handled gracefully', function () {
|
|
134
|
+
fs.writeFileSync(testSetup.userSettingsPath, '');
|
|
135
|
+
var result = testSetup.execute('logout', []);
|
|
136
|
+
// Should handle gracefully
|
|
137
|
+
(0, globals_1.expect)(result.stdout.length + result.stderr.length).toBeGreaterThan(0);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
(0, globals_1.describe)('telemetry event emission (TC: 35840168)', function () {
|
|
141
|
+
(0, globals_1.beforeEach)(function () {
|
|
142
|
+
// Enable console telemetry
|
|
143
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({
|
|
144
|
+
enabled: true,
|
|
145
|
+
consoleOnly: true,
|
|
146
|
+
outputToConsole: true,
|
|
147
|
+
}));
|
|
148
|
+
});
|
|
149
|
+
(0, globals_1.it)('emits telemetry for logout command', function () {
|
|
150
|
+
var result = testSetup.execute('logout', []);
|
|
151
|
+
var output = "".concat(result.stdout, " ").concat(result.stderr);
|
|
152
|
+
// With telemetry enabled, should see events
|
|
153
|
+
var hasEvents = output.includes('[scenario:') || output.includes('scenarioGuid') || output.includes('elapsedTime');
|
|
154
|
+
// If events are emitted, they should be properly formatted
|
|
155
|
+
if (hasEvents) {
|
|
156
|
+
(0, globals_1.expect)(output).not.toContain('undefined');
|
|
157
|
+
(0, globals_1.expect)(output).not.toContain('[object Object]');
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
(0, globals_1.it)('emits telemetry for init --help command', function () {
|
|
161
|
+
var result = testSetup.execute('init', ['--help']);
|
|
162
|
+
var output = "".concat(result.stdout, " ").concat(result.stderr);
|
|
163
|
+
// Help commands should also emit telemetry if enabled
|
|
164
|
+
var hasEvents = output.includes('[scenario:') || output.includes('scenarioGuid') || output.includes('elapsedTime');
|
|
165
|
+
if (hasEvents) {
|
|
166
|
+
(0, globals_1.expect)(output).not.toContain('NaN');
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
(0, globals_1.it)('emits telemetry for list-codeapps command', function () {
|
|
170
|
+
var result = testSetup.execute('list-codeapps', []);
|
|
171
|
+
var output = "".concat(result.stdout, " ").concat(result.stderr);
|
|
172
|
+
// Should have some telemetry output
|
|
173
|
+
var hasEvents = output.includes('[scenario:') || output.includes('scenarioGuid') || output.includes('elapsedTime');
|
|
174
|
+
if (hasEvents) {
|
|
175
|
+
// Verify no malformed output
|
|
176
|
+
(0, globals_1.expect)(output).not.toContain('undefined');
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
(0, globals_1.it)('emits telemetry for failing commands', function () {
|
|
180
|
+
var result = testSetup.execute('add-data-source', []);
|
|
181
|
+
var output = "".concat(result.stdout, " ").concat(result.stderr);
|
|
182
|
+
// Failed commands should also emit telemetry
|
|
183
|
+
(0, globals_1.expect)(result.exitCode).not.toBe(0);
|
|
184
|
+
// Should have some output
|
|
185
|
+
(0, globals_1.expect)(output.length).toBeGreaterThan(0);
|
|
186
|
+
});
|
|
187
|
+
(0, globals_1.it)('telemetry events have timestamps', function () {
|
|
188
|
+
var result = testSetup.execute('logout', []);
|
|
189
|
+
var output = "".concat(result.stdout, " ").concat(result.stderr);
|
|
190
|
+
// If telemetry is present, check for timestamps
|
|
191
|
+
if (output.includes('[scenario:')) {
|
|
192
|
+
// Should have time-based information
|
|
193
|
+
var hasTimestamp = /\d{2}:\d{2}:\d{2}/.test(output) || // HH:MM:SS format
|
|
194
|
+
/scenarioStartTime/.test(output) ||
|
|
195
|
+
/elapsedTime/.test(output);
|
|
196
|
+
(0, globals_1.expect)(hasTimestamp).toBe(true);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
(0, globals_1.describe)('telemetry disable functionality', function () {
|
|
201
|
+
(0, globals_1.it)('telemetry is suppressed when disabled', function () {
|
|
202
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({
|
|
203
|
+
enabled: false,
|
|
204
|
+
consoleOnly: false,
|
|
205
|
+
outputToConsole: false,
|
|
206
|
+
}));
|
|
207
|
+
var result = testSetup.execute('logout', []);
|
|
208
|
+
var output = "".concat(result.stdout, " ").concat(result.stderr);
|
|
209
|
+
// Should not have verbose telemetry
|
|
210
|
+
(0, globals_1.expect)(output).not.toContain('[scenario:start]');
|
|
211
|
+
(0, globals_1.expect)(output).not.toContain('[scenario:complete]');
|
|
212
|
+
(0, globals_1.expect)(output).not.toContain('scenarioGuid');
|
|
213
|
+
});
|
|
214
|
+
(0, globals_1.it)('command output is cleaner when telemetry disabled', function () {
|
|
215
|
+
// With telemetry enabled
|
|
216
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({
|
|
217
|
+
enabled: true,
|
|
218
|
+
consoleOnly: true,
|
|
219
|
+
outputToConsole: true,
|
|
220
|
+
}));
|
|
221
|
+
var enabledResult = testSetup.execute('logout', []);
|
|
222
|
+
var enabledOutput = "".concat(enabledResult.stdout, " ").concat(enabledResult.stderr);
|
|
223
|
+
// With telemetry disabled
|
|
224
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({
|
|
225
|
+
enabled: false,
|
|
226
|
+
consoleOnly: false,
|
|
227
|
+
outputToConsole: false,
|
|
228
|
+
}));
|
|
229
|
+
var disabledResult = testSetup.execute('logout', []);
|
|
230
|
+
var disabledOutput = "".concat(disabledResult.stdout, " ").concat(disabledResult.stderr);
|
|
231
|
+
// Disabled output should be shorter or equal (less verbose)
|
|
232
|
+
if (enabledOutput.includes('[scenario:')) {
|
|
233
|
+
(0, globals_1.expect)(disabledOutput.length).toBeLessThanOrEqual(enabledOutput.length);
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
(0, globals_1.describe)('CLI config directory behavior', function () {
|
|
238
|
+
(0, globals_1.it)('uses POWERAPPS_CLI_CONFIG_DIR environment variable', function () {
|
|
239
|
+
// Our test setup already uses this, verify it works
|
|
240
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({
|
|
241
|
+
testMarker: 'isolated-config-test',
|
|
242
|
+
}));
|
|
243
|
+
// Verify file is in the isolated directory
|
|
244
|
+
(0, globals_1.expect)(testSetup.userSettingsPath).toContain(TEST_FOLDER_NAME);
|
|
245
|
+
(0, globals_1.expect)(fs.existsSync(testSetup.userSettingsPath)).toBe(true);
|
|
246
|
+
var settings = JSON.parse(fs.readFileSync(testSetup.userSettingsPath, 'utf-8'));
|
|
247
|
+
(0, globals_1.expect)(settings.testMarker).toBe('isolated-config-test');
|
|
248
|
+
});
|
|
249
|
+
(0, globals_1.it)('different test suites have isolated configs', function () {
|
|
250
|
+
// Create another isolated config using setupE2eTest
|
|
251
|
+
var otherSetup = (0, testHelpers_1.setupE2eTest)({
|
|
252
|
+
testFolderName: 'otherTestIsolation',
|
|
253
|
+
tempBaseDir: e2eConfig_1.E2E_CONFIG.tempBaseDir,
|
|
254
|
+
});
|
|
255
|
+
try {
|
|
256
|
+
fs.writeFileSync(testSetup.userSettingsPath, JSON.stringify({ source: 'main-test' }));
|
|
257
|
+
fs.writeFileSync(otherSetup.userSettingsPath, JSON.stringify({ source: 'other-test' }));
|
|
258
|
+
// Verify they're different
|
|
259
|
+
var mainSettings = JSON.parse(fs.readFileSync(testSetup.userSettingsPath, 'utf-8'));
|
|
260
|
+
var otherSettings = JSON.parse(fs.readFileSync(otherSetup.userSettingsPath, 'utf-8'));
|
|
261
|
+
(0, globals_1.expect)(mainSettings.source).toBe('main-test');
|
|
262
|
+
(0, globals_1.expect)(otherSettings.source).toBe('other-test');
|
|
263
|
+
(0, globals_1.expect)(testSetup.userSettingsPath).not.toBe(otherSetup.userSettingsPath);
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
otherSetup.cleanup();
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
//# sourceMappingURL=loggingConfiguration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loggingConfiguration.test.js","sourceRoot":"","sources":["../../../../src/__tests__/E2eTests/basicSetup/loggingConfiguration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliHelp.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/E2eTests/cliUsability/cliHelp.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
var __assign = (this && this.__assign) || function () {
|
|
6
|
+
__assign = Object.assign || function(t) {
|
|
7
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
8
|
+
s = arguments[i];
|
|
9
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
10
|
+
t[p] = s[p];
|
|
11
|
+
}
|
|
12
|
+
return t;
|
|
13
|
+
};
|
|
14
|
+
return __assign.apply(this, arguments);
|
|
15
|
+
};
|
|
16
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
17
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
18
|
+
if (!m) return o;
|
|
19
|
+
var i = m.call(o), r, ar = [], e;
|
|
20
|
+
try {
|
|
21
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
22
|
+
}
|
|
23
|
+
catch (error) { e = { error: error }; }
|
|
24
|
+
finally {
|
|
25
|
+
try {
|
|
26
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
27
|
+
}
|
|
28
|
+
finally { if (e) throw e.error; }
|
|
29
|
+
}
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
/**
|
|
34
|
+
* The goal of these tests is to verify that the CLI help output is shown correctly
|
|
35
|
+
* in various scenarios, including when no verb is provided, when the help verb
|
|
36
|
+
* is explicitly requested, and when help for a specific verb is requested.
|
|
37
|
+
*/
|
|
38
|
+
var globals_1 = require("@jest/globals");
|
|
39
|
+
var HelpStrings_1 = require("../../../Constants/HelpStrings");
|
|
40
|
+
var VerbRegistry_1 = require("../../../Constants/VerbRegistry");
|
|
41
|
+
var testHelpers_1 = require("../../helpers/testHelpers");
|
|
42
|
+
var e2eTestHelpers_1 = require("../../helpers/e2eTestHelpers");
|
|
43
|
+
var e2eConfig_1 = require("../e2eConfig");
|
|
44
|
+
var TEST_FOLDER_NAME = 'cliHelpTests';
|
|
45
|
+
// Central list of verbs whose --help we want to validate.
|
|
46
|
+
// '' represents "no verb" (top-level/global help).
|
|
47
|
+
var VERBS_UNDER_TEST = [
|
|
48
|
+
{
|
|
49
|
+
verb: '',
|
|
50
|
+
usage: 'Usage: power-apps [option] [command] [<args>]',
|
|
51
|
+
expectedText: HelpStrings_1.HelpStrings.Global.ProgramDescription,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
verb: 'init',
|
|
55
|
+
usage: 'Usage: power-apps init',
|
|
56
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs.Init.Description,
|
|
57
|
+
options: HelpStrings_1.HelpStrings.Verbs.Init.Options,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
verb: 'add-data-source',
|
|
61
|
+
usage: 'Usage: power-apps add-data-source',
|
|
62
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['Add-data-source'].Description,
|
|
63
|
+
options: HelpStrings_1.HelpStrings.Verbs['Add-data-source'].Options,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
verb: 'delete-data-source',
|
|
67
|
+
usage: 'Usage: power-apps delete-data-source',
|
|
68
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['Delete-data-source'].Description,
|
|
69
|
+
options: HelpStrings_1.HelpStrings.Verbs['Delete-data-source'].Options,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
verb: 'list-codeapps',
|
|
73
|
+
usage: 'Usage: power-apps list-codeapps',
|
|
74
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['List-codeapps'].Description,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
verb: 'list-sqlStoredProcedures',
|
|
78
|
+
usage: 'Usage: power-apps list-sqlStoredProcedures',
|
|
79
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['List-sqlStoredProcedures'].Description,
|
|
80
|
+
options: HelpStrings_1.HelpStrings.Verbs['List-sqlStoredProcedures'].Options,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
verb: 'list-datasets',
|
|
84
|
+
usage: 'Usage: power-apps list-datasets',
|
|
85
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['List-datasets'].Description,
|
|
86
|
+
options: HelpStrings_1.HelpStrings.Verbs['List-datasets'].Options,
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
verb: 'list-tables',
|
|
90
|
+
usage: 'Usage: power-apps list-tables',
|
|
91
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['List-tables'].Description,
|
|
92
|
+
options: HelpStrings_1.HelpStrings.Verbs['List-tables'].Options,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
verb: 'list-environment-variables',
|
|
96
|
+
usage: 'Usage: power-apps list-environment-variables',
|
|
97
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['List-environment-variables'].Description,
|
|
98
|
+
options: HelpStrings_1.HelpStrings.Verbs['List-environment-variables'].Options,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
verb: 'list-connection-references',
|
|
102
|
+
usage: 'Usage: power-apps list-connection-references',
|
|
103
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs['List-connection-references'].Description,
|
|
104
|
+
options: HelpStrings_1.HelpStrings.Verbs['List-connection-references'].Options,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
verb: 'logout',
|
|
108
|
+
usage: 'Usage: power-apps logout',
|
|
109
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs.Logout.Description,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
verb: 'push',
|
|
113
|
+
usage: 'Usage: power-apps push',
|
|
114
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs.Push.Description,
|
|
115
|
+
options: HelpStrings_1.HelpStrings.Verbs.Push.Options,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
verb: 'run',
|
|
119
|
+
usage: 'Usage: power-apps run',
|
|
120
|
+
expectedText: HelpStrings_1.HelpStrings.Verbs.Run.Description,
|
|
121
|
+
options: HelpStrings_1.HelpStrings.Verbs.Run.Options,
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
(0, e2eTestHelpers_1.describeE2E)('power-apps help output', function () {
|
|
125
|
+
var testSetup;
|
|
126
|
+
var originalEnv = __assign({}, process.env);
|
|
127
|
+
(0, globals_1.beforeEach)(function () {
|
|
128
|
+
process.env = __assign({}, originalEnv);
|
|
129
|
+
});
|
|
130
|
+
(0, globals_1.beforeAll)(function () {
|
|
131
|
+
testSetup = (0, testHelpers_1.setupE2eTest)({
|
|
132
|
+
tempBaseDir: e2eConfig_1.E2E_CONFIG.tempBaseDir,
|
|
133
|
+
testFolderName: TEST_FOLDER_NAME,
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
(0, globals_1.afterAll)(function () {
|
|
137
|
+
process.env = originalEnv;
|
|
138
|
+
testSetup.cleanup();
|
|
139
|
+
});
|
|
140
|
+
(0, globals_1.it)('shows help when no verb is passed', function () {
|
|
141
|
+
var _a = testSetup.execute('', []), stdout = _a.stdout, stderr = _a.stderr;
|
|
142
|
+
(0, globals_1.expect)(stderr).toBe('');
|
|
143
|
+
(0, globals_1.expect)(stdout.length).toBeGreaterThan(0);
|
|
144
|
+
(0, globals_1.expect)((0, testHelpers_1.normalizeWhitespace)(stdout)).toContain((0, testHelpers_1.normalizeWhitespace)(HelpStrings_1.HelpStrings.Global.ProgramDescription));
|
|
145
|
+
});
|
|
146
|
+
(0, globals_1.it)('global help includes global option descriptions', function () {
|
|
147
|
+
var stdout = testSetup.execute('', ['--help']).stdout;
|
|
148
|
+
var normalizedOutput = (0, testHelpers_1.normalizeWhitespace)(stdout);
|
|
149
|
+
(0, globals_1.expect)(normalizedOutput).toContain("Usage: power-apps [option] [command] [<args>]\n\nPower Apps CLI for managing Power Apps code apps.\n\nOptions:\n -v, --version output the current version\n -h, --help display help for command");
|
|
150
|
+
});
|
|
151
|
+
(0, globals_1.it)('global help includes verb table with all verbs', function () {
|
|
152
|
+
var stdout = testSetup.execute('', ['--help']).stdout;
|
|
153
|
+
// Verify the "Available Commands:" header appears
|
|
154
|
+
(0, globals_1.expect)(stdout).toContain('Available Commands:');
|
|
155
|
+
(0, globals_1.expect)(stdout).toContain('Command');
|
|
156
|
+
(0, globals_1.expect)(stdout).toContain('Description');
|
|
157
|
+
// Verify each verb from the registry appears in the help output
|
|
158
|
+
// Note: VERB_REGISTRY is guaranteed to be complete via compile-time type checks
|
|
159
|
+
Object.entries(VerbRegistry_1.VERB_HELP_REGISTRY).forEach(function (_a) {
|
|
160
|
+
var _b = __read(_a, 2), verb = _b[0], verbMetadata = _b[1];
|
|
161
|
+
(0, globals_1.expect)(stdout).toContain(verb);
|
|
162
|
+
(0, globals_1.expect)(stdout).toContain(verbMetadata.description);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
(0, globals_1.describe)('--help for each verb', function () {
|
|
166
|
+
globals_1.it.each(VERBS_UNDER_TEST)('prints help for %s', function (_a) {
|
|
167
|
+
var verb = _a.verb, usage = _a.usage, expectedText = _a.expectedText, options = _a.options;
|
|
168
|
+
var _b = verb === '' ? testSetup.execute('', ['--help']) : testSetup.execute(verb, ['--help']), stdout = _b.stdout, stderr = _b.stderr;
|
|
169
|
+
(0, globals_1.expect)(stderr).toBe('');
|
|
170
|
+
(0, globals_1.expect)(stdout.length).toBeGreaterThan(0);
|
|
171
|
+
// Verify the expected usage line appears in help output.
|
|
172
|
+
(0, globals_1.expect)(stdout).toContain(usage);
|
|
173
|
+
var normalizedOutput = (0, testHelpers_1.normalizeWhitespace)(stdout);
|
|
174
|
+
// Verify the expected description text appears in help output.
|
|
175
|
+
if (expectedText) {
|
|
176
|
+
(0, globals_1.expect)(normalizedOutput).toContain((0, testHelpers_1.normalizeWhitespace)(expectedText));
|
|
177
|
+
}
|
|
178
|
+
// Verify all option descriptions appear in help output.
|
|
179
|
+
if (options) {
|
|
180
|
+
Object.values(options).forEach(function (optionDesc) {
|
|
181
|
+
(0, globals_1.expect)(normalizedOutput).toContain((0, testHelpers_1.normalizeWhitespace)(optionDesc));
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
//# sourceMappingURL=cliHelp.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliHelp.test.js","sourceRoot":"","sources":["../../../../src/__tests__/E2eTests/cliUsability/cliHelp.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logoutReauth.test.d.ts","sourceRoot":"","sources":["../../../../src/__tests__/E2eTests/cliUsability/logoutReauth.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (C) Microsoft Corporation. All rights reserved.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
/**
|
|
30
|
+
* E2E Tests: CLI Usability - Logout and Reauthentication
|
|
31
|
+
*
|
|
32
|
+
* Tests that the CLI properly handles logout and subsequent commands that require auth.
|
|
33
|
+
* Test Case: TC 35840928 - Logout Requires Reauthentication
|
|
34
|
+
*/
|
|
35
|
+
var globals_1 = require("@jest/globals");
|
|
36
|
+
var fs = __importStar(require("fs"));
|
|
37
|
+
var path = __importStar(require("path"));
|
|
38
|
+
var e2eTestHelpers_1 = require("../../helpers/e2eTestHelpers");
|
|
39
|
+
var testHelpers_1 = require("../../helpers/testHelpers");
|
|
40
|
+
var e2eConfig_1 = require("../e2eConfig");
|
|
41
|
+
var TEST_FOLDER_NAME = 'logoutReauthTests';
|
|
42
|
+
(0, e2eTestHelpers_1.describeE2E)('CLI Usability - Logout and Reauthentication (TC: 35840928)', function () {
|
|
43
|
+
var testSetup;
|
|
44
|
+
(0, globals_1.beforeAll)(function () {
|
|
45
|
+
testSetup = (0, testHelpers_1.setupE2eTest)({
|
|
46
|
+
testFolderName: TEST_FOLDER_NAME,
|
|
47
|
+
tempBaseDir: e2eConfig_1.E2E_CONFIG.tempBaseDir,
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
(0, globals_1.afterAll)(function () {
|
|
51
|
+
testSetup.cleanup();
|
|
52
|
+
});
|
|
53
|
+
(0, globals_1.describe)('logout command behavior', function () {
|
|
54
|
+
(0, globals_1.it)('logout reports success or no user found', function () {
|
|
55
|
+
var result = testSetup.execute('logout', []);
|
|
56
|
+
// Logout should succeed with one of two messages
|
|
57
|
+
(0, globals_1.expect)(result.stdout.includes('Successfully logged out') || result.stdout.includes('No user found')).toBe(true);
|
|
58
|
+
(0, globals_1.expect)(result.stderr).toBe('');
|
|
59
|
+
});
|
|
60
|
+
(0, globals_1.it)('logout is idempotent - running twice does not error', function () {
|
|
61
|
+
// First logout
|
|
62
|
+
var result1 = testSetup.execute('logout', []);
|
|
63
|
+
(0, globals_1.expect)(result1.stderr).toBe('');
|
|
64
|
+
(0, globals_1.expect)(result1.exitCode).toBe(0);
|
|
65
|
+
// Second logout should also succeed
|
|
66
|
+
var result2 = testSetup.execute('logout', []);
|
|
67
|
+
(0, globals_1.expect)(result2.stderr).toBe('');
|
|
68
|
+
(0, globals_1.expect)(result2.exitCode).toBe(0);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
(0, globals_1.describe)('commands after logout require reauthentication', function () {
|
|
72
|
+
// with the CI setup using service principal auth, these commands should succeed automatically
|
|
73
|
+
(0, globals_1.beforeAll)(function () {
|
|
74
|
+
// Ensure we're logged out
|
|
75
|
+
testSetup.execute('logout', []);
|
|
76
|
+
// Verify no user is cached by checking auth cache directory doesn't exist
|
|
77
|
+
var authCacheDir = (0, testHelpers_1.getAuthCachePath)(testSetup);
|
|
78
|
+
if (fs.existsSync(authCacheDir)) {
|
|
79
|
+
throw new Error("Auth cache directory still exists after logout: ".concat(authCacheDir));
|
|
80
|
+
}
|
|
81
|
+
// Create a power.config.json for commands that need it
|
|
82
|
+
(0, testHelpers_1.writeMinimalConfig)(testSetup, {
|
|
83
|
+
region: e2eConfig_1.E2E_CONFIG.region,
|
|
84
|
+
environmentId: e2eConfig_1.E2E_CONFIG.environmentId,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
(0, globals_1.it)('list-codeapps after logout succeeds with service principal', function () {
|
|
88
|
+
// After logout, list-codeapps should succeed if using service principal auth (E2E test mode)
|
|
89
|
+
var result = testSetup.execute('list-codeapps', []);
|
|
90
|
+
(0, globals_1.expect)(result.exitCode).toBe(0);
|
|
91
|
+
(0, globals_1.expect)(result.stderr).toBe('');
|
|
92
|
+
(0, globals_1.expect)(result.stdout).toBe('');
|
|
93
|
+
});
|
|
94
|
+
(0, globals_1.it)('add-data-source after logout succeeds with service principal', function () {
|
|
95
|
+
// After logout, add-data-source should succeed if using service principal auth (E2E test mode)
|
|
96
|
+
var result = testSetup.execute('add-data-source', [
|
|
97
|
+
'--apiId',
|
|
98
|
+
'dataverse',
|
|
99
|
+
'--resourceName',
|
|
100
|
+
'contact',
|
|
101
|
+
]);
|
|
102
|
+
(0, globals_1.expect)(result.exitCode).toBe(0);
|
|
103
|
+
(0, globals_1.expect)(result.stderr).toBe('');
|
|
104
|
+
(0, globals_1.expect)(result.stdout).toBe('');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
(0, globals_1.describe)('logout clears cached credentials', function () {
|
|
108
|
+
(0, globals_1.it)('auth cache directory is cleared after logout', function () {
|
|
109
|
+
// This test verifies the implementation detail from Logout.ts
|
|
110
|
+
// AUTH_CACHE_DIRECTORY is CLI_CONFIG_DIRECTORY/cache/auth
|
|
111
|
+
var authCacheDir = (0, testHelpers_1.getAuthCachePath)(testSetup);
|
|
112
|
+
// Create the auth cache directory to simulate a logged-in user
|
|
113
|
+
fs.mkdirSync(authCacheDir, { recursive: true });
|
|
114
|
+
// Add a dummy cache file
|
|
115
|
+
fs.writeFileSync(path.join(authCacheDir, 'token-cache.json'), '{}');
|
|
116
|
+
(0, globals_1.expect)(fs.existsSync(authCacheDir)).toBe(true);
|
|
117
|
+
// Run logout - should clear the directory
|
|
118
|
+
var logoutResult = testSetup.execute('logout', []);
|
|
119
|
+
(0, globals_1.expect)(logoutResult.stderr).toBe('');
|
|
120
|
+
(0, globals_1.expect)(logoutResult.stdout.includes('Successfully logged out')).toBe(true);
|
|
121
|
+
// Verify the auth cache directory is removed
|
|
122
|
+
(0, globals_1.expect)(fs.existsSync(authCacheDir)).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
(0, globals_1.it)('logout reports no user when auth cache does not exist', function () {
|
|
125
|
+
var authCacheDir = (0, testHelpers_1.getAuthCachePath)(testSetup);
|
|
126
|
+
// Ensure auth cache doesn't exist
|
|
127
|
+
if (fs.existsSync(authCacheDir)) {
|
|
128
|
+
fs.rmSync(authCacheDir, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
(0, globals_1.expect)(fs.existsSync(authCacheDir)).toBe(false);
|
|
131
|
+
// Run logout - should report no user
|
|
132
|
+
var logoutResult = testSetup.execute('logout', []);
|
|
133
|
+
(0, globals_1.expect)(logoutResult.stderr).toBe('');
|
|
134
|
+
(0, globals_1.expect)(logoutResult.stdout.includes('No user found')).toBe(true);
|
|
135
|
+
// Directory should still not exist
|
|
136
|
+
(0, globals_1.expect)(fs.existsSync(authCacheDir)).toBe(false);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
//# sourceMappingURL=logoutReauth.test.js.map
|