Skip to content

Commit c585a14

Browse files
committed
network query failures
Add unit tests for /query to cover upstream and network failure handling: (1) preserves upstream error text when fetch returns non-ok (503), (2) falls back to a generic RERUM error message when upstream .text() throws, and (3) maps rejected fetch (e.g., socket hang up) to a 502 response. Tests mock global.fetch and assert statusCode 502 and expected response text.
1 parent 4fa7521 commit c585a14

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

test/routes/query.test.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,56 @@ describe("Check that incorrect TinyNode query route usage results in expected RE
115115
})
116116
})
117117

118+
describe("Query upstream and network failure behavior. __rest __core", () => {
119+
it("Preserves upstream text error message when query returns non-ok.", async () => {
120+
global.fetch = async () => ({
121+
ok: false,
122+
status: 503,
123+
text: async () => "Upstream query failure"
124+
})
125+
126+
const response = await request(routeTester)
127+
.post("/query")
128+
.set("Content-Type", "application/json")
129+
.send({ test: "item" })
130+
131+
assert.equal(response.statusCode, 502)
132+
assert.match(response.text, /Upstream query failure/)
133+
})
134+
135+
it("Falls back to generic RERUM error text when upstream .text() throws.", async () => {
136+
global.fetch = async () => ({
137+
ok: false,
138+
status: 500,
139+
text: async () => {
140+
throw new Error("text stream consumed")
141+
}
142+
})
143+
144+
const response = await request(routeTester)
145+
.post("/query")
146+
.set("Content-Type", "application/json")
147+
.send({ test: "item" })
148+
149+
assert.equal(response.statusCode, 502)
150+
assert.match(response.text, /A RERUM error occurred/)
151+
})
152+
153+
it("Maps rejected fetch to 502.", async () => {
154+
global.fetch = async () => {
155+
throw new Error("socket hang up")
156+
}
157+
158+
const response = await request(routeTester)
159+
.post("/query")
160+
.set("Content-Type", "application/json")
161+
.send({ test: "item" })
162+
163+
assert.equal(response.statusCode, 502)
164+
assert.match(response.text, /A RERUM error occurred/)
165+
})
166+
})
167+
118168
describe("Check that the properly used query endpoints function and interact with RERUM. __e2e", () => {
119169
it("'/query' route can save an object to RERUM.", async () => {
120170
const response = await request(routeTester)

0 commit comments

Comments
 (0)