|
3 | 3 | getTypeValidator,
|
4 | 4 | inferSchema,
|
5 | 5 | makeQueryTemplate,
|
6 |
| - __table |
| 6 | + __table, |
| 7 | + getSchema |
7 | 8 | } from "../src/table.js";
|
8 | 9 | import assert from "assert";
|
9 | 10 |
|
@@ -805,13 +806,37 @@ describe("__table", () => {
|
805 | 806 | "b",
|
806 | 807 | "c"
|
807 | 808 | ]);
|
808 |
| - source.schema = [ |
809 |
| - {name: "a", type: "integer", inferred: "integer"}, |
| 809 | + assert.deepStrictEqual(__table(source, operations).schema, [ |
| 810 | + {name: "nameA", type: "integer", inferred: "integer"}, |
| 811 | + {name: "b", type: "integer", inferred: "integer"}, |
| 812 | + {name: "c", type: "integer", inferred: "integer"} |
| 813 | + ]); |
| 814 | + }); |
| 815 | + |
| 816 | + it("__table type assertions", () => { |
| 817 | + const operations = { |
| 818 | + ...EMPTY_TABLE_DATA.operations, |
| 819 | + types: [{name: "a", type: "string"}] |
| 820 | + }; |
| 821 | + const expected = [ |
| 822 | + {a: "1", b: 2, c: 3}, |
| 823 | + {a: "2", b: 4, c: 6}, |
| 824 | + {a: "3", b: 6, c: 9} |
| 825 | + ]; |
| 826 | + expected.schema = [ |
| 827 | + {name: "a", type: "string", inferred: "integer"}, |
810 | 828 | {name: "b", type: "integer", inferred: "integer"},
|
811 | 829 | {name: "c", type: "integer", inferred: "integer"}
|
812 | 830 | ];
|
| 831 | + assert.deepStrictEqual(__table(source, operations), expected); |
| 832 | + source.columns = ["a", "b", "c"]; |
| 833 | + assert.deepStrictEqual(__table(source, operations).columns, [ |
| 834 | + "a", |
| 835 | + "b", |
| 836 | + "c" |
| 837 | + ]); |
813 | 838 | assert.deepStrictEqual(__table(source, operations).schema, [
|
814 |
| - {name: "nameA", type: "integer", inferred: "integer"}, |
| 839 | + {name: "a", type: "string", inferred: "integer"}, |
815 | 840 | {name: "b", type: "integer", inferred: "integer"},
|
816 | 841 | {name: "c", type: "integer", inferred: "integer"}
|
817 | 842 | ]);
|
@@ -1213,3 +1238,45 @@ describe("coerceToType", () => {
|
1213 | 1238 | // Note: if type is "raw", coerceToType() will not be called. Instead, values
|
1214 | 1239 | // will be returned from coerceRow().
|
1215 | 1240 | });
|
| 1241 | + |
| 1242 | +describe("getSchema", () => { |
| 1243 | + let source; |
| 1244 | + |
| 1245 | + beforeEach(() => { |
| 1246 | + source = [ |
| 1247 | + {a: 1, b: "foo"}, |
| 1248 | + {a: 2, b: "bar"} |
| 1249 | + ]; |
| 1250 | + source.schema = [ |
| 1251 | + {name: "a", type: "integer", inferred: "integer"}, |
| 1252 | + {name: "b", type: "string", inferred: "string"} |
| 1253 | + ]; |
| 1254 | + }); |
| 1255 | + |
| 1256 | + |
| 1257 | + it("respects schema from source, if one exists", () => { |
| 1258 | + const {schema, inferred} = getSchema(source); |
| 1259 | + assert.strictEqual(inferred, false); |
| 1260 | + assert.strictEqual(schema, source.schema); |
| 1261 | + }); |
| 1262 | + |
| 1263 | + it("infers schema if source has no schema", () => { |
| 1264 | + source.schema = undefined; |
| 1265 | + const {schema, inferred} = getSchema(source); |
| 1266 | + assert.strictEqual(inferred, true); |
| 1267 | + assert.deepStrictEqual(schema,[ |
| 1268 | + {name: "a", type: "integer", inferred: "integer"}, |
| 1269 | + {name: "b", type: "string", inferred: "string"} |
| 1270 | + ]); |
| 1271 | + }); |
| 1272 | + |
| 1273 | + it("infers schema if schema is invalid", () => { |
| 1274 | + source.schema = ["number"]; |
| 1275 | + const {schema, inferred} = getSchema(source); |
| 1276 | + assert.strictEqual(inferred, true); |
| 1277 | + assert.deepStrictEqual(schema,[ |
| 1278 | + {name: "a", type: "integer", inferred: "integer"}, |
| 1279 | + {name: "b", type: "string", inferred: "string"} |
| 1280 | + ]); |
| 1281 | + }); |
| 1282 | +}); |
0 commit comments