@tscircuit/fake-snippets 0.0.104 → 0.0.106

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.
@@ -185,7 +185,7 @@ async function handleCustomPackageHtml(req, res) {
185
185
  throw new Error("Datasheet route")
186
186
  }
187
187
  if (author === "build" || unscopedPackageName === "view-connected-repo") {
188
- throw new Error("Deployment route - not a package")
188
+ throw new Error("Build route - not a package")
189
189
  }
190
190
 
191
191
  const packageNotFoundHtml = getHtmlWithModifiedSeoTags({
@@ -0,0 +1,294 @@
1
+ import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
2
+ import { test, expect } from "bun:test"
3
+ import defaultAxios from "redaxios"
4
+
5
+ export const createTestPackage = async (axios: typeof defaultAxios) => {
6
+ const packageRes = await axios.post("/api/packages/create", {
7
+ json: {
8
+ name: "test-package",
9
+ description: "Test package for builds",
10
+ },
11
+ })
12
+ return packageRes.data
13
+ }
14
+
15
+ export const createTestPackageRelease = async (
16
+ axios: typeof defaultAxios,
17
+ packageId: string,
18
+ ) => {
19
+ const releaseRes = await axios.post("/api/package_releases/create", {
20
+ package_id: packageId,
21
+ version: "1.0.0",
22
+ is_latest: true,
23
+ })
24
+ return releaseRes.data
25
+ }
26
+
27
+ test("GET /api/package_builds/get - requires package_build_id 69", async () => {
28
+ const { jane_axios } = await getTestServer()
29
+ const res = await jane_axios.get("/api/package_builds/get", {
30
+ validateStatus: () => true,
31
+ })
32
+ expect(res.status).toBe(400)
33
+ })
34
+
35
+ test("GET /api/package_builds/get - returns 404 for non-existent package build", async () => {
36
+ const { jane_axios } = await getTestServer()
37
+ const res = await jane_axios.get(
38
+ "/api/package_builds/get?package_build_id=non-existent-build",
39
+ { validateStatus: () => true },
40
+ )
41
+ expect(res.status).toBe(404)
42
+ expect(res.data.error.error_code).toBe("package_build_not_found")
43
+ expect(res.data.error.message).toBe("Package build not found")
44
+ })
45
+
46
+ test("GET /api/package_builds/get - returns 403 for unauthorized package build access", async () => {
47
+ const { jane_axios, axios, db } = await getTestServer()
48
+ const packageData = await createTestPackage(jane_axios)
49
+ const { package_release } = await createTestPackageRelease(
50
+ jane_axios,
51
+ packageData.package.package_id,
52
+ )
53
+
54
+ const packageBuild = db.addPackageBuild({
55
+ package_release_id: package_release.package_release_id,
56
+ created_at: new Date().toISOString(),
57
+ transpilation_in_progress: false,
58
+ transpilation_started_at: new Date().toISOString(),
59
+ transpilation_completed_at: new Date().toISOString(),
60
+ transpilation_logs: [],
61
+ transpilation_error: null,
62
+ circuit_json_build_in_progress: false,
63
+ circuit_json_build_started_at: new Date().toISOString(),
64
+ circuit_json_build_completed_at: new Date().toISOString(),
65
+ circuit_json_build_logs: [],
66
+ circuit_json_build_error: null,
67
+ build_in_progress: false,
68
+ build_started_at: new Date().toISOString(),
69
+ build_completed_at: new Date().toISOString(),
70
+ build_error: null,
71
+ build_error_last_updated_at: new Date().toISOString(),
72
+ build_logs: null,
73
+ preview_url: "https://preview.tscircuit.com/pb_test",
74
+ branch_name: "main",
75
+ commit_message: "Test build",
76
+ commit_author: "jane.doe",
77
+ })
78
+
79
+ const res = await axios.get(
80
+ `/api/package_builds/get?package_build_id=${packageBuild.package_build_id}`,
81
+ { validateStatus: () => true },
82
+ )
83
+ expect(res.status).toBe(403)
84
+ expect(res.data.error.error_code).toBe("unauthorized")
85
+ })
86
+
87
+ test("GET /api/package_builds/get - successfully returns package build with logs", async () => {
88
+ const { axios, db } = await getTestServer()
89
+ const { package: pkg } = await createTestPackage(axios)
90
+ const { package_release } = await createTestPackageRelease(
91
+ axios,
92
+ pkg.package_id,
93
+ )
94
+
95
+ const buildLogs = ["Started build", "Building components", "Build completed"]
96
+ const transpilationLogs = ["Transpiling files", "Transpilation done"]
97
+ const circuitJsonBuildLogs = ["Generating circuit JSON", "Circuit JSON ready"]
98
+
99
+ const packageBuild = db.addPackageBuild({
100
+ package_release_id: package_release.package_release_id,
101
+ created_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
102
+ transpilation_in_progress: false,
103
+ transpilation_started_at: new Date(
104
+ Date.now() - 1000 * 60 * 35,
105
+ ).toISOString(),
106
+ transpilation_completed_at: new Date(
107
+ Date.now() - 1000 * 60 * 32,
108
+ ).toISOString(),
109
+ transpilation_logs: transpilationLogs,
110
+ transpilation_error: null,
111
+ circuit_json_build_in_progress: false,
112
+ circuit_json_build_started_at: new Date(
113
+ Date.now() - 1000 * 60 * 32,
114
+ ).toISOString(),
115
+ circuit_json_build_completed_at: new Date(
116
+ Date.now() - 1000 * 60 * 30,
117
+ ).toISOString(),
118
+ circuit_json_build_logs: circuitJsonBuildLogs,
119
+ circuit_json_build_error: null,
120
+ build_in_progress: false,
121
+ build_started_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
122
+ build_completed_at: new Date(Date.now() - 1000 * 60 * 25).toISOString(),
123
+ build_error: null,
124
+ build_error_last_updated_at: new Date(
125
+ Date.now() - 1000 * 60 * 25,
126
+ ).toISOString(),
127
+ build_logs: buildLogs.join(" "),
128
+ preview_url: "https://preview.tscircuit.com/pb_1a2b3c4d",
129
+ branch_name: "main",
130
+ commit_message: "Add new LED component with improved brightness control",
131
+ commit_author: "john.doe",
132
+ })
133
+
134
+ const res = await axios.get(
135
+ `/api/package_builds/get?package_build_id=${packageBuild.package_build_id}`,
136
+ )
137
+ expect(res.status).toBe(200)
138
+ expect(res.data.package_build).toBeDefined()
139
+ expect(res.data.package_build.package_build_id).toBe(
140
+ packageBuild.package_build_id,
141
+ )
142
+ expect(res.data.package_build.transpilation_logs).toEqual(transpilationLogs)
143
+ expect(res.data.package_build.circuit_json_build_logs).toEqual(
144
+ circuitJsonBuildLogs,
145
+ )
146
+ expect(res.data.package_build.build_logs).toBe(buildLogs.join(" "))
147
+ })
148
+
149
+ test("GET /api/package_builds/get - returns package build without logs when include_logs is false", async () => {
150
+ const { axios, db } = await getTestServer()
151
+ const { package: pkg } = await createTestPackage(axios)
152
+ const { package_release } = await createTestPackageRelease(
153
+ axios,
154
+ pkg.package_id,
155
+ )
156
+
157
+ const packageBuild = db.addPackageBuild({
158
+ package_release_id: package_release.package_release_id,
159
+ created_at: new Date().toISOString(),
160
+ transpilation_in_progress: false,
161
+ transpilation_started_at: new Date().toISOString(),
162
+ transpilation_completed_at: new Date().toISOString(),
163
+ transpilation_logs: ["Some logs"],
164
+ transpilation_error: null,
165
+ circuit_json_build_in_progress: false,
166
+ circuit_json_build_started_at: new Date().toISOString(),
167
+ circuit_json_build_completed_at: new Date().toISOString(),
168
+ circuit_json_build_logs: ["Some circuit logs"],
169
+ circuit_json_build_error: null,
170
+ build_in_progress: false,
171
+ build_started_at: new Date().toISOString(),
172
+ build_completed_at: new Date().toISOString(),
173
+ build_error: null,
174
+ build_error_last_updated_at: new Date().toISOString(),
175
+ build_logs: "Some build logs",
176
+ preview_url: "https://preview.tscircuit.com/pb_test",
177
+ branch_name: "main",
178
+ commit_message: "Test build",
179
+ commit_author: "john.doe",
180
+ })
181
+
182
+ const res = await axios.get(
183
+ `/api/package_builds/get?package_build_id=${packageBuild.package_build_id}`,
184
+ )
185
+ expect(res.status).toBe(200)
186
+ expect(res.data.package_build).toBeDefined()
187
+ expect(res.data.package_build.package_build_id).toBe(
188
+ packageBuild.package_build_id,
189
+ )
190
+ expect(res.data.package_build.transpilation_logs).toEqual(["Some logs"])
191
+ expect(res.data.package_build.circuit_json_build_logs).toEqual([
192
+ "Some circuit logs",
193
+ ])
194
+ expect(res.data.package_build.build_logs).toBe("Some build logs")
195
+ })
196
+
197
+ test("GET /api/package_builds/get - handles build with errors", async () => {
198
+ const { axios, db } = await getTestServer()
199
+ const { package: pkg } = await createTestPackage(axios)
200
+ const { package_release } = await createTestPackageRelease(
201
+ axios,
202
+ pkg.package_id,
203
+ )
204
+
205
+ const packageBuild = db.addPackageBuild({
206
+ package_release_id: package_release.package_release_id,
207
+ created_at: new Date().toISOString(),
208
+ transpilation_in_progress: false,
209
+ transpilation_started_at: new Date().toISOString(),
210
+ transpilation_completed_at: null,
211
+ transpilation_logs: [],
212
+ transpilation_error: "Transpilation failed: syntax error",
213
+ circuit_json_build_in_progress: false,
214
+ circuit_json_build_started_at: null,
215
+ circuit_json_build_completed_at: null,
216
+ circuit_json_build_logs: [],
217
+ circuit_json_build_error: "Circuit JSON build failed",
218
+ build_in_progress: false,
219
+ build_started_at: new Date().toISOString(),
220
+ build_completed_at: null,
221
+ build_error: "Build failed: compilation error",
222
+ build_error_last_updated_at: new Date().toISOString(),
223
+ build_logs: null,
224
+ preview_url: null,
225
+ branch_name: "feature/new-component",
226
+ commit_message: "Add broken component",
227
+ commit_author: "john.doe",
228
+ })
229
+
230
+ const res = await axios.get(
231
+ `/api/package_builds/get?package_build_id=${packageBuild.package_build_id}`,
232
+ )
233
+ expect(res.status).toBe(200)
234
+ expect(res.data.package_build).toBeDefined()
235
+ expect(res.data.package_build.package_build_id).toBe(
236
+ packageBuild.package_build_id,
237
+ )
238
+ expect(res.data.package_build.transpilation_error).toBe(
239
+ "Transpilation failed: syntax error",
240
+ )
241
+ expect(res.data.package_build.circuit_json_build_error).toBe(
242
+ "Circuit JSON build failed",
243
+ )
244
+ expect(res.data.package_build.build_error).toBe(
245
+ "Build failed: compilation error",
246
+ )
247
+ })
248
+
249
+ test("GET /api/package_builds/get - handles build in progress", async () => {
250
+ const { axios, db } = await getTestServer()
251
+ const { package: pkg } = await createTestPackage(axios)
252
+ const { package_release } = await createTestPackageRelease(
253
+ axios,
254
+ pkg.package_id,
255
+ )
256
+
257
+ const packageBuild = db.addPackageBuild({
258
+ package_release_id: package_release.package_release_id,
259
+ created_at: new Date().toISOString(),
260
+ transpilation_in_progress: true,
261
+ transpilation_started_at: new Date().toISOString(),
262
+ transpilation_completed_at: null,
263
+ transpilation_logs: ["Starting transpilation"],
264
+ transpilation_error: null,
265
+ circuit_json_build_in_progress: false,
266
+ circuit_json_build_started_at: null,
267
+ circuit_json_build_completed_at: null,
268
+ circuit_json_build_logs: [],
269
+ circuit_json_build_error: null,
270
+ build_in_progress: false,
271
+ build_started_at: null,
272
+ build_completed_at: null,
273
+ build_error: null,
274
+ build_error_last_updated_at: new Date().toISOString(),
275
+ build_logs: null,
276
+ preview_url: null,
277
+ branch_name: "main",
278
+ commit_message: "Building in progress",
279
+ commit_author: "john.doe",
280
+ })
281
+
282
+ const res = await axios.get(
283
+ `/api/package_builds/get?package_build_id=${packageBuild.package_build_id}`,
284
+ )
285
+ expect(res.status).toBe(200)
286
+ expect(res.data.package_build).toBeDefined()
287
+ expect(res.data.package_build.package_build_id).toBe(
288
+ packageBuild.package_build_id,
289
+ )
290
+ expect(res.data.package_build.transpilation_in_progress).toBe(true)
291
+ expect(res.data.package_build.transpilation_logs).toEqual([
292
+ "Starting transpilation",
293
+ ])
294
+ })
@@ -0,0 +1,304 @@
1
+ import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
2
+ import { test, expect } from "bun:test"
3
+ import defaultAxios from "redaxios"
4
+
5
+ export const createTestPackage = async (axios: typeof defaultAxios) => {
6
+ const packageRes = await axios.post("/api/packages/create", {
7
+ json: {
8
+ name: "test-package",
9
+ description: "Test package for builds",
10
+ },
11
+ })
12
+ return packageRes.data
13
+ }
14
+
15
+ export const createTestPackageRelease = async (
16
+ axios: typeof defaultAxios,
17
+ packageId: string,
18
+ ) => {
19
+ const releaseRes = await axios.post("/api/package_releases/create", {
20
+ package_id: packageId,
21
+ version: "1.0.0",
22
+ is_latest: true,
23
+ })
24
+ return releaseRes.data
25
+ }
26
+
27
+ test("GET /api/package_builds/list - requires package_id or package_release_id", async () => {
28
+ const { jane_axios } = await getTestServer()
29
+ const res = await jane_axios.get("/api/package_builds/list", {
30
+ validateStatus: () => true,
31
+ })
32
+ expect(res.status).toBe(400)
33
+ })
34
+
35
+ test("GET /api/package_builds/list - filters by package_id", async () => {
36
+ const { jane_axios } = await getTestServer()
37
+ const packageRes = await createTestPackage(jane_axios)
38
+ await createTestPackageRelease(jane_axios, packageRes.package.package_id)
39
+ const res = await jane_axios.get(
40
+ `/api/package_builds/list?package_id=${packageRes.package.package_id}`,
41
+ )
42
+ expect(res.status).toBe(200)
43
+ expect(Array.isArray(res.data.package_builds)).toBe(true)
44
+ })
45
+
46
+ test("GET /api/package_builds/list - filters by package_release_id", async () => {
47
+ const { jane_axios } = await getTestServer()
48
+ const packageRes = await createTestPackage(jane_axios)
49
+ const { package_release } = await createTestPackageRelease(
50
+ jane_axios,
51
+ packageRes.package.package_id,
52
+ )
53
+ const res = await jane_axios.get(
54
+ `/api/package_builds/list?package_release_id=${package_release.package_release_id}`,
55
+ )
56
+ expect(res.status).toBe(200)
57
+ expect(Array.isArray(res.data.package_builds)).toBe(true)
58
+ })
59
+
60
+ test("GET /api/package_builds/list - returns 404 for non-existent package", async () => {
61
+ const { jane_axios } = await getTestServer()
62
+ const res = await jane_axios.get(
63
+ "/api/package_builds/list?package_id=non-existent-package",
64
+ { validateStatus: () => true },
65
+ )
66
+ expect(res.status).toBe(404)
67
+ expect(res.data.error.error_code).toBe("package_not_found")
68
+ })
69
+
70
+ test("GET /api/package_builds/list - returns 404 for non-existent package release", async () => {
71
+ const { jane_axios } = await getTestServer()
72
+ const res = await jane_axios.get(
73
+ "/api/package_builds/list?package_release_id=non-existent-package",
74
+ { validateStatus: () => true },
75
+ )
76
+ expect(res.status).toBe(404)
77
+ expect(res.data.error.error_code).toBe("package_release_not_found")
78
+ })
79
+
80
+ test("GET /api/package_builds/list - returns 403 for unauthorized package access", async () => {
81
+ const { jane_axios, axios } = await getTestServer()
82
+ const packageData = await createTestPackage(jane_axios)
83
+ const res = await axios.get(
84
+ `/api/package_builds/list?package_id=${packageData.package.package_id}`,
85
+ { validateStatus: () => true },
86
+ )
87
+ expect(res.status).toBe(403)
88
+ })
89
+
90
+ test("GET /api/package_builds/list - returns created builds", async () => {
91
+ const { axios, db } = await getTestServer()
92
+ const { package: pkg } = await createTestPackage(axios)
93
+ const { package_release } = await createTestPackageRelease(
94
+ axios,
95
+ pkg.package_id,
96
+ )
97
+
98
+ db.addPackageBuild({
99
+ package_release_id: package_release.package_release_id,
100
+ created_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
101
+ transpilation_in_progress: false,
102
+ transpilation_started_at: new Date(
103
+ Date.now() - 1000 * 60 * 35,
104
+ ).toISOString(),
105
+ transpilation_completed_at: new Date(
106
+ Date.now() - 1000 * 60 * 32,
107
+ ).toISOString(),
108
+ transpilation_logs: [],
109
+ transpilation_error: null,
110
+ circuit_json_build_in_progress: false,
111
+ circuit_json_build_started_at: new Date(
112
+ Date.now() - 1000 * 60 * 32,
113
+ ).toISOString(),
114
+ circuit_json_build_completed_at: new Date(
115
+ Date.now() - 1000 * 60 * 30,
116
+ ).toISOString(),
117
+ circuit_json_build_logs: [],
118
+ circuit_json_build_error: null,
119
+ build_in_progress: false,
120
+ build_started_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
121
+ build_completed_at: new Date(Date.now() - 1000 * 60 * 25).toISOString(),
122
+ build_error: null,
123
+ build_error_last_updated_at: new Date(
124
+ Date.now() - 1000 * 60 * 25,
125
+ ).toISOString(),
126
+ build_logs: null,
127
+ preview_url: "https://preview.tscircuit.com/pb_1a2b3c4d",
128
+ branch_name: "main",
129
+ commit_message: "Add new LED component with improved brightness control",
130
+ commit_author: "john.doe",
131
+ })
132
+
133
+ const res = await axios.get(
134
+ `/api/package_builds/list?package_id=${pkg.package_id}`,
135
+ )
136
+ expect(res.status).toBe(200)
137
+ expect(res.data.package_builds.length).toBe(1)
138
+ })
139
+
140
+ test("GET /api/package_builds/list - sorts builds by created_at descending", async () => {
141
+ const { axios, db } = await getTestServer()
142
+ const { package: pkg } = await createTestPackage(axios)
143
+ const { package_release } = await createTestPackageRelease(
144
+ axios,
145
+ pkg.package_id,
146
+ )
147
+
148
+ db.addPackageBuild({
149
+ package_release_id: package_release.package_release_id,
150
+ created_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
151
+ transpilation_in_progress: false,
152
+ transpilation_started_at: new Date(
153
+ Date.now() - 1000 * 60 * 35,
154
+ ).toISOString(),
155
+ transpilation_completed_at: new Date(
156
+ Date.now() - 1000 * 60 * 32,
157
+ ).toISOString(),
158
+ transpilation_logs: [],
159
+ transpilation_error: null,
160
+ circuit_json_build_in_progress: false,
161
+ circuit_json_build_started_at: new Date(
162
+ Date.now() - 1000 * 60 * 32,
163
+ ).toISOString(),
164
+ circuit_json_build_completed_at: new Date(
165
+ Date.now() - 1000 * 60 * 30,
166
+ ).toISOString(),
167
+ circuit_json_build_logs: [],
168
+ circuit_json_build_error: null,
169
+ build_in_progress: false,
170
+ build_started_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
171
+ build_completed_at: new Date(Date.now() - 1000 * 60 * 25).toISOString(),
172
+ build_error: null,
173
+ build_error_last_updated_at: new Date(
174
+ Date.now() - 1000 * 60 * 25,
175
+ ).toISOString(),
176
+ build_logs: null,
177
+ preview_url: "https://preview.tscircuit.com/pb_1",
178
+ branch_name: "main",
179
+ commit_message: "First build",
180
+ commit_author: "john.doe",
181
+ })
182
+
183
+ db.addPackageBuild({
184
+ package_release_id: package_release.package_release_id,
185
+ created_at: new Date(Date.now() - 1000 * 60 * 15).toISOString(),
186
+ transpilation_in_progress: false,
187
+ transpilation_started_at: new Date(
188
+ Date.now() - 1000 * 60 * 20,
189
+ ).toISOString(),
190
+ transpilation_completed_at: new Date(
191
+ Date.now() - 1000 * 60 * 17,
192
+ ).toISOString(),
193
+ transpilation_logs: [],
194
+ transpilation_error: null,
195
+ circuit_json_build_in_progress: false,
196
+ circuit_json_build_started_at: new Date(
197
+ Date.now() - 1000 * 60 * 17,
198
+ ).toISOString(),
199
+ circuit_json_build_completed_at: new Date(
200
+ Date.now() - 1000 * 60 * 15,
201
+ ).toISOString(),
202
+ circuit_json_build_logs: [],
203
+ circuit_json_build_error: null,
204
+ build_in_progress: false,
205
+ build_started_at: new Date(Date.now() - 1000 * 60 * 15).toISOString(),
206
+ build_completed_at: new Date(Date.now() - 1000 * 60 * 10).toISOString(),
207
+ build_error: null,
208
+ build_error_last_updated_at: new Date(
209
+ Date.now() - 1000 * 60 * 10,
210
+ ).toISOString(),
211
+ build_logs: null,
212
+ preview_url: "https://preview.tscircuit.com/pb_2",
213
+ branch_name: "main",
214
+ commit_message: "Second build",
215
+ commit_author: "john.doe",
216
+ })
217
+
218
+ const res = await axios.get(
219
+ `/api/package_builds/list?package_id=${pkg.package_id}`,
220
+ )
221
+ expect(res.status).toBe(200)
222
+ expect(Array.isArray(res.data.package_builds)).toBe(true)
223
+ expect(res.data.package_builds.length).toBe(2)
224
+
225
+ const builds = res.data.package_builds
226
+ for (let i = 1; i < builds.length; i++) {
227
+ const prevBuild = new Date(builds[i - 1].created_at)
228
+ const currentBuild = new Date(builds[i].created_at)
229
+ expect(prevBuild.getTime()).toBeGreaterThanOrEqual(currentBuild.getTime())
230
+ }
231
+ })
232
+
233
+ test("GET /api/package_builds/list - handles both package_id and package_release_id (package_release_id takes precedence)", async () => {
234
+ const { jane_axios } = await getTestServer()
235
+ const packageRes = await createTestPackage(jane_axios)
236
+ const { package_release } = await createTestPackageRelease(
237
+ jane_axios,
238
+ packageRes.package.package_id,
239
+ )
240
+ const res = await jane_axios.get(
241
+ `/api/package_builds/list?package_id=${packageRes.package.package_id}&package_release_id=${package_release.package_release_id}`,
242
+ )
243
+ expect(res.status).toBe(200)
244
+ expect(Array.isArray(res.data.package_builds)).toBe(true)
245
+ })
246
+
247
+ test("GET /api/package_builds/list - returns created builds with logs or not", async () => {
248
+ const { axios, db } = await getTestServer()
249
+ const { package: pkg } = await createTestPackage(axios)
250
+ const { package_release } = await createTestPackageRelease(
251
+ axios,
252
+ pkg.package_id,
253
+ )
254
+
255
+ const buildLogs = ["Started build", "Building components", "Build completed"]
256
+ const transpilationLogs = ["Transpiling files", "Transpilation done"]
257
+ const circuitJsonBuildLogs = ["Generating circuit JSON", "Circuit JSON ready"]
258
+
259
+ await db.addPackageBuild({
260
+ package_release_id: package_release.package_release_id,
261
+ created_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
262
+ transpilation_in_progress: false,
263
+ transpilation_started_at: new Date(
264
+ Date.now() - 1000 * 60 * 35,
265
+ ).toISOString(),
266
+ transpilation_completed_at: new Date(
267
+ Date.now() - 1000 * 60 * 32,
268
+ ).toISOString(),
269
+ transpilation_logs: transpilationLogs,
270
+ transpilation_error: null,
271
+ circuit_json_build_in_progress: false,
272
+ circuit_json_build_started_at: new Date(
273
+ Date.now() - 1000 * 60 * 32,
274
+ ).toISOString(),
275
+ circuit_json_build_completed_at: new Date(
276
+ Date.now() - 1000 * 60 * 30,
277
+ ).toISOString(),
278
+ circuit_json_build_logs: circuitJsonBuildLogs,
279
+ circuit_json_build_error: null,
280
+ build_in_progress: false,
281
+ build_started_at: new Date(Date.now() - 1000 * 60 * 30).toISOString(),
282
+ build_completed_at: new Date(Date.now() - 1000 * 60 * 25).toISOString(),
283
+ build_error: null,
284
+ build_error_last_updated_at: new Date(
285
+ Date.now() - 1000 * 60 * 25,
286
+ ).toISOString(),
287
+ build_logs: buildLogs.join(" "),
288
+ preview_url: "https://preview.tscircuit.com/pb_1a2b3c4d",
289
+ branch_name: "main",
290
+ commit_message: "Add new LED component with improved brightness control",
291
+ commit_author: "john.doe",
292
+ })
293
+
294
+ const resWithoutLogs = await axios.get(
295
+ `/api/package_builds/list?package_id=${pkg.package_id}`,
296
+ )
297
+ expect(resWithoutLogs.status).toBe(200)
298
+ expect(resWithoutLogs.data.package_builds.length).toBe(1)
299
+ expect(resWithoutLogs.data.package_builds[0].build_logs).toBeNull()
300
+ expect(resWithoutLogs.data.package_builds[0].transpilation_logs).toEqual([])
301
+ expect(resWithoutLogs.data.package_builds[0].circuit_json_build_logs).toEqual(
302
+ [],
303
+ )
304
+ })