@dpkit/table
Version:
Data Package implementation in TypeScript.
72 lines • 8.4 kB
JavaScript
import { DataFrame } from "nodejs-polars";
import { describe, expect, it } from "vitest";
import { inspectTable } from "../../table/index.js";
describe("inspectTable (cell/maximum)", () => {
it("should not report errors for valid values", async () => {
const table = DataFrame({
price: [10.5, 20.75, 30.0],
}).lazy();
const schema = {
fields: [
{
name: "price",
type: "number",
constraints: { maximum: 50 },
},
],
};
const errors = await inspectTable(table, { schema });
expect(errors).toHaveLength(0);
});
it("should report an error for invalid values", async () => {
const table = DataFrame({
temperature: [20.5, 30.0, 40, 50.5],
}).lazy();
const schema = {
fields: [
{
name: "temperature",
type: "number",
constraints: { maximum: 40 },
},
],
};
const errors = await inspectTable(table, { schema });
expect(errors.filter(e => e.type === "cell/maximum")).toHaveLength(1);
expect(errors).toContainEqual({
type: "cell/maximum",
fieldName: "temperature",
rowNumber: 4,
cell: "50.5",
});
});
it("should report an error for invalid values (exclusive)", async () => {
const table = DataFrame({
temperature: [20.5, 30.0, 40.0, 50.5],
}).lazy();
const schema = {
fields: [
{
name: "temperature",
type: "number",
constraints: { exclusiveMaximum: 40 },
},
],
};
const errors = await inspectTable(table, { schema });
expect(errors.filter(e => e.type === "cell/exclusiveMaximum")).toHaveLength(2);
expect(errors).toContainEqual({
type: "cell/exclusiveMaximum",
fieldName: "temperature",
rowNumber: 3,
cell: "40",
});
expect(errors).toContainEqual({
type: "cell/exclusiveMaximum",
fieldName: "temperature",
rowNumber: 4,
cell: "50.5",
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF4aW11bS5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZmllbGQvY2hlY2tzL21heGltdW0uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsUUFBUSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtJQUMzQyxFQUFFLENBQUMsMkNBQTJDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDO1NBQzNCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sTUFBTSxHQUFXO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixJQUFJLEVBQUUsUUFBUTtvQkFDZCxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO2lCQUM3QjthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQyxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdEIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO1NBQ3BDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sTUFBTSxHQUFXO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtpQkFDN0I7YUFDRjtTQUNGLENBQUE7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNyRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDO1lBQzVCLElBQUksRUFBRSxjQUFjO1lBQ3BCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLE1BQU07U0FDYixDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDdEIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1NBQ3RDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVULE1BQU0sTUFBTSxHQUFXO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxJQUFJLEVBQUUsYUFBYTtvQkFDbkIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFO2lCQUN0QzthQUNGO1NBQ0YsQ0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQ3pFLENBQUMsQ0FDRixDQUFBO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUM1QixJQUFJLEVBQUUsdUJBQXVCO1lBQzdCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDO1lBQzVCLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsU0FBUyxFQUFFLGFBQWE7WUFDeEIsU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLEVBQUUsTUFBTTtTQUNiLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNjaGVtYSB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5pbXBvcnQgeyBEYXRhRnJhbWUgfSBmcm9tIFwibm9kZWpzLXBvbGFyc1wiXG5pbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlc3RcIlxuaW1wb3J0IHsgaW5zcGVjdFRhYmxlIH0gZnJvbSBcIi4uLy4uL3RhYmxlL2luZGV4LnRzXCJcblxuZGVzY3JpYmUoXCJpbnNwZWN0VGFibGUgKGNlbGwvbWF4aW11bSlcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBub3QgcmVwb3J0IGVycm9ycyBmb3IgdmFsaWQgdmFsdWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7XG4gICAgICBwcmljZTogWzEwLjUsIDIwLjc1LCAzMC4wXSxcbiAgICB9KS5sYXp5KClcblxuICAgIGNvbnN0IHNjaGVtYTogU2NoZW1hID0ge1xuICAgICAgZmllbGRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInByaWNlXCIsXG4gICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICBjb25zdHJhaW50czogeyBtYXhpbXVtOiA1MCB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9XG5cbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBpbnNwZWN0VGFibGUodGFibGUsIHsgc2NoZW1hIH0pXG4gICAgZXhwZWN0KGVycm9ycykudG9IYXZlTGVuZ3RoKDApXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmVwb3J0IGFuIGVycm9yIGZvciBpbnZhbGlkIHZhbHVlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFibGUgPSBEYXRhRnJhbWUoe1xuICAgICAgdGVtcGVyYXR1cmU6IFsyMC41LCAzMC4wLCA0MCwgNTAuNV0sXG4gICAgfSkubGF6eSgpXG5cbiAgICBjb25zdCBzY2hlbWE6IFNjaGVtYSA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJ0ZW1wZXJhdHVyZVwiLFxuICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgY29uc3RyYWludHM6IHsgbWF4aW11bTogNDAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gYXdhaXQgaW5zcGVjdFRhYmxlKHRhYmxlLCB7IHNjaGVtYSB9KVxuICAgIGV4cGVjdChlcnJvcnMuZmlsdGVyKGUgPT4gZS50eXBlID09PSBcImNlbGwvbWF4aW11bVwiKSkudG9IYXZlTGVuZ3RoKDEpXG4gICAgZXhwZWN0KGVycm9ycykudG9Db250YWluRXF1YWwoe1xuICAgICAgdHlwZTogXCJjZWxsL21heGltdW1cIixcbiAgICAgIGZpZWxkTmFtZTogXCJ0ZW1wZXJhdHVyZVwiLFxuICAgICAgcm93TnVtYmVyOiA0LFxuICAgICAgY2VsbDogXCI1MC41XCIsXG4gICAgfSlcbiAgfSlcblxuICBpdChcInNob3VsZCByZXBvcnQgYW4gZXJyb3IgZm9yIGludmFsaWQgdmFsdWVzIChleGNsdXNpdmUpXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWJsZSA9IERhdGFGcmFtZSh7XG4gICAgICB0ZW1wZXJhdHVyZTogWzIwLjUsIDMwLjAsIDQwLjAsIDUwLjVdLFxuICAgIH0pLmxhenkoKVxuXG4gICAgY29uc3Qgc2NoZW1hOiBTY2hlbWEgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwidGVtcGVyYXR1cmVcIixcbiAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgIGNvbnN0cmFpbnRzOiB7IGV4Y2x1c2l2ZU1heGltdW06IDQwIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cblxuICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IGluc3BlY3RUYWJsZSh0YWJsZSwgeyBzY2hlbWEgfSlcbiAgICBleHBlY3QoZXJyb3JzLmZpbHRlcihlID0+IGUudHlwZSA9PT0gXCJjZWxsL2V4Y2x1c2l2ZU1heGltdW1cIikpLnRvSGF2ZUxlbmd0aChcbiAgICAgIDIsXG4gICAgKVxuICAgIGV4cGVjdChlcnJvcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIHR5cGU6IFwiY2VsbC9leGNsdXNpdmVNYXhpbXVtXCIsXG4gICAgICBmaWVsZE5hbWU6IFwidGVtcGVyYXR1cmVcIixcbiAgICAgIHJvd051bWJlcjogMyxcbiAgICAgIGNlbGw6IFwiNDBcIixcbiAgICB9KVxuICAgIGV4cGVjdChlcnJvcnMpLnRvQ29udGFpbkVxdWFsKHtcbiAgICAgIHR5cGU6IFwiY2VsbC9leGNsdXNpdmVNYXhpbXVtXCIsXG4gICAgICBmaWVsZE5hbWU6IFwidGVtcGVyYXR1cmVcIixcbiAgICAgIHJvd051bWJlcjogNCxcbiAgICAgIGNlbGw6IFwiNTAuNVwiLFxuICAgIH0pXG4gIH0pXG59KVxuIl19