Skip to content

Commit 643b089

Browse files
authored
feat: add web test suite (#57)
- Implement a comprehensive web application for testing in `tests/web`, including dynamic (`[id]`) and catch-all (`[...ids]`) routing. - Add runtime-specific start scripts (`.lune/start.luau`, `.lute/start.luau`, `.zune/start.luau`) to automate `.luaurc` configuration and project execution. - Enhance `Response.json` type definition in `src/types.luau` to be generic for improved type safety. - Enable pretty-printing for JSON serialization in the Zune runtime adapter. - Update root `.luaurc` with workspace aliases to support the new test structure.
1 parent 2616564 commit 643b089

13 files changed

Lines changed: 146 additions & 9 deletions

File tree

.luaurc

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
{
2-
"languageMode": "strict",
2+
"languageMode": "strict",
33
"globals": [
44
"warn"
5-
],
5+
],
66
"aliases": {
7-
"std": "~/.lute/typedefs/1.0.0/std",
8-
"lint": "~/.lute/typedefs/1.0.0/lint",
9-
"lune": "~/.lune/.typedefs/0.10.4/",
10-
"lute": "~/.lute/typedefs/1.0.0/lute",
117
"src": "./src/",
12-
"test-runner": "./tests/runner"
8+
"c": "/home/wiz/projects/nova-projects/nova/tests/web/",
9+
"lint": "~/.lute/typedefs/1.0.0/lint",
10+
"test-runner": "./tests/runner",
11+
"std": "~/.lute/typedefs/1.0.0/std",
12+
"lune": "~/.lune/.typedefs/0.10.4/",
13+
"lute": "~/.lute/typedefs/1.0.0/lute"
1314
}
1415
}

.lune/start.luau

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
local process = require("@lune/process")
2+
local serde = require("../src/libs/serde")
3+
local fs = require("../src/libs/fs")
4+
5+
local luaurcPath = process.cwd .. ".luaurc"
6+
local luaurcjson = fs.readFile(luaurcPath)
7+
local decode = serde.decode("json", luaurcjson)
8+
9+
if not decode.aliases then
10+
decode.aliases = {}
11+
end
12+
13+
local newCAlias = process.cwd .. "tests/web/"
14+
15+
if not (newCAlias == decode.aliases.c) then
16+
decode.aliases.c = newCAlias
17+
end
18+
19+
local encode = serde.encode("json", decode, true)
20+
fs.writeFile(luaurcPath, encode)
21+
22+
process.exec("lune", { "run", "src/main" }, { stdio = "inherit", cwd = "tests/web" })

.lute/start.luau

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
local process = require("@lute/process")
2+
local serde = require("../src/libs/serde")
3+
local fs = require("../src/libs/fs")
4+
5+
local luaurcPath = process.cwd() .. "/.luaurc"
6+
local luaurcjson = fs.readFile(luaurcPath)
7+
local decode = serde.decode("json", luaurcjson)
8+
9+
if not decode.aliases then
10+
decode.aliases = {}
11+
end
12+
13+
local newCAlias = process.cwd() .. "/tests/web/"
14+
15+
if not (newCAlias == decode.aliases.c) then
16+
decode.aliases.c = newCAlias
17+
end
18+
19+
local encode = serde.encode("json", decode, true)
20+
fs.writeFile(luaurcPath, encode)
21+
22+
process.run({ "lute", "run", "src/main" }, { stdio = "inherit", cwd = "tests/web" })

.zune/start.luau

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
local process = zune.process
2+
local serde = require("../src/libs/serde")
3+
local fs = require("../src/libs/fs")
4+
5+
local luaurcPath = process.cwd() .. "/.luaurc"
6+
local luaurcjson = fs.readFile(luaurcPath)
7+
local decode = serde.decode("json", luaurcjson)
8+
9+
if not decode.aliases then
10+
decode.aliases = {}
11+
end
12+
13+
local newCAlias = process.cwd() .. "/tests/web/"
14+
15+
if not (newCAlias == decode.aliases.c) then
16+
decode.aliases.c = newCAlias
17+
end
18+
19+
local encode = serde.encode("json", decode, true)
20+
fs.writeFile(luaurcPath, encode)
21+
22+
23+
process.run("zune", { "run", "src/main" }, { stderr = "inherit", stdout = "inherit", cwd = "tests/web" })

src/libs/serde/zune.luau

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ function LuneSerde.encode(format, value, pretty)
3232
error(`Unsupported format: "{format}"`)
3333
end
3434

35-
return encoder(value)
35+
return encoder(value, { pretty_indent = 2 })
3636
end
3737

3838
return LuneSerde

src/types.luau

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export type Response = {
4747
--[[
4848
Respond with a json
4949
]]
50-
json: (body: {any}, config: ResponseOptions?) -> ResponsePayload,
50+
json: <T>(body: T, config: ResponseOptions?) -> ResponsePayload,
5151

5252
--[[
5353
Respond with an html

tests/web/.luaurc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"aliases": {
3+
"std": "~/.lute/typedefs/1.0.0/std",
4+
"c": "/home/wiz/projects/nova-projects/nova/tests/web/",
5+
"lint": "~/.lute/typedefs/1.0.0/lint",
6+
"nova": "../../src/index",
7+
"lune": "~/.lune/.typedefs/0.10.4/",
8+
"pkg": "./lune_packages/",
9+
"lute": "~/.lute/typedefs/1.0.0/lute"
10+
}
11+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
local Nova = require("@nova")
2+
3+
local Home = {}
4+
5+
function Home.Get(req: Nova.RequestWith<{ ids: { string } }>)
6+
local userIds = req.params.ids
7+
return Nova.response.json({ userIds = userIds, msg = "Found user IDs" })
8+
end
9+
10+
return Home

tests/web/src/app/[id]/route.luau

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
local Nova = require("@nova")
2+
3+
local Home = {}
4+
5+
function Home.Get(banana: Nova.RequestWith<{ id: string }>)
6+
local userId = banana.params.id
7+
return Nova.response.json({ userId = userId, msg = "Found a user ID" })
8+
end
9+
10+
return Home

tests/web/src/app/route.luau

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
local Nova = require("@nova")
2+
3+
local Home = {}
4+
5+
function Home.Get()
6+
return Nova.response.json("Hello, World")
7+
end
8+
9+
return Home

0 commit comments

Comments
 (0)