Skip to content

Commit 16a2a61

Browse files
committed
feat: set request url from HttpContextFactory by specifying route info
1 parent 72372a9 commit 16a2a61

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

factories/http_context.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,19 @@ import { HttpResponseFactory } from './response.ts'
1616
import type { HttpRequest } from '../src/request.ts'
1717
import type { HttpResponse } from '../src/response.ts'
1818
import { HttpContext } from '../src/http_context/main.ts'
19+
import { createURL, parseRoute } from '../src/helpers.ts'
20+
import { QsParserFactory } from './qs_parser_factory.ts'
1921

2022
type FactoryParameters = {
2123
request: HttpRequest
2224
response: HttpResponse
2325
logger: Logger
26+
url?: string
27+
method?: string
28+
route?: {
29+
pattern: string
30+
params: Record<string, any>
31+
}
2432
}
2533

2634
/**
@@ -37,7 +45,21 @@ export class HttpContextFactory {
3745
* Returns the request class instance
3846
*/
3947
#createRequest() {
40-
return this.#parameters.request || new HttpRequestFactory().create()
48+
if (this.#parameters.request) {
49+
return this.#parameters.request
50+
}
51+
52+
let { url, method, route } = this.#parameters
53+
if (route) {
54+
url = createURL(
55+
route.pattern,
56+
parseRoute(route.pattern),
57+
new QsParserFactory().create().stringify,
58+
route.params
59+
)
60+
}
61+
62+
return new HttpRequestFactory().merge({ url, method }).create()
4163
}
4264

4365
/**

tests/request.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1573,4 +1573,24 @@ test.group('Verify signed url', () => {
15731573
hasValidSignature: false,
15741574
})
15751575
})
1576+
1577+
test('return request url set during factory creation', async ({ assert }) => {
1578+
const request = new HttpRequestFactory().merge({ url: '/packages' }).create()
1579+
assert.equal(request.url(), '/packages')
1580+
assert.equal(request.request.url, '/packages')
1581+
})
1582+
1583+
test('define request url from route', async ({ assert }) => {
1584+
const ctx = new HttpContextFactory()
1585+
.merge({
1586+
route: {
1587+
pattern: '/packages/:category',
1588+
params: { category: 'auth' },
1589+
},
1590+
})
1591+
.create()
1592+
1593+
assert.equal(ctx.request.url(), '/packages/auth')
1594+
assert.equal(ctx.request.request.url, '/packages/auth')
1595+
})
15761596
})

0 commit comments

Comments
 (0)