-- 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)