@sentry/wizard 4.5.0 → 4.7.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.
Files changed (293) hide show
  1. package/CHANGELOG.md +25 -1
  2. package/README.md +23 -19
  3. package/dist/bin.js +22 -0
  4. package/dist/bin.js.map +1 -1
  5. package/dist/e2e-tests/tests/flutter.test.js +16 -16
  6. package/dist/e2e-tests/tests/flutter.test.js.map +1 -1
  7. package/dist/e2e-tests/tests/help-message.test.js +56 -0
  8. package/dist/e2e-tests/tests/help-message.test.js.map +1 -0
  9. package/dist/e2e-tests/tests/nextjs-14.test.js +17 -16
  10. package/dist/e2e-tests/tests/nextjs-14.test.js.map +1 -1
  11. package/dist/e2e-tests/tests/nextjs-15.test.js +16 -16
  12. package/dist/e2e-tests/tests/nextjs-15.test.js.map +1 -1
  13. package/dist/e2e-tests/tests/nuxt-3.test.js +13 -12
  14. package/dist/e2e-tests/tests/nuxt-3.test.js.map +1 -1
  15. package/dist/e2e-tests/tests/nuxt-4.test.js +13 -12
  16. package/dist/e2e-tests/tests/nuxt-4.test.js.map +1 -1
  17. package/dist/e2e-tests/tests/remix.test.js +20 -20
  18. package/dist/e2e-tests/tests/remix.test.js.map +1 -1
  19. package/dist/e2e-tests/tests/sveltekit.test.js +20 -20
  20. package/dist/e2e-tests/tests/sveltekit.test.js.map +1 -1
  21. package/dist/e2e-tests/utils/index.d.ts +1 -1
  22. package/dist/e2e-tests/utils/index.js +35 -13
  23. package/dist/e2e-tests/utils/index.js.map +1 -1
  24. package/dist/lib/Constants.d.ts +7 -1
  25. package/dist/lib/Constants.js.map +1 -1
  26. package/dist/lib/Helper/File.d.ts +1 -1
  27. package/dist/lib/Helper/File.js +1 -3
  28. package/dist/lib/Helper/File.js.map +1 -1
  29. package/dist/lib/Helper/Logging.d.ts +4 -1
  30. package/dist/lib/Helper/Logging.js +3 -0
  31. package/dist/lib/Helper/Logging.js.map +1 -1
  32. package/dist/lib/Helper/Package.d.ts +5 -3
  33. package/dist/lib/Helper/Package.js +2 -2
  34. package/dist/lib/Helper/Package.js.map +1 -1
  35. package/dist/lib/Helper/SentryCli.d.ts +20 -7
  36. package/dist/lib/Helper/SentryCli.js +21 -13
  37. package/dist/lib/Helper/SentryCli.js.map +1 -1
  38. package/dist/lib/Helper/Wizard.js +9 -5
  39. package/dist/lib/Helper/Wizard.js.map +1 -1
  40. package/dist/lib/Helper/__tests__/File.js +9 -9
  41. package/dist/lib/Helper/__tests__/File.js.map +1 -1
  42. package/dist/lib/Helper/__tests__/MergeConfig.js +17 -17
  43. package/dist/lib/Helper/__tests__/MergeConfig.js.map +1 -1
  44. package/dist/lib/Helper/__tests__/SentryCli.js +39 -21
  45. package/dist/lib/Helper/__tests__/SentryCli.js.map +1 -1
  46. package/dist/lib/Setup.d.ts +4 -1
  47. package/dist/lib/Setup.js +12 -2
  48. package/dist/lib/Setup.js.map +1 -1
  49. package/dist/lib/Steps/BaseStep.d.ts +1 -1
  50. package/dist/lib/Steps/BaseStep.js.map +1 -1
  51. package/dist/lib/Steps/Integrations/BaseIntegration.js +1 -2
  52. package/dist/lib/Steps/Integrations/BaseIntegration.js.map +1 -1
  53. package/dist/lib/Steps/Integrations/Cordova.js +14 -10
  54. package/dist/lib/Steps/Integrations/Cordova.js.map +1 -1
  55. package/dist/lib/Steps/Integrations/Electron.d.ts +4 -1
  56. package/dist/lib/Steps/Integrations/Electron.js +1 -1
  57. package/dist/lib/Steps/Integrations/Electron.js.map +1 -1
  58. package/dist/lib/Steps/Integrations/MobileProject.d.ts +3 -1
  59. package/dist/lib/Steps/Integrations/MobileProject.js +1 -1
  60. package/dist/lib/Steps/Integrations/MobileProject.js.map +1 -1
  61. package/dist/lib/Steps/PromptForParameters.d.ts +4 -1
  62. package/dist/lib/Steps/PromptForParameters.js.map +1 -1
  63. package/dist/lib/Steps/SentryProjectSelector.d.ts +42 -1
  64. package/dist/lib/Steps/SentryProjectSelector.js +1 -1
  65. package/dist/lib/Steps/SentryProjectSelector.js.map +1 -1
  66. package/dist/lib/Steps/WaitForSentry.d.ts +3 -1
  67. package/dist/lib/Steps/WaitForSentry.js +4 -4
  68. package/dist/lib/Steps/WaitForSentry.js.map +1 -1
  69. package/dist/lib/Steps/Welcome.js +5 -0
  70. package/dist/lib/Steps/Welcome.js.map +1 -1
  71. package/dist/lib/Types.d.ts +14 -0
  72. package/dist/lib/Types.js +3 -0
  73. package/dist/lib/Types.js.map +1 -0
  74. package/dist/lib/__tests__/Env.js +10 -16
  75. package/dist/lib/__tests__/Env.js.map +1 -1
  76. package/dist/src/android/android-wizard.js +15 -12
  77. package/dist/src/android/android-wizard.js.map +1 -1
  78. package/dist/src/android/code-tools.js +1 -1
  79. package/dist/src/android/code-tools.js.map +1 -1
  80. package/dist/src/android/gradle.js +4 -4
  81. package/dist/src/android/gradle.js.map +1 -1
  82. package/dist/src/android/manifest.js +1 -1
  83. package/dist/src/android/manifest.js.map +1 -1
  84. package/dist/src/apple/apple-wizard.d.ts +2 -2
  85. package/dist/src/apple/apple-wizard.js +54 -175
  86. package/dist/src/apple/apple-wizard.js.map +1 -1
  87. package/dist/src/apple/check-installed-cli.d.ts +1 -0
  88. package/dist/src/apple/check-installed-cli.js +60 -0
  89. package/dist/src/apple/check-installed-cli.js.map +1 -0
  90. package/dist/src/apple/cocoapod.js +1 -1
  91. package/dist/src/apple/cocoapod.js.map +1 -1
  92. package/dist/src/apple/code-tools.js +1 -1
  93. package/dist/src/apple/code-tools.js.map +1 -1
  94. package/dist/src/apple/configure-fastlane.d.ts +5 -0
  95. package/dist/src/apple/configure-fastlane.js +66 -0
  96. package/dist/src/apple/configure-fastlane.js.map +1 -0
  97. package/dist/src/apple/configure-package-manager.d.ts +5 -0
  98. package/dist/src/apple/configure-package-manager.js +68 -0
  99. package/dist/src/apple/configure-package-manager.js.map +1 -0
  100. package/dist/src/apple/configure-sentry-cli.d.ts +4 -0
  101. package/dist/src/apple/configure-sentry-cli.js +47 -0
  102. package/dist/src/apple/configure-sentry-cli.js.map +1 -0
  103. package/dist/src/apple/configure-xcode-project.d.ts +8 -0
  104. package/dist/src/apple/configure-xcode-project.js +11 -0
  105. package/dist/src/apple/configure-xcode-project.js.map +1 -0
  106. package/dist/src/apple/fastlane.d.ts +1 -1
  107. package/dist/src/apple/fastlane.js +5 -5
  108. package/dist/src/apple/fastlane.js.map +1 -1
  109. package/dist/src/apple/inject-code-snippet.d.ts +6 -0
  110. package/dist/src/apple/inject-code-snippet.js +54 -0
  111. package/dist/src/apple/inject-code-snippet.js.map +1 -0
  112. package/dist/src/apple/lookup-xcode-project.d.ts +7 -0
  113. package/dist/src/apple/lookup-xcode-project.js +98 -0
  114. package/dist/src/apple/lookup-xcode-project.js.map +1 -0
  115. package/dist/src/apple/options.d.ts +4 -0
  116. package/dist/src/apple/options.js +3 -0
  117. package/dist/src/apple/options.js.map +1 -0
  118. package/dist/src/apple/search-xcode-project-at-path.d.ts +1 -0
  119. package/dist/src/apple/search-xcode-project-at-path.js +70 -0
  120. package/dist/src/apple/search-xcode-project-at-path.js.map +1 -0
  121. package/dist/src/apple/templates.js +11 -7
  122. package/dist/src/apple/templates.js.map +1 -1
  123. package/dist/src/apple/xcode-manager.js +4 -7
  124. package/dist/src/apple/xcode-manager.js.map +1 -1
  125. package/dist/src/flutter/code-tools.js +3 -3
  126. package/dist/src/flutter/code-tools.js.map +1 -1
  127. package/dist/src/flutter/flutter-wizard.js +21 -15
  128. package/dist/src/flutter/flutter-wizard.js.map +1 -1
  129. package/dist/src/flutter/templates.js +4 -4
  130. package/dist/src/flutter/templates.js.map +1 -1
  131. package/dist/src/nextjs/nextjs-wizard.js +118 -43
  132. package/dist/src/nextjs/nextjs-wizard.js.map +1 -1
  133. package/dist/src/nextjs/templates.d.ts +10 -1
  134. package/dist/src/nextjs/templates.js +192 -62
  135. package/dist/src/nextjs/templates.js.map +1 -1
  136. package/dist/src/nuxt/nuxt-wizard.js +21 -16
  137. package/dist/src/nuxt/nuxt-wizard.js.map +1 -1
  138. package/dist/src/nuxt/sdk-example.js +3 -3
  139. package/dist/src/nuxt/sdk-example.js.map +1 -1
  140. package/dist/src/nuxt/sdk-setup.js +9 -9
  141. package/dist/src/nuxt/sdk-setup.js.map +1 -1
  142. package/dist/src/nuxt/templates.js +173 -58
  143. package/dist/src/nuxt/templates.js.map +1 -1
  144. package/dist/src/nuxt/utils.js +6 -3
  145. package/dist/src/nuxt/utils.js.map +1 -1
  146. package/dist/src/react-native/expo-env-file.js +1 -1
  147. package/dist/src/react-native/expo-env-file.js.map +1 -1
  148. package/dist/src/react-native/expo-metro.js +4 -4
  149. package/dist/src/react-native/expo-metro.js.map +1 -1
  150. package/dist/src/react-native/expo.js +4 -4
  151. package/dist/src/react-native/expo.js.map +1 -1
  152. package/dist/src/react-native/javascript.d.ts +6 -4
  153. package/dist/src/react-native/javascript.js +31 -15
  154. package/dist/src/react-native/javascript.js.map +1 -1
  155. package/dist/src/react-native/metro.js +8 -8
  156. package/dist/src/react-native/metro.js.map +1 -1
  157. package/dist/src/react-native/react-native-wizard.d.ts +5 -1
  158. package/dist/src/react-native/react-native-wizard.js +66 -36
  159. package/dist/src/react-native/react-native-wizard.js.map +1 -1
  160. package/dist/src/react-native/uninstall.js +8 -5
  161. package/dist/src/react-native/uninstall.js.map +1 -1
  162. package/dist/src/react-native/xcode.d.ts +9 -4
  163. package/dist/src/react-native/xcode.js +65 -22
  164. package/dist/src/react-native/xcode.js.map +1 -1
  165. package/dist/src/remix/codemods/handle-error.js +4 -1
  166. package/dist/src/remix/codemods/handle-error.js.map +1 -1
  167. package/dist/src/remix/remix-wizard.js +23 -18
  168. package/dist/src/remix/remix-wizard.js.map +1 -1
  169. package/dist/src/remix/sdk-example.js +163 -64
  170. package/dist/src/remix/sdk-example.js.map +1 -1
  171. package/dist/src/remix/sdk-setup.js +11 -7
  172. package/dist/src/remix/sdk-setup.js.map +1 -1
  173. package/dist/src/run.d.ts +3 -1
  174. package/dist/src/run.js +29 -9
  175. package/dist/src/run.js.map +1 -1
  176. package/dist/src/sourcemaps/sourcemaps-wizard.js +30 -28
  177. package/dist/src/sourcemaps/sourcemaps-wizard.js.map +1 -1
  178. package/dist/src/sourcemaps/tools/angular.js +3 -3
  179. package/dist/src/sourcemaps/tools/angular.js.map +1 -1
  180. package/dist/src/sourcemaps/tools/create-react-app.js +3 -3
  181. package/dist/src/sourcemaps/tools/create-react-app.js.map +1 -1
  182. package/dist/src/sourcemaps/tools/esbuild.js +6 -6
  183. package/dist/src/sourcemaps/tools/esbuild.js.map +1 -1
  184. package/dist/src/sourcemaps/tools/nextjs.js +5 -5
  185. package/dist/src/sourcemaps/tools/nextjs.js.map +1 -1
  186. package/dist/src/sourcemaps/tools/remix.js +4 -4
  187. package/dist/src/sourcemaps/tools/remix.js.map +1 -1
  188. package/dist/src/sourcemaps/tools/rollup.js +6 -6
  189. package/dist/src/sourcemaps/tools/rollup.js.map +1 -1
  190. package/dist/src/sourcemaps/tools/sentry-cli.js +15 -15
  191. package/dist/src/sourcemaps/tools/sentry-cli.js.map +1 -1
  192. package/dist/src/sourcemaps/tools/tsc.js +6 -6
  193. package/dist/src/sourcemaps/tools/tsc.js.map +1 -1
  194. package/dist/src/sourcemaps/tools/vite.js +12 -12
  195. package/dist/src/sourcemaps/tools/vite.js.map +1 -1
  196. package/dist/src/sourcemaps/tools/webpack.js +10 -10
  197. package/dist/src/sourcemaps/tools/webpack.js.map +1 -1
  198. package/dist/src/sourcemaps/utils/detect-tool.js +2 -2
  199. package/dist/src/sourcemaps/utils/detect-tool.js.map +1 -1
  200. package/dist/src/sourcemaps/utils/other-wizards.js +5 -5
  201. package/dist/src/sourcemaps/utils/other-wizards.js.map +1 -1
  202. package/dist/src/sourcemaps/utils/sdk-version.js +7 -7
  203. package/dist/src/sourcemaps/utils/sdk-version.js.map +1 -1
  204. package/dist/src/sveltekit/sdk-example.js +1 -1
  205. package/dist/src/sveltekit/sdk-example.js.map +1 -1
  206. package/dist/src/sveltekit/sdk-setup.js +15 -14
  207. package/dist/src/sveltekit/sdk-setup.js.map +1 -1
  208. package/dist/src/sveltekit/sveltekit-wizard.js +25 -20
  209. package/dist/src/sveltekit/sveltekit-wizard.js.map +1 -1
  210. package/dist/src/sveltekit/templates.js +126 -37
  211. package/dist/src/sveltekit/templates.js.map +1 -1
  212. package/dist/src/telemetry.js +11 -0
  213. package/dist/src/telemetry.js.map +1 -1
  214. package/dist/src/utils/{clack-utils.d.ts → clack/index.d.ts} +45 -7
  215. package/dist/src/utils/{clack-utils.js → clack/index.js} +75 -20
  216. package/dist/src/utils/clack/index.js.map +1 -0
  217. package/dist/src/utils/debug.js +1 -1
  218. package/dist/src/utils/debug.js.map +1 -1
  219. package/dist/src/utils/find-files-with-extension.d.ts +1 -0
  220. package/dist/src/utils/find-files-with-extension.js +39 -0
  221. package/dist/src/utils/find-files-with-extension.js.map +1 -0
  222. package/dist/src/utils/package-manager.d.ts +8 -1
  223. package/dist/src/utils/package-manager.js +79 -23
  224. package/dist/src/utils/package-manager.js.map +1 -1
  225. package/dist/src/utils/sentrycli-utils.js +0 -1
  226. package/dist/src/utils/sentrycli-utils.js.map +1 -1
  227. package/dist/src/utils/types.d.ts +4 -0
  228. package/dist/src/utils/types.js.map +1 -1
  229. package/dist/src/version.d.ts +1 -1
  230. package/dist/src/version.js +1 -1
  231. package/dist/src/version.js.map +1 -1
  232. package/dist/test/android/code-tools.test.js +13 -13
  233. package/dist/test/android/code-tools.test.js.map +1 -1
  234. package/dist/test/apple/cocoapod.test.js +78 -73
  235. package/dist/test/apple/cocoapod.test.js.map +1 -1
  236. package/dist/test/apple/code-tools.test.js +174 -167
  237. package/dist/test/apple/code-tools.test.js.map +1 -1
  238. package/dist/test/apple/fastfile.test.js +87 -84
  239. package/dist/test/apple/fastfile.test.js.map +1 -1
  240. package/dist/test/apple/templates.test.js +32 -27
  241. package/dist/test/apple/templates.test.js.map +1 -1
  242. package/dist/test/apple/xcode-manager.test.js +208 -185
  243. package/dist/test/apple/xcode-manager.test.js.map +1 -1
  244. package/dist/test/flutter/code-tools.test.js +29 -30
  245. package/dist/test/flutter/code-tools.test.js.map +1 -1
  246. package/dist/test/flutter/templates.test.js +38 -37
  247. package/dist/test/flutter/templates.test.js.map +1 -1
  248. package/dist/test/nextjs/templates.test.js +155 -103
  249. package/dist/test/nextjs/templates.test.js.map +1 -1
  250. package/dist/test/nuxt/templates.test.js +25 -24
  251. package/dist/test/nuxt/templates.test.js.map +1 -1
  252. package/dist/test/react-native/expo-metro.test.js +12 -11
  253. package/dist/test/react-native/expo-metro.test.js.map +1 -1
  254. package/dist/test/react-native/expo.test.js +11 -10
  255. package/dist/test/react-native/expo.test.js.map +1 -1
  256. package/dist/test/react-native/gradle.test.js +27 -26
  257. package/dist/test/react-native/gradle.test.js.map +1 -1
  258. package/dist/test/react-native/javascript.test.js +109 -59
  259. package/dist/test/react-native/javascript.test.js.map +1 -1
  260. package/dist/test/react-native/metro.test.js +66 -65
  261. package/dist/test/react-native/metro.test.js.map +1 -1
  262. package/dist/test/react-native/xcode.test.js +138 -37
  263. package/dist/test/react-native/xcode.test.js.map +1 -1
  264. package/dist/test/remix/client-entry.test.js +8 -7
  265. package/dist/test/remix/client-entry.test.js.map +1 -1
  266. package/dist/test/remix/server-instrumentation.test.js +6 -5
  267. package/dist/test/remix/server-instrumentation.test.js.map +1 -1
  268. package/dist/test/sourcemaps/tools/sentry-cli.test.js +21 -21
  269. package/dist/test/sourcemaps/tools/sentry-cli.test.js.map +1 -1
  270. package/dist/test/sourcemaps/tools/tsc.test.js +13 -14
  271. package/dist/test/sourcemaps/tools/tsc.test.js.map +1 -1
  272. package/dist/test/sourcemaps/tools/vite.test.js +13 -14
  273. package/dist/test/sourcemaps/tools/vite.test.js.map +1 -1
  274. package/dist/test/sourcemaps/tools/webpack.test.js +19 -20
  275. package/dist/test/sourcemaps/tools/webpack.test.js.map +1 -1
  276. package/dist/test/sveltekit/templates.test.js +13 -12
  277. package/dist/test/sveltekit/templates.test.js.map +1 -1
  278. package/dist/test/utils/ast-utils.test.js +45 -44
  279. package/dist/test/utils/ast-utils.test.js.map +1 -1
  280. package/dist/test/utils/clack/index.test.d.ts +1 -0
  281. package/dist/test/utils/clack/index.test.js +375 -0
  282. package/dist/test/utils/clack/index.test.js.map +1 -0
  283. package/dist/test/utils/package-manager.test.d.ts +1 -0
  284. package/dist/test/utils/package-manager.test.js +30 -0
  285. package/dist/test/utils/package-manager.test.js.map +1 -0
  286. package/package.json +10 -38
  287. package/dist/e2e-tests/jest.config.d.ts +0 -17
  288. package/dist/e2e-tests/jest.config.js +0 -23
  289. package/dist/e2e-tests/jest.config.js.map +0 -1
  290. package/dist/src/utils/clack-utils.js.map +0 -1
  291. package/dist/test/utils/clack-utils.test.js +0 -306
  292. package/dist/test/utils/clack-utils.test.js.map +0 -1
  293. /package/dist/{test/utils/clack-utils.test.d.ts → e2e-tests/tests/help-message.test.d.ts} +0 -0
@@ -27,43 +27,46 @@ const fs = __importStar(require("node:fs"));
27
27
  const os = __importStar(require("node:os"));
28
28
  const path = __importStar(require("node:path"));
29
29
  const fastlane_1 = require("../../src/apple/fastlane");
30
- // @ts-ignore - clack is ESM and TS complains about that. It works though
30
+ // @ts-expect-error - clack is ESM and TS complains about that. It works though
31
31
  const clack = __importStar(require("@clack/prompts"));
32
- jest.mock('@clack/prompts', () => ({
32
+ const vitest_1 = require("vitest");
33
+ vitest_1.vi.mock('@clack/prompts', async () => ({
33
34
  __esModule: true,
34
- ...jest.requireActual('@clack/prompts'),
35
+ ...(await vitest_1.vi.importActual('@clack/prompts')),
35
36
  }));
36
- describe('fastlane', () => {
37
- beforeEach(() => {
38
- jest.spyOn(clack.log, 'warn').mockImplementation();
39
- jest.spyOn(clack, 'select').mockResolvedValue(undefined);
37
+ (0, vitest_1.describe)('fastlane', () => {
38
+ (0, vitest_1.beforeEach)(() => {
39
+ vitest_1.vi.spyOn(clack.log, 'warn').mockImplementation(() => {
40
+ /* empty */
41
+ });
42
+ vitest_1.vi.spyOn(clack, 'select').mockResolvedValue(undefined);
40
43
  });
41
- describe('#fastFile', () => {
42
- describe('file exists', () => {
43
- it('should return path', () => {
44
+ (0, vitest_1.describe)('#fastFile', () => {
45
+ (0, vitest_1.describe)('file exists', () => {
46
+ (0, vitest_1.it)('should return path', () => {
44
47
  // -- Arrange --
45
48
  const { fastlaneDir, projectPath } = createFastlaneDir();
46
49
  const fastfile = createFastfile(fastlaneDir, 'lane :test do');
47
50
  // -- Act --
48
51
  const result = (0, fastlane_1.fastFile)(projectPath);
49
52
  // -- Assert --
50
- expect(result).toBe(fastfile);
53
+ (0, vitest_1.expect)(result).toBe(fastfile);
51
54
  });
52
55
  });
53
- describe('file does not exist', () => {
54
- it('should return null', () => {
56
+ (0, vitest_1.describe)('file does not exist', () => {
57
+ (0, vitest_1.it)('should return null', () => {
55
58
  // -- Arrange --
56
59
  const { projectPath } = createFastlaneDir();
57
60
  // do not create Fastfile
58
61
  // -- Act --
59
62
  const result = (0, fastlane_1.fastFile)(projectPath);
60
63
  // -- Assert --
61
- expect(result).toBeNull();
64
+ (0, vitest_1.expect)(result).toBeNull();
62
65
  });
63
66
  });
64
67
  });
65
- describe('#findIOSPlatform', () => {
66
- describe('platform block detection', () => {
68
+ (0, vitest_1.describe)('#findIOSPlatform', () => {
69
+ (0, vitest_1.describe)('platform block detection', () => {
67
70
  const variations = [
68
71
  {
69
72
  name: 'no platform',
@@ -99,18 +102,18 @@ platform: android
99
102
  },
100
103
  ];
101
104
  for (const variation of variations) {
102
- describe(`${variation.name}`, () => {
103
- it('should return null', () => {
105
+ (0, vitest_1.describe)(`${variation.name}`, () => {
106
+ (0, vitest_1.it)('should return null', () => {
104
107
  // -- Act --
105
108
  const result = fastlane_1.exportForTesting.findIOSPlatform(variation.content);
106
109
  // -- Assert --
107
- expect(result).toEqual(variation.expected);
110
+ (0, vitest_1.expect)(result).toEqual(variation.expected);
108
111
  });
109
112
  });
110
113
  }
111
114
  });
112
- describe('platform block not found', () => {
113
- it('should return full content', () => {
115
+ (0, vitest_1.describe)('platform block not found', () => {
116
+ (0, vitest_1.it)('should return full content', () => {
114
117
  // -- Arrange --
115
118
  const content = `
116
119
  lane :test do
@@ -119,11 +122,11 @@ platform: android
119
122
  // -- Act --
120
123
  const result = fastlane_1.exportForTesting.findIOSPlatform(content);
121
124
  // -- Assert --
122
- expect(result).toEqual({ index: 0, length: 65 });
125
+ (0, vitest_1.expect)(result).toEqual({ index: 0, length: 65 });
123
126
  });
124
127
  });
125
- describe('invalid platform block', () => {
126
- it('should return null', () => {
128
+ (0, vitest_1.describe)('invalid platform block', () => {
129
+ (0, vitest_1.it)('should return null', () => {
127
130
  // -- Arrange --
128
131
  // platform block is not opened with `do`
129
132
  const content = `
@@ -136,11 +139,11 @@ end
136
139
  // -- Act --
137
140
  const result = fastlane_1.exportForTesting.findIOSPlatform(content);
138
141
  // -- Assert --
139
- expect(result).toBeNull();
142
+ (0, vitest_1.expect)(result).toBeNull();
140
143
  });
141
144
  });
142
- describe('platform block is not closed', () => {
143
- it('should return null', () => {
145
+ (0, vitest_1.describe)('platform block is not closed', () => {
146
+ (0, vitest_1.it)('should return null', () => {
144
147
  // -- Arrange --
145
148
  const content = `
146
149
  platform :ios do
@@ -151,11 +154,11 @@ platform :ios do
151
154
  // -- Act --
152
155
  const result = fastlane_1.exportForTesting.findIOSPlatform(content);
153
156
  // -- Assert --
154
- expect(result).toBeNull();
157
+ (0, vitest_1.expect)(result).toBeNull();
155
158
  });
156
159
  });
157
- describe('multiple platforms detected', () => {
158
- it('should return block with ios platform', () => {
160
+ (0, vitest_1.describe)('multiple platforms detected', () => {
161
+ (0, vitest_1.it)('should return block with ios platform', () => {
159
162
  // -- Arrange --
160
163
  const content = `
161
164
  fastlane_version '2.53.1'
@@ -177,13 +180,13 @@ end
177
180
  // -- Act --
178
181
  const result = fastlane_1.exportForTesting.findIOSPlatform(content);
179
182
  // -- Assert --
180
- expect(result).toEqual({ index: 121, length: 15 });
183
+ (0, vitest_1.expect)(result).toEqual({ index: 121, length: 15 });
181
184
  });
182
185
  });
183
186
  });
184
- describe('#findLanes', () => {
185
- describe('lanes detection', () => {
186
- describe('valid cases', () => {
187
+ (0, vitest_1.describe)('#findLanes', () => {
188
+ (0, vitest_1.describe)('lanes detection', () => {
189
+ (0, vitest_1.describe)('valid cases', () => {
187
190
  const variations = [
188
191
  {
189
192
  name: 'single lane',
@@ -210,43 +213,43 @@ end
210
213
  },
211
214
  ];
212
215
  for (const variation of variations) {
213
- describe(`${variation.name}`, () => {
214
- it('should return lanes', () => {
216
+ (0, vitest_1.describe)(`${variation.name}`, () => {
217
+ (0, vitest_1.it)('should return lanes', () => {
215
218
  // -- Act --
216
219
  const result = fastlane_1.exportForTesting.findLanes(variation.content);
217
220
  // -- Assert --
218
- expect(result).toEqual(variation.expected);
221
+ (0, vitest_1.expect)(result).toEqual(variation.expected);
219
222
  });
220
223
  });
221
224
  }
222
225
  });
223
- describe('invalid cases', () => {
224
- describe('lane is not indented', () => {
225
- it('should return null', () => {
226
+ (0, vitest_1.describe)('invalid cases', () => {
227
+ (0, vitest_1.describe)('lane is not indented', () => {
228
+ (0, vitest_1.it)('should return null', () => {
226
229
  // -- Arrange --
227
230
  const content = `lane :test do\nend`;
228
231
  // -- Act --
229
232
  const result = fastlane_1.exportForTesting.findLanes(content);
230
233
  // -- Assert --
231
- expect(result).toBeNull();
234
+ (0, vitest_1.expect)(result).toBeNull();
232
235
  });
233
236
  });
234
- describe('lane is not closed', () => {
235
- it('should return null', () => {
237
+ (0, vitest_1.describe)('lane is not closed', () => {
238
+ (0, vitest_1.it)('should return null', () => {
236
239
  // -- Arrange --
237
240
  const content = ` lane :test do\n`;
238
241
  // -- Act --
239
242
  const result = fastlane_1.exportForTesting.findLanes(content);
240
243
  // -- Assert --
241
- expect(result).toBeNull();
244
+ (0, vitest_1.expect)(result).toBeNull();
242
245
  });
243
246
  });
244
247
  });
245
248
  });
246
249
  });
247
- describe('#addSentryToLane', () => {
248
- describe('sentry_cli is not present', () => {
249
- it('should return original content', () => {
250
+ (0, vitest_1.describe)('#addSentryToLane', () => {
251
+ (0, vitest_1.describe)('sentry_cli is not present', () => {
252
+ (0, vitest_1.it)('should return original content', () => {
250
253
  // -- Arrange --
251
254
  const content = `
252
255
  platform :ios do
@@ -259,7 +262,7 @@ end
259
262
  // -- Act --
260
263
  const result = fastlane_1.exportForTesting.addSentryToLane(content, lane, 'test-org', 'test-project');
261
264
  // -- Assert --
262
- expect(result).toBe(`
265
+ (0, vitest_1.expect)(result).toBe(`
263
266
  platform :ios do
264
267
  lane :test do
265
268
  puts 'Hello, world!'
@@ -274,8 +277,8 @@ end
274
277
  `);
275
278
  });
276
279
  });
277
- describe('sentry_cli is present', () => {
278
- it('should return updated content', () => {
280
+ (0, vitest_1.describe)('sentry_cli is present', () => {
281
+ (0, vitest_1.it)('should return updated content', () => {
279
282
  // -- Arrange --
280
283
  const content = `
281
284
  platform :ios do
@@ -290,7 +293,7 @@ end
290
293
  // -- Act --
291
294
  const result = fastlane_1.exportForTesting.addSentryToLane(content, lane, 'test-org', 'test-project');
292
295
  // -- Assert --
293
- expect(result).toBe(`
296
+ (0, vitest_1.expect)(result).toBe(`
294
297
  platform :ios do
295
298
  lane :test do
296
299
  puts 'Hello, world!'
@@ -306,11 +309,11 @@ end
306
309
  });
307
310
  });
308
311
  });
309
- describe('#addSentryToFastlane', () => {
312
+ (0, vitest_1.describe)('#addSentryToFastlane', () => {
310
313
  const org = 'test-org';
311
314
  const project = 'test-project';
312
- describe('Fastfile not found', () => {
313
- it('should return false', async () => {
315
+ (0, vitest_1.describe)('Fastfile not found', () => {
316
+ (0, vitest_1.it)('should return false', async () => {
314
317
  // -- Arrange --
315
318
  const { projectPath } = createFastlaneDir();
316
319
  const fastfilePath = path.join(projectPath, 'Fastfile');
@@ -318,12 +321,12 @@ end
318
321
  // -- Act --
319
322
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
320
323
  // -- Assert --
321
- expect(result).toBe(false);
322
- expect(fs.existsSync(fastfilePath)).toBe(false);
324
+ (0, vitest_1.expect)(result).toBe(false);
325
+ (0, vitest_1.expect)(fs.existsSync(fastfilePath)).toBe(false);
323
326
  });
324
327
  });
325
- describe('platform not found', () => {
326
- it('should return false', async () => {
328
+ (0, vitest_1.describe)('platform not found', () => {
329
+ (0, vitest_1.it)('should return false', async () => {
327
330
  // -- Arrange --
328
331
  const { fastlaneDir, projectPath } = createFastlaneDir();
329
332
  const fastfilePath = createFastfile(fastlaneDir, `
@@ -337,33 +340,33 @@ end
337
340
  // -- Act --
338
341
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
339
342
  // -- Assert --
340
- expect(result).toBe(false);
341
- expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);
343
+ (0, vitest_1.expect)(result).toBe(false);
344
+ (0, vitest_1.expect)(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);
342
345
  });
343
346
  });
344
- describe('no lanes', () => {
345
- it('should return false', async () => {
347
+ (0, vitest_1.describe)('no lanes', () => {
348
+ (0, vitest_1.it)('should return false', async () => {
346
349
  // -- Arrange --
347
350
  const { fastlaneDir, projectPath } = createFastlaneDir();
348
351
  createFastfile(fastlaneDir, `platform :ios`);
349
352
  // -- Act --
350
353
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
351
354
  // -- Assert --
352
- expect(result).toBe(false);
355
+ (0, vitest_1.expect)(result).toBe(false);
353
356
  });
354
- it('should warn user', async () => {
357
+ (0, vitest_1.it)('should warn user', async () => {
355
358
  // -- Arrange --
356
359
  const { fastlaneDir, projectPath } = createFastlaneDir();
357
360
  createFastfile(fastlaneDir, `platform :ios`);
358
361
  // -- Act --
359
362
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
360
363
  // -- Assert --
361
- expect(result).toBe(false);
362
- expect(clack.log.warn).toHaveBeenCalledWith('No suitable lanes in your Fastfile.');
364
+ (0, vitest_1.expect)(result).toBe(false);
365
+ (0, vitest_1.expect)(clack.log.warn).toHaveBeenCalledWith('No suitable lanes in your Fastfile.');
363
366
  });
364
367
  });
365
- describe('single lane', () => {
366
- it('should return true', async () => {
368
+ (0, vitest_1.describe)('single lane', () => {
369
+ (0, vitest_1.it)('should return true', async () => {
367
370
  // -- Arrange --
368
371
  const { fastlaneDir, projectPath } = createFastlaneDir();
369
372
  const fastfilePath = createFastfile(fastlaneDir, `
@@ -376,8 +379,8 @@ end
376
379
  // -- Act --
377
380
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
378
381
  // -- Assert --
379
- expect(result).toBe(true);
380
- expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(`
382
+ (0, vitest_1.expect)(result).toBe(true);
383
+ (0, vitest_1.expect)(fs.readFileSync(fastfilePath, 'utf8')).toBe(`
381
384
  platform :ios do
382
385
  lane :test do
383
386
  puts 'Hello, world!'
@@ -392,11 +395,11 @@ end
392
395
  `);
393
396
  });
394
397
  });
395
- describe('multiple lanes', () => {
398
+ (0, vitest_1.describe)('multiple lanes', () => {
396
399
  let fastfilePath;
397
400
  let projectPath;
398
401
  let originalContent;
399
- beforeEach(() => {
402
+ (0, vitest_1.beforeEach)(() => {
400
403
  const createdFastlaneDir = createFastlaneDir();
401
404
  projectPath = createdFastlaneDir.projectPath;
402
405
  fastfilePath = createFastfile(createdFastlaneDir.fastlaneDir, `platform :ios do
@@ -410,30 +413,30 @@ end
410
413
  end
411
414
  `);
412
415
  });
413
- describe('no lane selected', () => {
414
- it('should not modify Fastfile', async () => {
416
+ (0, vitest_1.describe)('no lane selected', () => {
417
+ (0, vitest_1.it)('should not modify Fastfile', async () => {
415
418
  // -- Arrange --
416
419
  originalContent = fs.readFileSync(fastfilePath, 'utf8');
417
- jest.spyOn(clack, 'select').mockResolvedValue(undefined);
420
+ vitest_1.vi.spyOn(clack, 'select').mockResolvedValue(undefined);
418
421
  // -- Act --
419
422
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
420
423
  // -- Assert --
421
- expect(result).toBe(false);
422
- expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);
424
+ (0, vitest_1.expect)(result).toBe(false);
425
+ (0, vitest_1.expect)(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);
423
426
  });
424
427
  });
425
- describe('lane selected', () => {
426
- it('should modify only selected lane', async () => {
428
+ (0, vitest_1.describe)('lane selected', () => {
429
+ (0, vitest_1.it)('should modify only selected lane', async () => {
427
430
  // -- Arrange --
428
- jest.spyOn(clack, 'select').mockResolvedValue({
431
+ vitest_1.vi.spyOn(clack, 'select').mockResolvedValue({
429
432
  value: 'beta',
430
433
  index: 1,
431
434
  });
432
435
  // -- Act --
433
436
  const result = await (0, fastlane_1.addSentryToFastlane)(projectPath, org, project);
434
437
  // -- Assert --
435
- expect(result).toBe(true);
436
- expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(`platform :ios do
438
+ (0, vitest_1.expect)(result).toBe(true);
439
+ (0, vitest_1.expect)(fs.readFileSync(fastfilePath, 'utf8')).toBe(`platform :ios do
437
440
  lane :test do
438
441
  puts 'Hello, world!'
439
442
  end
@@ -449,9 +452,9 @@ end
449
452
  end
450
453
  end
451
454
  `);
452
- expect(clack.select).toHaveBeenCalledWith({
455
+ (0, vitest_1.expect)(clack.select).toHaveBeenCalledWith({
453
456
  // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
454
- maxItems: expect.any(Number),
457
+ maxItems: vitest_1.expect.any(Number),
455
458
  message: 'Select lane to add Sentry to:',
456
459
  options: [
457
460
  { value: { value: 'test', index: 0 }, label: 'test' },
@@ -1 +1 @@
1
- {"version":3,"file":"fastfile.test.js","sourceRoot":"","sources":["../../../test/apple/fastfile.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport {\n addSentryToFastlane,\n exportForTesting,\n fastFile,\n} from '../../src/apple/fastlane';\n// @ts-ignore - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\n\njest.mock('@clack/prompts', () => ({\n __esModule: true,\n ...jest.requireActual('@clack/prompts'),\n}));\n\ndescribe('fastlane', () => {\n beforeEach(() => {\n jest.spyOn(clack.log, 'warn').mockImplementation();\n jest.spyOn(clack, 'select').mockResolvedValue(undefined);\n });\n\n describe('#fastFile', () => {\n describe('file exists', () => {\n it('should return path', () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n const fastfile = createFastfile(fastlaneDir, 'lane :test do');\n\n // -- Act --\n const result = fastFile(projectPath);\n\n // -- Assert --\n expect(result).toBe(fastfile);\n });\n });\n\n describe('file does not exist', () => {\n it('should return null', () => {\n // -- Arrange --\n const { projectPath } = createFastlaneDir();\n // do not create Fastfile\n\n // -- Act --\n const result = fastFile(projectPath);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n });\n\n describe('#findIOSPlatform', () => {\n describe('platform block detection', () => {\n const variations: {\n name: string;\n content: string;\n expected: { index: number; length: number };\n }[] = [\n {\n name: 'no platform',\n content: `lane :test do\nend`,\n expected: { index: 0, length: 17 },\n },\n {\n name: 'platform is ios',\n content: `platform: ios\nlane :test do\nend`,\n expected: { index: 0, length: 31 },\n },\n {\n name: 'platform is ios and other platform',\n content: `platform: ios\nend\nplatform: android\n lane :test do\n end`,\n expected: { index: 0, length: 57 },\n },\n {\n name: 'platform is ios and other platform',\n content: `\n\\t\\tplatform: ios\n\\t\\tend\n\\t\\tplatform: android\n\\t\\t\\tlane :test do\n\\t\\t\\tend`,\n expected: { index: 0, length: 66 },\n },\n ];\n\n for (const variation of variations) {\n describe(`${variation.name}`, () => {\n it('should return null', () => {\n // -- Act --\n const result = exportForTesting.findIOSPlatform(variation.content);\n\n // -- Assert --\n expect(result).toEqual(variation.expected);\n });\n });\n }\n });\n\n describe('platform block not found', () => {\n it('should return full content', () => {\n // -- Arrange --\n const content = `\n lane :test do\n puts 'Hello, world!'\n end`;\n\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toEqual({ index: 0, length: 65 });\n });\n });\n\n describe('invalid platform block', () => {\n it('should return null', () => {\n // -- Arrange --\n // platform block is not opened with `do`\n const content = `\nplatform :ios\\n\n lane :test do\n puts 'Hello, world!'\n end\nend\n`;\n\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n\n describe('platform block is not closed', () => {\n it('should return null', () => {\n // -- Arrange --\n const content = `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n end\n`;\n\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n\n describe('multiple platforms detected', () => {\n it('should return block with ios platform', () => {\n // -- Arrange --\n const content = `\nfastlane_version '2.53.1'\n\nbefore_all do\n ensure_git_branch\n ensure_git_status_clean\n git_pull\nend\n\nplatform :ios do\n # iOS Lanes\nend\n\nplatform :android do\n # Android Lanes\nend\n`;\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toEqual({ index: 121, length: 15 });\n });\n });\n });\n\n describe('#findLanes', () => {\n describe('lanes detection', () => {\n describe('valid cases', () => {\n const variations: {\n name: string;\n content: string;\n expected: { index: number; length: number; name: string }[] | null;\n }[] = [\n {\n name: 'single lane',\n content: `\n lane :test do\n puts 'Hello, world!'\n end\n`,\n expected: [{ index: 17, length: 25, name: 'test' }],\n },\n {\n name: 'multiple lanes',\n content: `\n lane :test do\n puts 'Hello, world!'\n end\n lane :test2 do\n puts 'Hello, world!'\n end`,\n expected: [\n { index: 17, length: 25, name: 'test' },\n { index: 65, length: 25, name: 'test2' },\n ],\n },\n ];\n\n for (const variation of variations) {\n describe(`${variation.name}`, () => {\n it('should return lanes', () => {\n // -- Act --\n const result = exportForTesting.findLanes(variation.content);\n\n // -- Assert --\n expect(result).toEqual(variation.expected);\n });\n });\n }\n });\n\n describe('invalid cases', () => {\n describe('lane is not indented', () => {\n it('should return null', () => {\n // -- Arrange --\n const content = `lane :test do\\nend`;\n\n // -- Act --\n const result = exportForTesting.findLanes(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n\n describe('lane is not closed', () => {\n it('should return null', () => {\n // -- Arrange --\n const content = ` lane :test do\\n`;\n\n // -- Act --\n const result = exportForTesting.findLanes(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n });\n });\n });\n\n describe('#addSentryToLane', () => {\n describe('sentry_cli is not present', () => {\n it('should return original content', () => {\n // -- Arrange --\n const content = `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n end\nend\n`;\n const lane = { index: 34, length: 25, name: 'test' };\n\n // -- Act --\n const result = exportForTesting.addSentryToLane(\n content,\n lane,\n 'test-org',\n 'test-project',\n );\n\n // -- Assert --\n expect(result).toBe(`\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`);\n });\n });\n\n describe('sentry_cli is present', () => {\n it('should return updated content', () => {\n // -- Arrange --\n const content = `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(org_slug: 'test-org', project_slug: 'test-project')\n end\nend\n`;\n const lane = { index: 34, length: 92, name: 'test' };\n\n // -- Act --\n const result = exportForTesting.addSentryToLane(\n content,\n lane,\n 'test-org',\n 'test-project',\n );\n\n // -- Assert --\n expect(result).toBe(\n `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`,\n );\n });\n });\n });\n\n describe('#addSentryToFastlane', () => {\n const org = 'test-org';\n const project = 'test-project';\n\n describe('Fastfile not found', () => {\n it('should return false', async () => {\n // -- Arrange --\n const { projectPath } = createFastlaneDir();\n const fastfilePath = path.join(projectPath, 'Fastfile');\n // do not create Fastfile\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(fs.existsSync(fastfilePath)).toBe(false);\n });\n });\n\n describe('platform not found', () => {\n it('should return false', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n const fastfilePath = createFastfile(\n fastlaneDir,\n `\nplatform :ios\n lane :test do\n puts 'Hello, world!'\n end\nend\n`,\n );\n const originalContent = fs.readFileSync(fastfilePath, 'utf8');\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);\n });\n });\n\n describe('no lanes', () => {\n it('should return false', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n createFastfile(fastlaneDir, `platform :ios`);\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n });\n\n it('should warn user', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n createFastfile(fastlaneDir, `platform :ios`);\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(clack.log.warn).toHaveBeenCalledWith(\n 'No suitable lanes in your Fastfile.',\n );\n });\n });\n\n describe('single lane', () => {\n it('should return true', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n const fastfilePath = createFastfile(\n fastlaneDir,\n `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n end\nend\n`,\n );\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(true);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(\n `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`,\n );\n });\n });\n\n describe('multiple lanes', () => {\n let fastfilePath: string;\n let projectPath: string;\n let originalContent: string;\n\n beforeEach(() => {\n const createdFastlaneDir = createFastlaneDir();\n projectPath = createdFastlaneDir.projectPath;\n fastfilePath = createFastfile(\n createdFastlaneDir.fastlaneDir,\n `platform :ios do\n lane :test do\n puts 'Hello, world!'\n end\n\n lane :beta do\n puts 'Beta lane'\n end\nend\n`,\n );\n });\n\n describe('no lane selected', () => {\n it('should not modify Fastfile', async () => {\n // -- Arrange --\n originalContent = fs.readFileSync(fastfilePath, 'utf8');\n jest.spyOn(clack, 'select').mockResolvedValue(undefined);\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);\n });\n });\n\n describe('lane selected', () => {\n it('should modify only selected lane', async () => {\n // -- Arrange --\n jest.spyOn(clack, 'select').mockResolvedValue({\n value: 'beta',\n index: 1,\n });\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(true);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(\n `platform :ios do\n lane :test do\n puts 'Hello, world!'\n end\n\n lane :beta do\n puts 'Beta lane'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`,\n );\n expect(clack.select).toHaveBeenCalledWith({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n maxItems: expect.any(Number),\n message: 'Select lane to add Sentry to:',\n options: [\n { value: { value: 'test', index: 0 }, label: 'test' },\n { value: { value: 'beta', index: 1 }, label: 'beta' },\n ],\n });\n });\n });\n });\n });\n});\n\nfunction createFastlaneDir() {\n const projectPath = fs.mkdtempSync(path.join(os.tmpdir(), 'test-project'));\n const fastlaneDir = path.join(projectPath, 'fastlane');\n fs.mkdirSync(fastlaneDir, {\n recursive: true,\n });\n return { fastlaneDir, projectPath };\n}\n\nfunction createFastfile(fastlaneDir: string, content: string) {\n const fastfile = path.join(fastlaneDir, 'Fastfile');\n fs.writeFileSync(fastfile, content);\n return fastfile;\n}\n"]}
1
+ {"version":3,"file":"fastfile.test.js","sourceRoot":"","sources":["../../../test/apple/fastfile.test.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport {\n addSentryToFastlane,\n exportForTesting,\n fastFile,\n} from '../../src/apple/fastlane';\n// @ts-expect-error - clack is ESM and TS complains about that. It works though\nimport * as clack from '@clack/prompts';\nimport { beforeEach, describe, expect, it, vi } from 'vitest';\n\nvi.mock('@clack/prompts', async () => ({\n __esModule: true,\n ...(await vi.importActual<typeof clack>('@clack/prompts')),\n}));\n\ndescribe('fastlane', () => {\n beforeEach(() => {\n vi.spyOn(clack.log, 'warn').mockImplementation(() => {\n /* empty */\n });\n vi.spyOn(clack, 'select').mockResolvedValue(undefined);\n });\n\n describe('#fastFile', () => {\n describe('file exists', () => {\n it('should return path', () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n const fastfile = createFastfile(fastlaneDir, 'lane :test do');\n\n // -- Act --\n const result = fastFile(projectPath);\n\n // -- Assert --\n expect(result).toBe(fastfile);\n });\n });\n\n describe('file does not exist', () => {\n it('should return null', () => {\n // -- Arrange --\n const { projectPath } = createFastlaneDir();\n // do not create Fastfile\n\n // -- Act --\n const result = fastFile(projectPath);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n });\n\n describe('#findIOSPlatform', () => {\n describe('platform block detection', () => {\n const variations: {\n name: string;\n content: string;\n expected: { index: number; length: number };\n }[] = [\n {\n name: 'no platform',\n content: `lane :test do\nend`,\n expected: { index: 0, length: 17 },\n },\n {\n name: 'platform is ios',\n content: `platform: ios\nlane :test do\nend`,\n expected: { index: 0, length: 31 },\n },\n {\n name: 'platform is ios and other platform',\n content: `platform: ios\nend\nplatform: android\n lane :test do\n end`,\n expected: { index: 0, length: 57 },\n },\n {\n name: 'platform is ios and other platform',\n content: `\n\\t\\tplatform: ios\n\\t\\tend\n\\t\\tplatform: android\n\\t\\t\\tlane :test do\n\\t\\t\\tend`,\n expected: { index: 0, length: 66 },\n },\n ];\n\n for (const variation of variations) {\n describe(`${variation.name}`, () => {\n it('should return null', () => {\n // -- Act --\n const result = exportForTesting.findIOSPlatform(variation.content);\n\n // -- Assert --\n expect(result).toEqual(variation.expected);\n });\n });\n }\n });\n\n describe('platform block not found', () => {\n it('should return full content', () => {\n // -- Arrange --\n const content = `\n lane :test do\n puts 'Hello, world!'\n end`;\n\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toEqual({ index: 0, length: 65 });\n });\n });\n\n describe('invalid platform block', () => {\n it('should return null', () => {\n // -- Arrange --\n // platform block is not opened with `do`\n const content = `\nplatform :ios\\n\n lane :test do\n puts 'Hello, world!'\n end\nend\n`;\n\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n\n describe('platform block is not closed', () => {\n it('should return null', () => {\n // -- Arrange --\n const content = `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n end\n`;\n\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n\n describe('multiple platforms detected', () => {\n it('should return block with ios platform', () => {\n // -- Arrange --\n const content = `\nfastlane_version '2.53.1'\n\nbefore_all do\n ensure_git_branch\n ensure_git_status_clean\n git_pull\nend\n\nplatform :ios do\n # iOS Lanes\nend\n\nplatform :android do\n # Android Lanes\nend\n`;\n // -- Act --\n const result = exportForTesting.findIOSPlatform(content);\n\n // -- Assert --\n expect(result).toEqual({ index: 121, length: 15 });\n });\n });\n });\n\n describe('#findLanes', () => {\n describe('lanes detection', () => {\n describe('valid cases', () => {\n const variations: {\n name: string;\n content: string;\n expected: { index: number; length: number; name: string }[] | null;\n }[] = [\n {\n name: 'single lane',\n content: `\n lane :test do\n puts 'Hello, world!'\n end\n`,\n expected: [{ index: 17, length: 25, name: 'test' }],\n },\n {\n name: 'multiple lanes',\n content: `\n lane :test do\n puts 'Hello, world!'\n end\n lane :test2 do\n puts 'Hello, world!'\n end`,\n expected: [\n { index: 17, length: 25, name: 'test' },\n { index: 65, length: 25, name: 'test2' },\n ],\n },\n ];\n\n for (const variation of variations) {\n describe(`${variation.name}`, () => {\n it('should return lanes', () => {\n // -- Act --\n const result = exportForTesting.findLanes(variation.content);\n\n // -- Assert --\n expect(result).toEqual(variation.expected);\n });\n });\n }\n });\n\n describe('invalid cases', () => {\n describe('lane is not indented', () => {\n it('should return null', () => {\n // -- Arrange --\n const content = `lane :test do\\nend`;\n\n // -- Act --\n const result = exportForTesting.findLanes(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n\n describe('lane is not closed', () => {\n it('should return null', () => {\n // -- Arrange --\n const content = ` lane :test do\\n`;\n\n // -- Act --\n const result = exportForTesting.findLanes(content);\n\n // -- Assert --\n expect(result).toBeNull();\n });\n });\n });\n });\n });\n\n describe('#addSentryToLane', () => {\n describe('sentry_cli is not present', () => {\n it('should return original content', () => {\n // -- Arrange --\n const content = `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n end\nend\n`;\n const lane = { index: 34, length: 25, name: 'test' };\n\n // -- Act --\n const result = exportForTesting.addSentryToLane(\n content,\n lane,\n 'test-org',\n 'test-project',\n );\n\n // -- Assert --\n expect(result).toBe(`\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`);\n });\n });\n\n describe('sentry_cli is present', () => {\n it('should return updated content', () => {\n // -- Arrange --\n const content = `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(org_slug: 'test-org', project_slug: 'test-project')\n end\nend\n`;\n const lane = { index: 34, length: 92, name: 'test' };\n\n // -- Act --\n const result = exportForTesting.addSentryToLane(\n content,\n lane,\n 'test-org',\n 'test-project',\n );\n\n // -- Assert --\n expect(result).toBe(\n `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`,\n );\n });\n });\n });\n\n describe('#addSentryToFastlane', () => {\n const org = 'test-org';\n const project = 'test-project';\n\n describe('Fastfile not found', () => {\n it('should return false', async () => {\n // -- Arrange --\n const { projectPath } = createFastlaneDir();\n const fastfilePath = path.join(projectPath, 'Fastfile');\n // do not create Fastfile\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(fs.existsSync(fastfilePath)).toBe(false);\n });\n });\n\n describe('platform not found', () => {\n it('should return false', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n const fastfilePath = createFastfile(\n fastlaneDir,\n `\nplatform :ios\n lane :test do\n puts 'Hello, world!'\n end\nend\n`,\n );\n const originalContent = fs.readFileSync(fastfilePath, 'utf8');\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);\n });\n });\n\n describe('no lanes', () => {\n it('should return false', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n createFastfile(fastlaneDir, `platform :ios`);\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n });\n\n it('should warn user', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n createFastfile(fastlaneDir, `platform :ios`);\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(clack.log.warn).toHaveBeenCalledWith(\n 'No suitable lanes in your Fastfile.',\n );\n });\n });\n\n describe('single lane', () => {\n it('should return true', async () => {\n // -- Arrange --\n const { fastlaneDir, projectPath } = createFastlaneDir();\n const fastfilePath = createFastfile(\n fastlaneDir,\n `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n end\nend\n`,\n );\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(true);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(\n `\nplatform :ios do\n lane :test do\n puts 'Hello, world!'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`,\n );\n });\n });\n\n describe('multiple lanes', () => {\n let fastfilePath: string;\n let projectPath: string;\n let originalContent: string;\n\n beforeEach(() => {\n const createdFastlaneDir = createFastlaneDir();\n projectPath = createdFastlaneDir.projectPath;\n fastfilePath = createFastfile(\n createdFastlaneDir.fastlaneDir,\n `platform :ios do\n lane :test do\n puts 'Hello, world!'\n end\n\n lane :beta do\n puts 'Beta lane'\n end\nend\n`,\n );\n });\n\n describe('no lane selected', () => {\n it('should not modify Fastfile', async () => {\n // -- Arrange --\n originalContent = fs.readFileSync(fastfilePath, 'utf8');\n vi.spyOn(clack, 'select').mockResolvedValue(undefined);\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(false);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(originalContent);\n });\n });\n\n describe('lane selected', () => {\n it('should modify only selected lane', async () => {\n // -- Arrange --\n vi.spyOn(clack, 'select').mockResolvedValue({\n value: 'beta',\n index: 1,\n });\n\n // -- Act --\n const result = await addSentryToFastlane(projectPath, org, project);\n\n // -- Assert --\n expect(result).toBe(true);\n expect(fs.readFileSync(fastfilePath, 'utf8')).toBe(\n `platform :ios do\n lane :test do\n puts 'Hello, world!'\n end\n\n lane :beta do\n puts 'Beta lane'\n\n sentry_cli(\n org_slug: 'test-org',\n project_slug: 'test-project',\n include_sources: true\n )\n end\nend\n`,\n );\n expect(clack.select).toHaveBeenCalledWith({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n maxItems: expect.any(Number),\n message: 'Select lane to add Sentry to:',\n options: [\n { value: { value: 'test', index: 0 }, label: 'test' },\n { value: { value: 'beta', index: 1 }, label: 'beta' },\n ],\n });\n });\n });\n });\n });\n});\n\nfunction createFastlaneDir() {\n const projectPath = fs.mkdtempSync(path.join(os.tmpdir(), 'test-project'));\n const fastlaneDir = path.join(projectPath, 'fastlane');\n fs.mkdirSync(fastlaneDir, {\n recursive: true,\n });\n return { fastlaneDir, projectPath };\n}\n\nfunction createFastfile(fastlaneDir: string, content: string) {\n const fastfile = path.join(fastlaneDir, 'Fastfile');\n fs.writeFileSync(fastfile, content);\n return fastfile;\n}\n"]}