Skip to content

Commit 0cd0d24

Browse files
authored
Match the fake with prod version (#1115)
* Match the fake with prod version * format
1 parent 227e8b0 commit 0cd0d24

3 files changed

Lines changed: 55 additions & 101 deletions

File tree

Lines changed: 20 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,33 @@
11
import { getTestServer } from "bun-tests/fake-snippets-api/fixtures/get-test-server"
22
import { test, expect } from "bun:test"
33

4-
test("create order_quote with only circuit_json (✅)", async () => {
5-
const {
6-
axios,
7-
seed: { order },
8-
} = await getTestServer()
9-
10-
const response = await axios.post("/api/order_quotes/create", {
11-
vendor_name: "jlcpcb",
12-
circuit_json: order.circuit_json,
13-
})
4+
test("create order_quote with only package_release_id (✅)", async () => {
5+
const { axios, jane_axios } = await getTestServer()
146

15-
expect(response.status).toBe(200)
16-
expect(response.data.order_quote_id).toBeDefined()
17-
})
7+
const pkg = await jane_axios
8+
.post("/api/packages/create", {
9+
name: "jane/test-package",
10+
})
11+
.then((res) => res.data.package)
1812

19-
test("create order_quote with only package_release_id (✅)", async () => {
20-
const {
21-
axios,
22-
seed: { packageRelease },
23-
} = await getTestServer()
13+
const packageRelease = await jane_axios
14+
.post("/api/package_releases/create", {
15+
package_id: pkg.package_id,
16+
version: "1.0.0",
17+
is_latest: true,
18+
})
19+
.then((res) => res.data.package_release)
2420

21+
await jane_axios.post(`/api/package_files/create`, {
22+
package_release_id: packageRelease.package_release_id,
23+
file_path: "/dist/index.js",
24+
content_text: "console.log('Hello, world!');",
25+
})
2526
const response = await axios.post("/api/order_quotes/create", {
2627
vendor_name: "jlcpcb",
27-
package_release_id: packageRelease!.package_release_id,
28+
package_release_id: packageRelease.package_release_id,
2829
})
2930

3031
expect(response.status).toBe(200)
3132
expect(response.data.order_quote_id).toBeDefined()
3233
})
33-
34-
test("create order_quote with both circuit_json and package_release_id (✅)", async () => {
35-
const {
36-
axios,
37-
seed: { order, packageRelease },
38-
} = await getTestServer()
39-
40-
const response = await axios
41-
.post("/api/order_quotes/create", {
42-
vendor_name: "jlcpcb",
43-
circuit_json: order.circuit_json,
44-
package_release_id: packageRelease!.package_release_id,
45-
})
46-
.catch((error) => error) // Capture response even on error
47-
48-
// Expecting backend to fail with 400
49-
expect(response?.status).toBe(400)
50-
expect(response?.data.message).toContain(
51-
"You must provide either circuit_json or package_release_id, but not both.",
52-
)
53-
})
54-
55-
test("create order_quote with neither circuit_json nor package_release_id (✅)", async () => {
56-
const { axios } = await getTestServer()
57-
58-
const response = await axios
59-
.post("/api/order_quotes/create", {
60-
vendor_name: "jlcpcb",
61-
})
62-
.catch((error) => error) // Capture response even on error
63-
64-
// Expecting backend to fail with 400
65-
expect(response?.status).toBe(400)
66-
expect(response?.data.message).toContain(
67-
"You must provide either circuit_json or package_release_id.",
68-
)
69-
})

fake-snippets-api/routes/api/order_quotes/create.ts

Lines changed: 30 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,10 @@ import { z } from "zod"
44
export default withRouteSpec({
55
methods: ["POST"],
66
auth: "session",
7-
jsonBody: z
8-
.object({
9-
package_release_id: z.string().optional(),
10-
circuit_json: z.any().optional(),
11-
vendor_name: z.string(),
12-
})
13-
.superRefine((data, ctx) => {
14-
if (data.circuit_json && data.package_release_id) {
15-
ctx.addIssue({
16-
code: z.ZodIssueCode.custom,
17-
message:
18-
"You must provide either circuit_json or package_release_id, but not both.",
19-
})
20-
}
21-
if (!data.circuit_json && !data.package_release_id) {
22-
ctx.addIssue({
23-
code: z.ZodIssueCode.custom,
24-
message:
25-
"You must provide either circuit_json or package_release_id.",
26-
})
27-
}
28-
}),
29-
7+
jsonBody: z.object({
8+
package_release_id: z.string(),
9+
vendor_name: z.literal("jlcpcb"),
10+
}),
3011
jsonResponse: z.object({
3112
order_quote_id: z.string().optional(),
3213
error: z
@@ -37,22 +18,34 @@ export default withRouteSpec({
3718
.optional(),
3819
}),
3920
})(async (req, ctx) => {
40-
const { package_release_id, vendor_name, circuit_json } = req.jsonBody
21+
const { package_release_id, vendor_name } = req.jsonBody
22+
23+
// check package release exists
24+
const packageRelease = ctx.db.getPackageReleaseById(package_release_id)
25+
if (!packageRelease) {
26+
return ctx.json(
27+
{
28+
error: {
29+
error_code: "package_release_not_found",
30+
message: "Package release not found",
31+
},
32+
},
33+
{ status: 404 },
34+
)
35+
}
4136

42-
if (package_release_id) {
43-
// check package release exists
44-
const packageRelease = ctx.db.getPackageReleaseById(package_release_id)
45-
if (!packageRelease) {
46-
return ctx.json(
47-
{
48-
error: {
49-
error_code: "package_release_not_found",
50-
message: "Package release not found",
51-
},
37+
const packageReleaseFiles =
38+
ctx.db.getPackageFilesByReleaseId(package_release_id)
39+
if (packageReleaseFiles.length === 0) {
40+
return ctx.json(
41+
{
42+
error: {
43+
error_code: "package_release_files_not_found",
44+
message: "Package release files not found",
5245
},
53-
{ status: 404 },
54-
)
55-
}
46+
},
47+
{ status: 404 },
48+
)
5649
}
5750

5851
const orderQuoteId = ctx.db.addOrderQuote({

fake-snippets-api/routes/api/order_quotes/get.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,18 @@ export default withRouteSpec({
99
order_quote_id: z.string(),
1010
}),
1111
jsonResponse: z.object({
12-
order_quote: orderQuoteSchema.optional(),
13-
error: z.string().optional(),
12+
order_quote: orderQuoteSchema,
1413
}),
1514
})(async (req, ctx) => {
1615
const { order_quote_id } = req.commonParams
1716

1817
const orderQuote = ctx.db.getOrderQuoteById(order_quote_id)
1918

2019
if (!orderQuote) {
21-
return ctx.json(
22-
{
23-
error: "Order quote not found",
24-
},
25-
{ status: 404 },
26-
)
20+
return ctx.error(404, {
21+
error_code: "order_quote_not_found",
22+
message: "Order quote not found",
23+
})
2724
}
2825

2926
return ctx.json({

0 commit comments

Comments
 (0)