config: tsx,packages,icons (6 files)

This commit is contained in:
Richard Ward
2025-12-30 14:14:52 +00:00
parent 2f1ea1427a
commit 3f654ef2a6
6 changed files with 298 additions and 53 deletions

View File

@@ -0,0 +1,159 @@
{
"calculate": [
{
"desc": "First page of many",
"total": 100,
"page": 1,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": false,
"expected_has_next": true
},
{
"desc": "Middle page",
"total": 100,
"page": 5,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": true,
"expected_has_next": true
},
{
"desc": "Last page",
"total": 100,
"page": 10,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": true,
"expected_has_next": false
},
{
"desc": "Single page",
"total": 5,
"page": 1,
"per_page": 10,
"expected_pages": 1,
"expected_has_prev": false,
"expected_has_next": false
},
{
"desc": "Partial last page",
"total": 95,
"page": 10,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": true,
"expected_has_next": false
},
{
"desc": "Large dataset first page",
"total": 1000,
"page": 1,
"per_page": 25,
"expected_pages": 40,
"expected_has_prev": false,
"expected_has_next": true
},
{
"desc": "Large dataset middle page",
"total": 1000,
"page": 20,
"per_page": 25,
"expected_pages": 40,
"expected_has_prev": true,
"expected_has_next": true
},
{
"desc": "Large dataset last page",
"total": 1000,
"page": 40,
"per_page": 25,
"expected_pages": 40,
"expected_has_prev": true,
"expected_has_next": false
},
{
"desc": "Small per_page value",
"total": 50,
"page": 3,
"per_page": 5,
"expected_pages": 10,
"expected_has_prev": true,
"expected_has_next": true
},
{
"desc": "Large per_page value",
"total": 50,
"page": 1,
"per_page": 100,
"expected_pages": 1,
"expected_has_prev": false,
"expected_has_next": false
},
{
"desc": "Odd total with even per_page",
"total": 99,
"page": 1,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": false,
"expected_has_next": true
},
{
"desc": "Even total with odd per_page",
"total": 100,
"page": 1,
"per_page": 7,
"expected_pages": 15,
"expected_has_prev": false,
"expected_has_next": true
},
{
"desc": "Second page of two",
"total": 15,
"page": 2,
"per_page": 10,
"expected_pages": 2,
"expected_has_prev": true,
"expected_has_next": false
}
],
"render": [
{
"desc": "Renders first page",
"total": 100,
"page": 1,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": false,
"expected_has_next": true
},
{
"desc": "Renders middle page",
"total": 100,
"page": 5,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": true,
"expected_has_next": true
},
{
"desc": "Renders last page",
"total": 100,
"page": 10,
"per_page": 10,
"expected_pages": 10,
"expected_has_prev": true,
"expected_has_next": false
},
{
"desc": "Renders single page",
"total": 5,
"page": 1,
"per_page": 10,
"expected_pages": 1,
"expected_has_prev": false,
"expected_has_next": false
}
]
}

View File

@@ -0,0 +1,56 @@
-- Pagination tests
-- Uses lua_test framework with parameterized test cases
describe("Pagination", function()
local cases = load_cases("pagination.cases.json")
local pagination = require("pagination")
describe("calculate", function()
it_each(cases.calculate, "$desc", function(tc)
local result = pagination.calculate(tc.total, tc.page, tc.per_page)
expect(result.total).toBe(tc.total)
expect(result.page).toBe(tc.page)
expect(result.per_page).toBe(tc.per_page)
expect(result.pages).toBe(tc.expected_pages)
expect(result.has_prev).toBe(tc.expected_has_prev)
expect(result.has_next).toBe(tc.expected_has_next)
end)
end)
describe("render", function()
it_each(cases.render, "$desc", function(tc)
local state = pagination.calculate(tc.total, tc.page, tc.per_page)
local result = pagination.render(state)
expect(result.type).toBe("pagination")
expect(result.props.current).toBe(tc.page)
expect(result.props.total).toBe(tc.expected_pages)
expect(result.props.show_prev).toBe(tc.expected_has_prev)
expect(result.props.show_next).toBe(tc.expected_has_next)
expect(result.props.on_prev).toBe("prev_page")
expect(result.props.on_next).toBe("next_page")
end)
end)
describe("edge cases", function()
it("handles zero items", function()
local result = pagination.calculate(0, 1, 10)
expect(result.pages).toBe(0)
expect(result.has_prev).toBe(false)
expect(result.has_next).toBe(false)
end)
it("handles single item", function()
local result = pagination.calculate(1, 1, 10)
expect(result.pages).toBe(1)
expect(result.has_prev).toBe(false)
expect(result.has_next).toBe(false)
end)
it("handles exact page boundary", function()
local result = pagination.calculate(100, 1, 10)
expect(result.pages).toBe(10)
expect(result.has_prev).toBe(false)
expect(result.has_next).toBe(true)
end)
end)
end)