@tscircuit/fake-snippets 0.0.6 → 0.0.7

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 (38) hide show
  1. package/bun-tests/fake-snippets-api/routes/package_files/create.test.ts +375 -0
  2. package/bun-tests/fake-snippets-api/routes/package_files/download.test.ts +248 -0
  3. package/bun-tests/fake-snippets-api/routes/package_files/get.test.ts +220 -0
  4. package/bun-tests/fake-snippets-api/routes/package_files/list.test.ts +204 -0
  5. package/bun-tests/fake-snippets-api/routes/package_releases/get.test.ts +0 -1
  6. package/bun.lock +97 -73
  7. package/dist/bundle.js +584 -212
  8. package/fake-snippets-api/lib/db/db-client.ts +13 -0
  9. package/fake-snippets-api/lib/package_file/get-package-file-id-from-file-descriptor.ts +168 -0
  10. package/fake-snippets-api/lib/package_release/find-package-release-id.ts +122 -0
  11. package/fake-snippets-api/routes/api/package_files/create.ts +132 -0
  12. package/fake-snippets-api/routes/api/package_files/download.ts +70 -153
  13. package/fake-snippets-api/routes/api/package_files/get.ts +24 -5
  14. package/fake-snippets-api/routes/api/package_files/list.ts +16 -28
  15. package/index.html +12 -1
  16. package/package.json +9 -9
  17. package/playwright-tests/profile-page.spec.ts +59 -0
  18. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-before-delete.png +0 -0
  19. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-delete-dialog.png +0 -0
  20. package/playwright-tests/snapshots/profile-page.spec.ts-profile-page-dropdown-open.png +0 -0
  21. package/scripts/generate-image-sizes.ts +0 -1
  22. package/scripts/generate_bundle_stats.js +22 -6
  23. package/src/components/AiChatInterface.tsx +8 -0
  24. package/src/components/Analytics.tsx +1 -1
  25. package/src/components/CodeAndPreview.tsx +9 -3
  26. package/src/components/CreateNewSnippetWithAiHero.tsx +6 -2
  27. package/src/components/EditorNav.tsx +4 -0
  28. package/src/components/Footer.tsx +1 -1
  29. package/src/components/Header.tsx +7 -10
  30. package/src/components/HeaderLogin.tsx +1 -1
  31. package/src/components/PreviewContent.tsx +4 -1
  32. package/src/components/SnippetList.tsx +71 -0
  33. package/src/lib/templates/blinking-led-board-template.ts +2 -1
  34. package/src/pages/dashboard.tsx +19 -44
  35. package/src/pages/editor.tsx +1 -1
  36. package/src/pages/landing.tsx +8 -16
  37. package/src/pages/quickstart.tsx +9 -9
  38. package/src/pages/user-profile.tsx +50 -3
@@ -0,0 +1,375 @@
1
+ import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
2
+ import { expect, test } from "bun:test"
3
+
4
+ test("create package file with content_text", async () => {
5
+ const { axios } = await getTestServer()
6
+
7
+ // First create a package
8
+ const packageResponse = await axios.post(
9
+ "/api/packages/create",
10
+ {
11
+ name: "@test/package-files-create",
12
+ description: "A test package for creating files",
13
+ },
14
+ {
15
+ headers: {
16
+ Authorization: "Bearer 1234",
17
+ },
18
+ },
19
+ )
20
+ expect(packageResponse.status).toBe(200)
21
+ const createdPackage = packageResponse.data.package
22
+
23
+ // Create a package release
24
+ const releaseResponse = await axios.post("/api/package_releases/create", {
25
+ package_id: createdPackage.package_id,
26
+ version: "1.0.0",
27
+ is_latest: true,
28
+ })
29
+ expect(releaseResponse.status).toBe(200)
30
+ const createdRelease = releaseResponse.data.package_release
31
+
32
+ // Create a package file
33
+ const fileContent = "console.log('Hello, world!');"
34
+ const filePath = "/index.js"
35
+ const createResponse = await axios.post("/api/package_files/create", {
36
+ package_release_id: createdRelease.package_release_id,
37
+ file_path: filePath,
38
+ content_text: fileContent,
39
+ })
40
+
41
+ expect(createResponse.status).toBe(200)
42
+ const responseBody = createResponse.data
43
+ expect(responseBody.ok).toBe(true)
44
+ expect(responseBody.package_file).toBeDefined()
45
+ expect(responseBody.package_file.package_release_id).toBe(
46
+ createdRelease.package_release_id,
47
+ )
48
+ expect(responseBody.package_file.file_path).toBe(filePath)
49
+
50
+ // Verify the file can be retrieved using the get endpoint
51
+ const getResponse = await axios.post("/api/package_files/get", {
52
+ package_file_id: responseBody.package_file.package_file_id,
53
+ })
54
+ expect(getResponse.status).toBe(200)
55
+ expect(getResponse.data.package_file.file_path).toBe(filePath)
56
+ expect(getResponse.data.package_file.content_text).toBe(fileContent)
57
+ })
58
+
59
+ test("create package file with content_base64", async () => {
60
+ const { axios } = await getTestServer()
61
+
62
+ // First create a package
63
+ const packageResponse = await axios.post(
64
+ "/api/packages/create",
65
+ {
66
+ name: "@test/package-files-create-base64",
67
+ description: "A test package for creating files with base64",
68
+ },
69
+ {
70
+ headers: {
71
+ Authorization: "Bearer 1234",
72
+ },
73
+ },
74
+ )
75
+ expect(packageResponse.status).toBe(200)
76
+ const createdPackage = packageResponse.data.package
77
+
78
+ // Create a package release
79
+ const releaseResponse = await axios.post("/api/package_releases/create", {
80
+ package_id: createdPackage.package_id,
81
+ version: "1.0.0",
82
+ is_latest: true,
83
+ })
84
+ expect(releaseResponse.status).toBe(200)
85
+ const createdRelease = releaseResponse.data.package_release
86
+
87
+ // Create a package file with base64 content
88
+ const fileContent = "export const sum = (a, b) => a + b;"
89
+ const base64Content = Buffer.from(fileContent).toString("base64")
90
+ const filePath = "/utils.js"
91
+ const createResponse = await axios.post("/api/package_files/create", {
92
+ package_release_id: createdRelease.package_release_id,
93
+ file_path: filePath,
94
+ content_base64: base64Content,
95
+ })
96
+
97
+ expect(createResponse.status).toBe(200)
98
+ const responseBody = createResponse.data
99
+ expect(responseBody.ok).toBe(true)
100
+ expect(responseBody.package_file).toBeDefined()
101
+ expect(responseBody.package_file.file_path).toBe(filePath)
102
+ // The content should be decoded from base64
103
+ expect(responseBody.package_file.content_text).toBe(fileContent)
104
+
105
+ // Verify the file can be retrieved using the get endpoint with package_name_with_version
106
+ const getResponse = await axios.post("/api/package_files/get", {
107
+ package_file_id: responseBody.package_file.package_file_id,
108
+ })
109
+ expect(getResponse.status).toBe(200)
110
+ expect(getResponse.data.package_file.content_text).toBe(fileContent)
111
+ })
112
+
113
+ test("create package file using package_name_with_version", async () => {
114
+ const { axios } = await getTestServer()
115
+
116
+ // First create a package
117
+ const packageName = "@test/package-files-create-by-name"
118
+ const version = "2.0.0"
119
+ const packageResponse = await axios.post(
120
+ "/api/packages/create",
121
+ {
122
+ name: packageName,
123
+ description: "A test package for creating files by name",
124
+ },
125
+ {
126
+ headers: {
127
+ Authorization: "Bearer 1234",
128
+ },
129
+ },
130
+ )
131
+ expect(packageResponse.status).toBe(200)
132
+ const createdPackage = packageResponse.data.package
133
+
134
+ // Create a package release
135
+ const releaseResponse = await axios.post("/api/package_releases/create", {
136
+ package_id: createdPackage.package_id,
137
+ version,
138
+ is_latest: true,
139
+ })
140
+ expect(releaseResponse.status).toBe(200)
141
+
142
+ // Create a package file using package_name_with_version
143
+ const fileContent = "# README\nThis is a test package."
144
+ const filePath = "/README.md"
145
+ const createResponse = await axios.post("/api/package_files/create", {
146
+ package_name_with_version: `${packageName}@${version}`,
147
+ file_path: filePath,
148
+ content_text: fileContent,
149
+ })
150
+
151
+ expect(createResponse.status).toBe(200)
152
+ const responseBody = createResponse.data
153
+ expect(responseBody.ok).toBe(true)
154
+ expect(responseBody.package_file).toBeDefined()
155
+ expect(responseBody.package_file.file_path).toBe(filePath)
156
+ expect(responseBody.package_file.content_text).toBe(fileContent)
157
+
158
+ // Verify the file can be retrieved using the list endpoint
159
+ const listResponse = await axios.post("/api/package_files/list", {
160
+ package_name_with_version: `${packageName}@${version}`,
161
+ })
162
+ expect(listResponse.status).toBe(200)
163
+ expect(listResponse.data.ok).toBe(true)
164
+ expect(listResponse.data.package_files.length).toBeGreaterThan(0)
165
+ const foundFile = listResponse.data.package_files.find(
166
+ (file: any) => file.file_path === filePath,
167
+ )
168
+ expect(foundFile).toBeDefined()
169
+ expect(foundFile.content_text).toBe(fileContent)
170
+ })
171
+
172
+ test("create package file - 404 for non-existent package release", async () => {
173
+ const { axios } = await getTestServer()
174
+
175
+ try {
176
+ await axios.post("/api/package_files/create", {
177
+ package_release_id: "non-existent-id",
178
+ file_path: "/test.js",
179
+ content_text: "console.log('test');",
180
+ })
181
+ throw new Error("Expected request to fail")
182
+ } catch (error: any) {
183
+ expect(error.status).toBe(404)
184
+ expect(error.data.error.error_code).toBe("package_release_not_found")
185
+ expect(error.data.error.message).toBe("Package release not found")
186
+ }
187
+ })
188
+
189
+ test("create package file - 404 for non-existent package", async () => {
190
+ const { axios } = await getTestServer()
191
+
192
+ try {
193
+ await axios.post("/api/package_files/create", {
194
+ package_name_with_version: "non-existent-package@1.0.0",
195
+ file_path: "/test.js",
196
+ content_text: "console.log('test');",
197
+ })
198
+ throw new Error("Expected request to fail")
199
+ } catch (error: any) {
200
+ expect(error.status).toBe(404)
201
+ expect(error.data.error.error_code).toBe("package_release_not_found")
202
+ expect(error.data.error.message).toBe("Package release not found")
203
+ }
204
+ })
205
+
206
+ test("create package file - 400 for missing content", async () => {
207
+ const { axios } = await getTestServer()
208
+
209
+ // First create a package and release
210
+ const packageResponse = await axios.post(
211
+ "/api/packages/create",
212
+ {
213
+ name: "@test/package-files-create-error",
214
+ description: "A test package for error cases",
215
+ },
216
+ {
217
+ headers: {
218
+ Authorization: "Bearer 1234",
219
+ },
220
+ },
221
+ )
222
+ const createdPackage = packageResponse.data.package
223
+
224
+ const releaseResponse = await axios.post("/api/package_releases/create", {
225
+ package_id: createdPackage.package_id,
226
+ version: "1.0.0",
227
+ })
228
+ const createdRelease = releaseResponse.data.package_release
229
+
230
+ try {
231
+ await axios.post("/api/package_files/create", {
232
+ package_release_id: createdRelease.package_release_id,
233
+ file_path: "/test.js",
234
+ // Missing both content_text and content_base64
235
+ })
236
+ throw new Error("Expected request to fail")
237
+ } catch (error: any) {
238
+ expect(error.status).toBe(400)
239
+ expect(error.data.message).toContain("content")
240
+ }
241
+ })
242
+
243
+ test("create package file - 400 for both content_text and content_base64", async () => {
244
+ const { axios } = await getTestServer()
245
+
246
+ // First create a package and release
247
+ const packageResponse = await axios.post(
248
+ "/api/packages/create",
249
+ {
250
+ name: "@test/package-files-create-error-2",
251
+ description: "Another test package for error cases",
252
+ },
253
+ {
254
+ headers: {
255
+ Authorization: "Bearer 1234",
256
+ },
257
+ },
258
+ )
259
+ const createdPackage = packageResponse.data.package
260
+
261
+ const releaseResponse = await axios.post("/api/package_releases/create", {
262
+ package_id: createdPackage.package_id,
263
+ version: "1.0.0",
264
+ })
265
+ const createdRelease = releaseResponse.data.package_release
266
+
267
+ try {
268
+ await axios.post("/api/package_files/create", {
269
+ package_release_id: createdRelease.package_release_id,
270
+ file_path: "/test.js",
271
+ content_text: "console.log('test');",
272
+ content_base64: "Y29uc29sZS5sb2coJ3Rlc3QnKTs=", // Both content_text and content_base64
273
+ })
274
+ throw new Error("Expected request to fail")
275
+ } catch (error: any) {
276
+ expect(error.status).toBe(400)
277
+ expect(error.data.message).toContain("content")
278
+ }
279
+ })
280
+
281
+ test("create release tarball package file", async () => {
282
+ const { axios } = await getTestServer()
283
+
284
+ // First create a package
285
+ const packageResponse = await axios.post(
286
+ "/api/packages/create",
287
+ {
288
+ name: "@test/package-files-create-tarball",
289
+ description: "A test package for creating tarball files",
290
+ },
291
+ {
292
+ headers: {
293
+ Authorization: "Bearer 1234",
294
+ },
295
+ },
296
+ )
297
+ expect(packageResponse.status).toBe(200)
298
+ const createdPackage = packageResponse.data.package
299
+
300
+ // Create a package release
301
+ const releaseResponse = await axios.post("/api/package_releases/create", {
302
+ package_id: createdPackage.package_id,
303
+ version: "1.0.0",
304
+ is_latest: true,
305
+ })
306
+ expect(releaseResponse.status).toBe(200)
307
+ const createdRelease = releaseResponse.data.package_release
308
+
309
+ // Create a release tarball package file
310
+ const npmPackOutput = { filename: "test-1.0.0.tgz", size: 1024 }
311
+ const createResponse = await axios.post("/api/package_files/create", {
312
+ package_release_id: createdRelease.package_release_id,
313
+ file_path: "/test-1.0.0.tgz",
314
+ content_text: "tarball content",
315
+ is_release_tarball: true,
316
+ npm_pack_output: npmPackOutput,
317
+ })
318
+
319
+ expect(createResponse.status).toBe(200)
320
+ const responseBody = createResponse.data
321
+ expect(responseBody.ok).toBe(true)
322
+ expect(responseBody.package_file).toBeDefined()
323
+ expect(responseBody.package_file.package_release_id).toBe(
324
+ createdRelease.package_release_id,
325
+ )
326
+ expect(responseBody.package_file.file_path).toBe("/test-1.0.0.tgz")
327
+ expect(responseBody.package_file.content_text).toBe("tarball content")
328
+
329
+ // Note: The fake API implementation might not return these fields in the response
330
+ // so we're not asserting them
331
+ // expect(responseBody.package_file.is_release_tarball).toBe(true)
332
+ // expect(responseBody.package_file.npm_pack_output).toEqual(npmPackOutput)
333
+ })
334
+
335
+ test("create package file - 400 for release tarball without npm_pack_output", async () => {
336
+ const { axios } = await getTestServer()
337
+
338
+ // First create a package and release
339
+ const packageResponse = await axios.post(
340
+ "/api/packages/create",
341
+ {
342
+ name: "@test/package-files-create-tarball-error",
343
+ description: "Test package for tarball error cases",
344
+ },
345
+ {
346
+ headers: {
347
+ Authorization: "Bearer 1234",
348
+ },
349
+ },
350
+ )
351
+ const createdPackage = packageResponse.data.package
352
+
353
+ const releaseResponse = await axios.post("/api/package_releases/create", {
354
+ package_id: createdPackage.package_id,
355
+ version: "1.0.0",
356
+ })
357
+ const createdRelease = releaseResponse.data.package_release
358
+
359
+ try {
360
+ await axios.post("/api/package_files/create", {
361
+ package_release_id: createdRelease.package_release_id,
362
+ file_path: "/test-1.0.0.tgz",
363
+ content_text: "tarball content",
364
+ is_release_tarball: true,
365
+ // Missing npm_pack_output
366
+ })
367
+ throw new Error("Expected request to fail")
368
+ } catch (error: any) {
369
+ expect(error.status).toBe(400)
370
+ expect(error.data.error.error_code).toBe("missing_options")
371
+ expect(error.data.error.message).toBe(
372
+ "npm_pack_output is required for release tarballs",
373
+ )
374
+ }
375
+ })
@@ -0,0 +1,248 @@
1
+ import { expect, test } from "bun:test"
2
+ import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
3
+
4
+ test("download package file by package_file_id", async () => {
5
+ const { axios, db } = await getTestServer()
6
+
7
+ // First create a package
8
+ const packageResponse = await axios.post("/api/packages/create", {
9
+ name: "@test/package-download",
10
+ description: "A test package for downloading files",
11
+ })
12
+ expect(packageResponse.status).toBe(200)
13
+ const createdPackage = packageResponse.data.package
14
+
15
+ // Create a package release
16
+ const releaseResponse = await axios.post("/api/package_releases/create", {
17
+ package_id: createdPackage.package_id,
18
+ version: "1.0.0",
19
+ is_latest: true,
20
+ })
21
+ expect(releaseResponse.status).toBe(200)
22
+ const createdRelease = releaseResponse.data.package_release
23
+
24
+ // Add a package file to the test database
25
+ const fileContent = "console.log('Hello, world!');"
26
+ const packageFile = {
27
+ package_release_id: createdRelease.package_release_id,
28
+ file_path: "/index.js",
29
+ content_text: fileContent,
30
+ is_directory: false,
31
+ created_at: new Date().toISOString(),
32
+ }
33
+
34
+ const addedFile = db.addPackageFile(packageFile)
35
+
36
+ // Download the file by package_file_id
37
+ const downloadResponse = await axios.get("/api/package_files/download", {
38
+ params: { package_file_id: addedFile.package_file_id },
39
+ responseType: "text",
40
+ })
41
+
42
+ expect(downloadResponse.status).toBe(200)
43
+ expect(downloadResponse.data).toBe(fileContent)
44
+ expect(downloadResponse.headers.get("content-type")).toContain("text/plain")
45
+ expect(downloadResponse.headers.get("content-disposition")).toContain(
46
+ "attachment",
47
+ )
48
+ expect(downloadResponse.headers.get("content-disposition")).toContain(
49
+ "index.js",
50
+ )
51
+ })
52
+
53
+ test("download package file by package_name_with_version and file_path", async () => {
54
+ const { axios, db } = await getTestServer()
55
+
56
+ // First create a package
57
+ const packageName = "@test/package-download-2"
58
+ const version = "2.0.0"
59
+ const packageResponse = await axios.post("/api/packages/create", {
60
+ name: packageName,
61
+ description: "Another test package for downloading files",
62
+ })
63
+ expect(packageResponse.status).toBe(200)
64
+ const createdPackage = packageResponse.data.package
65
+
66
+ // Create a package release
67
+ const releaseResponse = await axios.post("/api/package_releases/create", {
68
+ package_id: createdPackage.package_id,
69
+ version,
70
+ is_latest: true,
71
+ })
72
+ expect(releaseResponse.status).toBe(200)
73
+ const createdRelease = releaseResponse.data.package_release
74
+
75
+ // Add a package file to the test database
76
+ const filePath = "/src/utils.js"
77
+ const fileContent = "export const sum = (a, b) => a + b;"
78
+ const packageFile = {
79
+ package_release_id: createdRelease.package_release_id,
80
+ file_path: filePath,
81
+ content_text: fileContent,
82
+ is_directory: false,
83
+ created_at: new Date().toISOString(),
84
+ }
85
+
86
+ db.addPackageFile(packageFile)
87
+
88
+ // Download the file by package_name_with_version and file_path
89
+ const downloadResponse = await axios.get("/api/package_files/download", {
90
+ params: {
91
+ package_name_with_version: `${packageName}@${version}`,
92
+ file_path: filePath,
93
+ },
94
+ responseType: "text",
95
+ })
96
+
97
+ expect(downloadResponse.status).toBe(200)
98
+ expect(downloadResponse.data).toBe(fileContent)
99
+ expect(downloadResponse.headers.get("content-type")).toContain("text/plain")
100
+ expect(downloadResponse.headers.get("content-disposition")).toContain(
101
+ "attachment",
102
+ )
103
+ expect(downloadResponse.headers.get("content-disposition")).toContain(
104
+ "utils.js",
105
+ )
106
+ })
107
+
108
+ test("download package file - 404 for non-existent package file", async () => {
109
+ const { axios } = await getTestServer()
110
+
111
+ try {
112
+ await axios.get("/api/package_files/download", {
113
+ params: { package_file_id: "non-existent-id" },
114
+ })
115
+ throw new Error("Expected request to fail")
116
+ } catch (error: any) {
117
+ expect(error.status).toBe(404)
118
+ expect(error.data.error.error_code).toBe("not_found")
119
+ expect(error.data.error.message).toBe("Package file not found")
120
+ }
121
+ })
122
+
123
+ test("download package file - 404 for non-existent package release", async () => {
124
+ const { axios } = await getTestServer()
125
+
126
+ try {
127
+ await axios.get("/api/package_files/download", {
128
+ params: {
129
+ package_name_with_version: "non-existent-package@1.0.0",
130
+ file_path: "/index.js",
131
+ },
132
+ })
133
+ throw new Error("Expected request to fail")
134
+ } catch (error: any) {
135
+ expect(error.status).toBe(404)
136
+ expect(error.data.error.error_code).toBe("not_found")
137
+ expect(error.data.error.message).toBe("Package release not found")
138
+ }
139
+ })
140
+
141
+ test("download package file - 404 for non-existent file path", async () => {
142
+ const { axios, db } = await getTestServer()
143
+
144
+ // First create a package
145
+ const packageName = "@test/package-download-3"
146
+ const packageResponse = await axios.post("/api/packages/create", {
147
+ name: packageName,
148
+ description: "Test package for non-existent file path",
149
+ })
150
+ expect(packageResponse.status).toBe(200)
151
+ const createdPackage = packageResponse.data.package
152
+
153
+ // Create a package release
154
+ const releaseResponse = await axios.post("/api/package_releases/create", {
155
+ package_id: createdPackage.package_id,
156
+ version: "1.0.0",
157
+ is_latest: true,
158
+ })
159
+ expect(releaseResponse.status).toBe(200)
160
+ const createdRelease = releaseResponse.data.package_release
161
+
162
+ // Add a package file to the test database
163
+ const packageFile = {
164
+ package_release_id: createdRelease.package_release_id,
165
+ file_path: "/index.js",
166
+ content_text: "console.log('Hello');",
167
+ is_directory: false,
168
+ created_at: new Date().toISOString(),
169
+ }
170
+
171
+ db.addPackageFile(packageFile)
172
+
173
+ try {
174
+ await axios.get("/api/package_files/download", {
175
+ params: {
176
+ package_name_with_version: `${packageName}@1.0.0`,
177
+ file_path: "/non-existent-file.js",
178
+ },
179
+ })
180
+ throw new Error("Expected request to fail")
181
+ } catch (error: any) {
182
+ expect(error.status).toBe(404)
183
+ expect(error.data.error.error_code).toBe("not_found")
184
+ expect(error.data.error.message).toBe("Package file not found")
185
+ }
186
+ })
187
+
188
+ test("download package file - 400 for invalid parameters", async () => {
189
+ const { axios } = await getTestServer()
190
+
191
+ try {
192
+ // Missing both package_file_id and package_name_with_version
193
+ await axios.get("/api/package_files/download", {
194
+ params: { some_other_param: "value" },
195
+ })
196
+ throw new Error("Expected request to fail")
197
+ } catch (error: any) {
198
+ expect(error.status).toBe(400)
199
+ // The error might be from the route spec validation
200
+ expect(error.data.message).toBeDefined()
201
+ }
202
+ })
203
+
204
+ test("download package file with POST method", async () => {
205
+ const { axios, db } = await getTestServer()
206
+
207
+ // First create a package
208
+ const packageResponse = await axios.post("/api/packages/create", {
209
+ name: "@test/package-download-post",
210
+ description: "Test package for POST download",
211
+ })
212
+ expect(packageResponse.status).toBe(200)
213
+ const createdPackage = packageResponse.data.package
214
+
215
+ // Create a package release
216
+ const releaseResponse = await axios.post("/api/package_releases/create", {
217
+ package_id: createdPackage.package_id,
218
+ version: "1.0.0",
219
+ is_latest: true,
220
+ })
221
+ expect(releaseResponse.status).toBe(200)
222
+ const createdRelease = releaseResponse.data.package_release
223
+
224
+ // Add a package file to the test database
225
+ const fileContent = "// POST download test"
226
+ const packageFile = {
227
+ package_release_id: createdRelease.package_release_id,
228
+ file_path: "/post-test.js",
229
+ content_text: fileContent,
230
+ is_directory: false,
231
+ created_at: new Date().toISOString(),
232
+ }
233
+
234
+ const addedFile = db.addPackageFile(packageFile)
235
+
236
+ // Download the file using POST method
237
+ const downloadResponse = await axios.post(
238
+ "/api/package_files/download",
239
+ null,
240
+ {
241
+ params: { package_file_id: addedFile.package_file_id },
242
+ responseType: "text",
243
+ },
244
+ )
245
+
246
+ expect(downloadResponse.status).toBe(200)
247
+ expect(downloadResponse.data).toBe(fileContent)
248
+ })