@dpkit/table
Version:
Data Package implementation in TypeScript.
51 lines (41 loc) • 1.81 kB
text/typescript
import type { Schema } from "@dpkit/core"
import { DataFrame } from "nodejs-polars"
import { describe, expect, it } from "vitest"
import { denormalizeTable } from "../table/index.ts"
describe("stringifyField", () => {
describe("missing values", () => {
it.each([
// Schema-level - null values should be converted to first missing value
[null, "", {}],
[null, "", { schemaLevel: [] }], // defaults to ""
[null, "-", { schemaLevel: ["-"] }],
[null, "x", { schemaLevel: ["x"] }],
// Regular values should remain unchanged
["hello", "hello", {}],
["world", "world", { schemaLevel: ["-"] }],
// Field-level missing values take precedence
[null, "", {}], // default field-level missing value
[null, "-", { fieldLevel: ["-"] }],
[null, "n/a", { fieldLevel: ["n/a"] }],
// Regular values with field-level settings
["test", "test", { fieldLevel: ["-"] }],
["value", "value", { fieldLevel: ["n/a"] }],
// Field-level overrides schema-level
[null, "-", { schemaLevel: ["x"], fieldLevel: ["-"] }],
[null, "x", { schemaLevel: ["-"], fieldLevel: ["x"] }],
// Multiple missing values - should use first one
[null, "-", { fieldLevel: ["-", "n/a", "null"] }],
[null, "n/a", { schemaLevel: ["n/a", "NULL", ""] }],
// @ts-ignore
])("%s -> %s %s", async (value, expected, { fieldLevel, schemaLevel }) => {
const table = DataFrame({ name: [value] }).lazy()
const schema: Schema = {
missingValues: schemaLevel,
fields: [{ name: "name", type: "string", missingValues: fieldLevel }],
}
const ldf = await denormalizeTable(table, schema)
const df = await ldf.collect()
expect(df.toRecords()[0]?.name).toEqual(expected)
})
})
})