@sentry/wizard 4.3.0 → 4.5.0
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/CHANGELOG.md +10 -0
- package/dist/e2e-tests/tests/nextjs-14.test.js +1 -3
- package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
- package/dist/e2e-tests/tests/nextjs-15.test.js +1 -3
- package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
- package/dist/src/nextjs/nextjs-wizard.js +0 -24
- package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
- package/dist/src/nextjs/templates.d.ts +1 -2
- package/dist/src/nextjs/templates.js +2 -8
- package/dist/src/nextjs/templates.js.map +1 -1
- package/dist/src/react-native/javascript.d.ts +16 -0
- package/dist/src/react-native/javascript.js +141 -6
- package/dist/src/react-native/javascript.js.map +1 -1
- package/dist/src/react-native/react-native-wizard.js +1 -0
- package/dist/src/react-native/react-native-wizard.js.map +1 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js +8 -1
- package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
- package/dist/src/utils/clack-utils.d.ts +9 -8
- package/dist/src/utils/clack-utils.js +38 -8
- package/dist/src/utils/clack-utils.js.map +1 -1
- package/dist/src/utils/package-manager.js +7 -8
- package/dist/src/utils/package-manager.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/test/nextjs/templates.test.js +0 -51
- package/dist/test/nextjs/templates.test.js.map +1 -1
- package/dist/test/react-native/javascript.test.js +406 -0
- package/dist/test/react-native/javascript.test.js.map +1 -1
- package/dist/test/sourcemaps/tools/sentry-cli.test.js +11 -0
- package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
- package/dist/test/utils/clack-utils.test.js +41 -24
- package/dist/test/utils/clack-utils.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -129,11 +129,24 @@ describe('installPackage', () => {
|
|
|
129
129
|
afterEach(() => {
|
|
130
130
|
jest.clearAllMocks();
|
|
131
131
|
});
|
|
132
|
+
const spawnSpy = jest
|
|
133
|
+
.spyOn(ChildProcess, 'spawn')
|
|
134
|
+
// @ts-expect-error - ignoring complete typing
|
|
135
|
+
.mockImplementation(() => ({
|
|
136
|
+
// @ts-expect-error - not passing the full object but directly resolving
|
|
137
|
+
// to simulate a successful install
|
|
138
|
+
on: jest.fn((evt, cb) => {
|
|
139
|
+
if (evt === 'close') {
|
|
140
|
+
cb(0);
|
|
141
|
+
}
|
|
142
|
+
}),
|
|
143
|
+
stderr: { on: jest.fn() },
|
|
144
|
+
}));
|
|
132
145
|
it('force-installs a package if the forceInstall flag is set', async () => {
|
|
133
146
|
const packageManagerMock = {
|
|
134
147
|
name: 'npm',
|
|
135
148
|
label: 'NPM',
|
|
136
|
-
installCommand: '
|
|
149
|
+
installCommand: 'install',
|
|
137
150
|
buildCommand: 'npm run build',
|
|
138
151
|
runScriptCommand: 'npm run',
|
|
139
152
|
flags: '',
|
|
@@ -141,30 +154,21 @@ describe('installPackage', () => {
|
|
|
141
154
|
detect: jest.fn(),
|
|
142
155
|
addOverride: jest.fn(),
|
|
143
156
|
};
|
|
144
|
-
const execSpy = jest
|
|
145
|
-
.spyOn(ChildProcess, 'exec')
|
|
146
|
-
// @ts-expect-error - don't care about the return value
|
|
147
|
-
.mockImplementationOnce((cmd, cb) => {
|
|
148
|
-
if (cb) {
|
|
149
|
-
// @ts-expect-error - don't care about the options value
|
|
150
|
-
cb(null, '', '');
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
157
|
await (0, clack_utils_1.installPackage)({
|
|
154
158
|
alreadyInstalled: false,
|
|
155
|
-
packageName: '@
|
|
156
|
-
packageNameDisplayLabel: '@
|
|
159
|
+
packageName: '@some/package',
|
|
160
|
+
packageNameDisplayLabel: '@some/package',
|
|
157
161
|
forceInstall: true,
|
|
158
162
|
askBeforeUpdating: false,
|
|
159
163
|
packageManager: packageManagerMock,
|
|
160
164
|
});
|
|
161
|
-
expect(
|
|
165
|
+
expect(spawnSpy).toHaveBeenCalledWith('npm', ['install', '@some/package', '--force'], { shell: true, stdio: ['pipe', 'ignore', 'pipe'] });
|
|
162
166
|
});
|
|
163
167
|
it.each([false, undefined])("doesn't force-install a package if the forceInstall flag is %s", async (flag) => {
|
|
164
168
|
const packageManagerMock = {
|
|
165
169
|
name: 'npm',
|
|
166
170
|
label: 'NPM',
|
|
167
|
-
installCommand: '
|
|
171
|
+
installCommand: 'install',
|
|
168
172
|
buildCommand: 'npm run build',
|
|
169
173
|
runScriptCommand: 'npm run',
|
|
170
174
|
flags: '',
|
|
@@ -172,15 +176,6 @@ describe('installPackage', () => {
|
|
|
172
176
|
detect: jest.fn(),
|
|
173
177
|
addOverride: jest.fn(),
|
|
174
178
|
};
|
|
175
|
-
const execSpy = jest
|
|
176
|
-
.spyOn(ChildProcess, 'exec')
|
|
177
|
-
// @ts-expect-error - don't care about the return value
|
|
178
|
-
.mockImplementationOnce((cmd, cb) => {
|
|
179
|
-
if (cb) {
|
|
180
|
-
// @ts-expect-error - don't care about the options value
|
|
181
|
-
cb(null, '', '');
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
179
|
await (0, clack_utils_1.installPackage)({
|
|
185
180
|
alreadyInstalled: false,
|
|
186
181
|
packageName: '@sentry/sveltekit',
|
|
@@ -189,7 +184,29 @@ describe('installPackage', () => {
|
|
|
189
184
|
askBeforeUpdating: false,
|
|
190
185
|
packageManager: packageManagerMock,
|
|
191
186
|
});
|
|
192
|
-
expect(
|
|
187
|
+
expect(spawnSpy).toHaveBeenCalledWith('npm', ['install', '@sentry/sveltekit'], { shell: true, stdio: ['pipe', 'ignore', 'pipe'] });
|
|
188
|
+
});
|
|
189
|
+
it('adds install flags if defined', async () => {
|
|
190
|
+
const packageManagerMock = {
|
|
191
|
+
name: 'npm',
|
|
192
|
+
label: 'NPM',
|
|
193
|
+
installCommand: 'install',
|
|
194
|
+
buildCommand: 'npm run build',
|
|
195
|
+
runScriptCommand: 'npm run',
|
|
196
|
+
flags: '--ignore-workspace-root-check',
|
|
197
|
+
forceInstallFlag: '--force',
|
|
198
|
+
detect: jest.fn(),
|
|
199
|
+
addOverride: jest.fn(),
|
|
200
|
+
};
|
|
201
|
+
await (0, clack_utils_1.installPackage)({
|
|
202
|
+
alreadyInstalled: false,
|
|
203
|
+
packageName: '@some/package',
|
|
204
|
+
packageNameDisplayLabel: '@some/package',
|
|
205
|
+
forceInstall: true,
|
|
206
|
+
askBeforeUpdating: false,
|
|
207
|
+
packageManager: packageManagerMock,
|
|
208
|
+
});
|
|
209
|
+
expect(spawnSpy).toHaveBeenCalledWith('npm', ['install', '@some/package', '--ignore-workspace-root-check', '--force'], { shell: true, stdio: ['pipe', 'ignore', 'pipe'] });
|
|
193
210
|
});
|
|
194
211
|
});
|
|
195
212
|
describe('askForWizardLogin', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clack-utils.test.js","sourceRoot":"","sources":["../../../test/utils/clack-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abort,\n askForToolConfigPath,\n askForWizardLogin,\n createNewConfigFile,\n installPackage,\n} from '../../src/utils/clack-utils';\n\nimport * as fs from 'node:fs';\nimport * as ChildProcess from 'node:child_process';\nimport type { PackageManager } from '../../src/utils/package-manager';\n\nimport axios from 'axios';\n\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\n\nimport * as Sentry from '@sentry/node';\n\njest.mock('node:child_process', () => ({\n __esModule: true,\n ...jest.requireActual('node:child_process'),\n}));\n\njest.mock('@clack/prompts', () => ({\n log: {\n info: jest.fn(),\n success: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n },\n outro: jest.fn(),\n text: jest.fn(),\n confirm: jest.fn(),\n cancel: jest.fn(),\n // passthrough for abortIfCancelled\n isCancel: jest.fn().mockReturnValue(false),\n spinner: jest\n .fn()\n .mockImplementation(() => ({ start: jest.fn(), stop: jest.fn() })),\n}));\nconst clackMock = clack as jest.Mocked<typeof clack>;\n\njest.mock('axios');\nconst mockedAxios = axios as jest.Mocked<typeof axios>;\n\njest.mock('opn', () => jest.fn(() => Promise.resolve({ on: jest.fn() })));\n\nfunction mockUserResponse(fn: jest.Mock, response: any) {\n fn.mockReturnValueOnce(response);\n}\n\ndescribe('askForToolConfigPath', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('returns undefined if users have no config file', async () => {\n mockUserResponse(clack.confirm as jest.Mock, false);\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(result).toBeUndefined();\n });\n\n it('returns the path if users have a config file and the entered path is valid', async () => {\n mockUserResponse(clack.confirm as jest.Mock, true);\n mockUserResponse(clack.text as jest.Mock, 'my.webpack.config.js');\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(clack.text).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining(\n 'enter the path to your Webpack config file',\n ),\n }),\n );\n\n expect(result).toBe('my.webpack.config.js');\n });\n});\n\ndescribe('createNewConfigFile', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('writes the file to disk and returns true if the file was created successfully', async () => {\n const writeFileSpy = jest\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(jest.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(true);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n });\n\n it('logs more information if provided as an argument', async () => {\n jest.spyOn(fs.promises, 'writeFile').mockImplementation(jest.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n const moreInfo = 'More information...';\n\n await createNewConfigFile(filename, code, moreInfo);\n\n expect(clack.log.info).toHaveBeenCalledTimes(1);\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining(moreInfo),\n );\n });\n\n it('returns false and logs a warning if the file could not be created', async () => {\n const writeFileSpy = jest\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(() => Promise.reject(new Error('Could not write')));\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(false);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n expect(clack.log.warn).toHaveBeenCalledTimes(1);\n });\n\n it('returns false if the passed path is not absolute', async () => {\n const result = await createNewConfigFile(\n './relative/webpack.config.js',\n '',\n );\n\n expect(result).toBe(false);\n });\n});\n\ndescribe('installPackage', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('force-installs a package if the forceInstall flag is set', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'npm install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: jest.fn(),\n addOverride: jest.fn(),\n };\n\n const execSpy = jest\n .spyOn(ChildProcess, 'exec')\n // @ts-expect-error - don't care about the return value\n .mockImplementationOnce((cmd, cb) => {\n if (cb) {\n // @ts-expect-error - don't care about the options value\n cb(null, '', '');\n }\n });\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@sentry/sveltekit',\n packageNameDisplayLabel: '@sentry/sveltekit',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(execSpy).toHaveBeenCalledWith(\n 'npm install @sentry/sveltekit --force',\n expect.any(Function),\n );\n });\n\n it.each([false, undefined])(\n \"doesn't force-install a package if the forceInstall flag is %s\",\n async (flag) => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'npm install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: jest.fn(),\n addOverride: jest.fn(),\n };\n\n const execSpy = jest\n .spyOn(ChildProcess, 'exec')\n // @ts-expect-error - don't care about the return value\n .mockImplementationOnce((cmd, cb) => {\n if (cb) {\n // @ts-expect-error - don't care about the options value\n cb(null, '', '');\n }\n });\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@sentry/sveltekit',\n packageNameDisplayLabel: '@sentry/sveltekit',\n forceInstall: flag,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(execSpy).toHaveBeenCalledWith(\n 'npm install @sentry/sveltekit ',\n expect.any(Function),\n );\n },\n );\n});\n\ndescribe('askForWizardLogin', () => {\n // mock axios\n afterEach(() => {\n // clackMock.confirm.mockClear();\n // mockUserResponse(clack.confirm as jest.Mock, undefined);\n });\n\n beforeEach(() => {\n jest.clearAllMocks();\n mockedAxios.get.mockClear();\n clackMock.confirm.mockClear();\n clackMock.confirm.mockReset();\n mockUserResponse(clack.confirm as jest.Mock, undefined);\n });\n\n it('asks if a user already has a Sentry account by default', async () => {\n mockUserResponse(clack.confirm as jest.Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({ url: 'https://santry.io/' });\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining('already have a Sentry account'),\n }),\n );\n });\n\n it('skips asking for if a user already has a Sentry account if org and project are pre-selected', async () => {\n mockUserResponse(clackMock.confirm as jest.Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({\n url: 'https://santry.io/',\n orgSlug: 'my-org',\n projectSlug: 'my-project',\n });\n\n expect(clack.confirm).not.toHaveBeenCalled();\n });\n});\n\ndescribe('abort', () => {\n const sentryTxn = {\n setStatus: jest.fn(),\n finish: jest.fn(),\n };\n\n let sentrySession = {\n status: 999,\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n sentrySession = {\n status: 999,\n };\n });\n\n jest.spyOn(Sentry, 'getCurrentHub').mockReturnValue({\n getScope: () => ({\n // @ts-expect-error - don't care about the rest of the required props value\n getTransaction: () => sentryTxn,\n // @ts-expect-error - don't care about the rest of the required props value\n getSession: () => sentrySession,\n }),\n captureSession: jest.fn(),\n });\n\n const flushSpy = jest.fn();\n jest.spyOn(Sentry, 'flush').mockImplementation(flushSpy);\n\n it('ends the process with an error exit code by default', async () => {\n // @ts-ignore - jest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort();\n\n expect(exitSpy).toHaveBeenCalledWith(1);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Wizard setup cancelled.');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('aborted');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('crashed');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n\n it('ends the process with a custom exit code and message if provided', async () => {\n // @ts-ignore - jest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort('Bye', 0);\n\n expect(exitSpy).toHaveBeenCalledWith(0);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Bye');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('cancelled');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('abnormal');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"clack-utils.test.js","sourceRoot":"","sources":["../../../test/utils/clack-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n abort,\n askForToolConfigPath,\n askForWizardLogin,\n createNewConfigFile,\n installPackage,\n} from '../../src/utils/clack-utils';\n\nimport * as fs from 'node:fs';\nimport * as ChildProcess from 'node:child_process';\nimport type { PackageManager } from '../../src/utils/package-manager';\n\nimport axios from 'axios';\n\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\n\nimport * as Sentry from '@sentry/node';\n\njest.mock('node:child_process', () => ({\n __esModule: true,\n ...jest.requireActual('node:child_process'),\n}));\n\njest.mock('@clack/prompts', () => ({\n log: {\n info: jest.fn(),\n success: jest.fn(),\n warn: jest.fn(),\n error: jest.fn(),\n },\n outro: jest.fn(),\n text: jest.fn(),\n confirm: jest.fn(),\n cancel: jest.fn(),\n // passthrough for abortIfCancelled\n isCancel: jest.fn().mockReturnValue(false),\n spinner: jest\n .fn()\n .mockImplementation(() => ({ start: jest.fn(), stop: jest.fn() })),\n}));\nconst clackMock = clack as jest.Mocked<typeof clack>;\n\njest.mock('axios');\nconst mockedAxios = axios as jest.Mocked<typeof axios>;\n\njest.mock('opn', () => jest.fn(() => Promise.resolve({ on: jest.fn() })));\n\nfunction mockUserResponse(fn: jest.Mock, response: any) {\n fn.mockReturnValueOnce(response);\n}\n\ndescribe('askForToolConfigPath', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('returns undefined if users have no config file', async () => {\n mockUserResponse(clack.confirm as jest.Mock, false);\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(result).toBeUndefined();\n });\n\n it('returns the path if users have a config file and the entered path is valid', async () => {\n mockUserResponse(clack.confirm as jest.Mock, true);\n mockUserResponse(clack.text as jest.Mock, 'my.webpack.config.js');\n\n const result = await askForToolConfigPath('Webpack', 'webpack.config.js');\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining('have a Webpack config file'),\n }),\n );\n\n expect(clack.text).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining(\n 'enter the path to your Webpack config file',\n ),\n }),\n );\n\n expect(result).toBe('my.webpack.config.js');\n });\n});\n\ndescribe('createNewConfigFile', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it('writes the file to disk and returns true if the file was created successfully', async () => {\n const writeFileSpy = jest\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(jest.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(true);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n });\n\n it('logs more information if provided as an argument', async () => {\n jest.spyOn(fs.promises, 'writeFile').mockImplementation(jest.fn());\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n const moreInfo = 'More information...';\n\n await createNewConfigFile(filename, code, moreInfo);\n\n expect(clack.log.info).toHaveBeenCalledTimes(1);\n expect(clack.log.info).toHaveBeenCalledWith(\n expect.stringContaining(moreInfo),\n );\n });\n\n it('returns false and logs a warning if the file could not be created', async () => {\n const writeFileSpy = jest\n .spyOn(fs.promises, 'writeFile')\n .mockImplementation(() => Promise.reject(new Error('Could not write')));\n\n const filename = '/webpack.config.js';\n const code = 'module.exports = {/*config...*/}';\n\n const result = await createNewConfigFile(filename, code);\n\n expect(result).toBe(false);\n expect(writeFileSpy).toHaveBeenCalledWith(filename, code);\n expect(clack.log.warn).toHaveBeenCalledTimes(1);\n });\n\n it('returns false if the passed path is not absolute', async () => {\n const result = await createNewConfigFile(\n './relative/webpack.config.js',\n '',\n );\n\n expect(result).toBe(false);\n });\n});\n\ndescribe('installPackage', () => {\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n const spawnSpy = jest\n .spyOn(ChildProcess, 'spawn')\n // @ts-expect-error - ignoring complete typing\n .mockImplementation(() => ({\n // @ts-expect-error - not passing the full object but directly resolving\n // to simulate a successful install\n on: jest.fn((evt: 'close', cb: (args) => void) => {\n if (evt === 'close') {\n cb(0);\n }\n }),\n stderr: { on: jest.fn() },\n }));\n\n it('force-installs a package if the forceInstall flag is set', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: jest.fn(),\n addOverride: jest.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@some/package',\n packageNameDisplayLabel: '@some/package',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n ['install', '@some/package', '--force'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n });\n\n it.each([false, undefined])(\n \"doesn't force-install a package if the forceInstall flag is %s\",\n async (flag) => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '',\n forceInstallFlag: '--force',\n detect: jest.fn(),\n addOverride: jest.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@sentry/sveltekit',\n packageNameDisplayLabel: '@sentry/sveltekit',\n forceInstall: flag,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n ['install', '@sentry/sveltekit'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n },\n );\n\n it('adds install flags if defined', async () => {\n const packageManagerMock: PackageManager = {\n name: 'npm',\n label: 'NPM',\n installCommand: 'install',\n buildCommand: 'npm run build',\n runScriptCommand: 'npm run',\n flags: '--ignore-workspace-root-check',\n forceInstallFlag: '--force',\n detect: jest.fn(),\n addOverride: jest.fn(),\n };\n\n await installPackage({\n alreadyInstalled: false,\n packageName: '@some/package',\n packageNameDisplayLabel: '@some/package',\n forceInstall: true,\n askBeforeUpdating: false,\n packageManager: packageManagerMock,\n });\n\n expect(spawnSpy).toHaveBeenCalledWith(\n 'npm',\n\n ['install', '@some/package', '--ignore-workspace-root-check', '--force'],\n { shell: true, stdio: ['pipe', 'ignore', 'pipe'] },\n );\n });\n});\n\ndescribe('askForWizardLogin', () => {\n // mock axios\n afterEach(() => {\n // clackMock.confirm.mockClear();\n // mockUserResponse(clack.confirm as jest.Mock, undefined);\n });\n\n beforeEach(() => {\n jest.clearAllMocks();\n mockedAxios.get.mockClear();\n clackMock.confirm.mockClear();\n clackMock.confirm.mockReset();\n mockUserResponse(clack.confirm as jest.Mock, undefined);\n });\n\n it('asks if a user already has a Sentry account by default', async () => {\n mockUserResponse(clack.confirm as jest.Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({ url: 'https://santry.io/' });\n\n expect(clack.confirm).toHaveBeenCalledWith(\n expect.objectContaining({\n message: expect.stringContaining('already have a Sentry account'),\n }),\n );\n });\n\n it('skips asking for if a user already has a Sentry account if org and project are pre-selected', async () => {\n mockUserResponse(clackMock.confirm as jest.Mock, Promise.resolve(true));\n\n // Provide the data object to be returned\n mockedAxios.get.mockResolvedValue({\n data: {\n hash: 'mockedHash',\n },\n });\n\n await askForWizardLogin({\n url: 'https://santry.io/',\n orgSlug: 'my-org',\n projectSlug: 'my-project',\n });\n\n expect(clack.confirm).not.toHaveBeenCalled();\n });\n});\n\ndescribe('abort', () => {\n const sentryTxn = {\n setStatus: jest.fn(),\n finish: jest.fn(),\n };\n\n let sentrySession = {\n status: 999,\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n sentrySession = {\n status: 999,\n };\n });\n\n jest.spyOn(Sentry, 'getCurrentHub').mockReturnValue({\n getScope: () => ({\n // @ts-expect-error - don't care about the rest of the required props value\n getTransaction: () => sentryTxn,\n // @ts-expect-error - don't care about the rest of the required props value\n getSession: () => sentrySession,\n }),\n captureSession: jest.fn(),\n });\n\n const flushSpy = jest.fn();\n jest.spyOn(Sentry, 'flush').mockImplementation(flushSpy);\n\n it('ends the process with an error exit code by default', async () => {\n // @ts-ignore - jest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort();\n\n expect(exitSpy).toHaveBeenCalledWith(1);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Wizard setup cancelled.');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('aborted');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('crashed');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n\n it('ends the process with a custom exit code and message if provided', async () => {\n // @ts-ignore - jest doesn't like the empty function\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n const exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {});\n\n await abort('Bye', 0);\n\n expect(exitSpy).toHaveBeenCalledWith(0);\n\n expect(clackMock.outro).toHaveBeenCalledTimes(1);\n expect(clackMock.outro).toHaveBeenCalledWith('Bye');\n\n expect(sentryTxn.setStatus).toHaveBeenLastCalledWith('cancelled');\n expect(sentryTxn.finish).toHaveBeenCalledTimes(1);\n expect(sentrySession.status).toBe('abnormal');\n expect(flushSpy).toHaveBeenLastCalledWith(3000);\n });\n});\n"]}
|
package/package.json
CHANGED