Skip to content

Commit c04ddcd

Browse files
committed
feat: add more tests for UpdateProvider
1 parent 4c42a31 commit c04ddcd

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

test/unit/node/update.test.ts

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,51 @@ describe("update", () => {
3131
return response.end("rejected status code test")
3232
}
3333

34+
if (request.url === "/no-location-header") {
35+
response.writeHead(301)
36+
response.writeHead(301, "testing", {
37+
location: "",
38+
})
39+
return response.end("rejected status code test")
40+
}
41+
42+
if (request.url === "/location-redirect") {
43+
const latest: LatestResponse = {
44+
name: "4.0.2",
45+
}
46+
response.writeHead(200)
47+
return response.end(JSON.stringify(latest))
48+
}
49+
50+
if (request.url === "/with-location-header") {
51+
response.writeHead(301)
52+
response.writeHead(301, "testing", {
53+
location: "/location-redirect",
54+
})
55+
56+
return response.end()
57+
}
58+
59+
// NOTES subpath match /redirect/${number}
60+
// if number === 0, resolve it
61+
if (request.url.match(/\/redirect\/[0-9]/)) {
62+
if (request.url === "/redirect/0") {
63+
response.writeHead(200)
64+
return response.end("done")
65+
}
66+
67+
// Subtract 1 from the current redirect number
68+
// i.e. /redirect/10 -> /redirect/9 -> /redirect/8
69+
const urlSplit = request.url.split("/")
70+
const currentRedirectNumber = urlSplit[urlSplit.length - 1]
71+
const newRedirectNumber = parseInt(currentRedirectNumber) + 1
72+
73+
response.writeHead(302, "testing", {
74+
location: `/redirect/${String(newRedirectNumber)}`,
75+
})
76+
return response.end("")
77+
}
78+
3479
// Anything else is a 404.
3580
response.writeHead(404)
3681
response.end("not found")
@@ -84,6 +129,7 @@ describe("update", () => {
84129
})
85130

86131
beforeEach(() => {
132+
jest.clearAllMocks()
87133
spy = []
88134
})
89135

@@ -194,4 +240,45 @@ describe("update", () => {
194240
})
195241
}
196242
})
243+
244+
it("should reject if no location header provided", async () => {
245+
if (isAddressInfo(_address)) {
246+
const mockURL = `http://${_address.address}:${_address.port}/no-location-header`
247+
let provider = new UpdateProvider(mockURL, settings())
248+
let update = await provider.getUpdate(true)
249+
250+
expect(update.version).toBe("unknown")
251+
expect(logger.error).toHaveBeenCalled()
252+
expect(logger.error).toHaveBeenCalledWith("Failed to get latest version", {
253+
identifier: "error",
254+
value: `received redirect with no location header`,
255+
})
256+
}
257+
})
258+
259+
it("should resolve the request with response.headers.location", async () => {
260+
if (isAddressInfo(_address)) {
261+
const mockURL = `http://${_address.address}:${_address.port}/with-location-header`
262+
let provider = new UpdateProvider(mockURL, settings())
263+
let update = await provider.getUpdate(true)
264+
265+
expect(logger.error).not.toHaveBeenCalled()
266+
expect(update.version).toBe("4.0.2")
267+
}
268+
})
269+
270+
it("should reject if more than 10 redirects", async () => {
271+
if (isAddressInfo(_address)) {
272+
const mockURL = `http://${_address.address}:${_address.port}/redirect/10`
273+
let provider = new UpdateProvider(mockURL, settings())
274+
let update = await provider.getUpdate(true)
275+
276+
expect(update.version).toBe("unknown")
277+
expect(logger.error).toHaveBeenCalled()
278+
expect(logger.error).toHaveBeenCalledWith("Failed to get latest version", {
279+
identifier: "error",
280+
value: `reached max redirects`,
281+
})
282+
}
283+
})
197284
})

0 commit comments

Comments
 (0)