annotate src/layout/Layout.test.ts @ 116:dd3325cc023e

multiple table support in Layout
author drewp@bigasterisk.com
date Sat, 19 Mar 2022 17:23:04 -0700
parents 4b33a479dc2f
children c2923b20bf5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
1 import { Quad, Store, Term } from "n3";
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
2 import { n3Graph } from "./fetchAndParse";
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
3 import { AlignedTable, Layout, LayoutResult } from "./Layout";
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
4 import { EX, rdf } from "./namespaces";
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
5 import { ViewConfig } from "./ViewConfig";
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
6
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
7 const twoStatements = async (): Promise<Store> => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
8 return n3Graph(`
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
9 @prefix : <http://example.com/> .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
10 :g1 {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
11 :a0 :b0 :c0 .
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
12 :d0 :e0 :f0 .
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
13 }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
14 `);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
15 };
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
16
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
17 const typedStatements = async (): Promise<Store> => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
18 return n3Graph(`
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
19 @prefix : <http://example.com/> .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
20 :g1 {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
21 :a a :T1 ; :color :red .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
22 :b a :T1 ; :color :blue .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
23 :c a :T1 .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
24 :d a :T2 ; :size :big .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
25 :e a :T1,:T2; :size :small
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
26 }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
27 `);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
28 };
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
29 function G1(s: Term, p: Term, o: Term): Quad {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
30 return new Quad(s, p, o, EX("g1"));
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
31 }
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
32
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
33 describe("Layout", () => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
34 it("accepts a ViewConfig", async () => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
35 const vc = new ViewConfig();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
36 await vc.readFromGraph(`
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
37 @prefix ex: <http://example.com/> .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
38 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
39
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
40 <> a ex:View; rdfs:label "repos" .`);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
41 const layout = new Layout(vc);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
42 const lr = layout.plan(await twoStatements());
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
43 });
116
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
44 it("returns no sections for empty graph", () => {
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
45 const vc = new ViewConfig();
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
46 const layout = new Layout(vc);
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
47 const lr = layout.plan(new Store());
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
48 expect(lr.sections).toHaveLength(0);
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
49 });
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
50 it("defaults to putting all triples in the ungrouped list", async () => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
51 const layout = new Layout();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
52 const lr = layout.plan(await twoStatements());
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
53 expect(lr).toEqual({
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
54 sections: [
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
55 {
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
56 subjRows: [
109
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
57 {
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
58 subj: EX("a0"),
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
59 predRows: [{ pred: EX("b0"), objs: [EX("c0")] }],
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
60 },
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
61 {
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
62 subj: EX("d0"),
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
63 predRows: [{ pred: EX("e0"), objs: [EX("f0")] }],
cbcd82d21356 cleanup
drewp@bigasterisk.com
parents: 108
diff changeset
64 },
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
65 ],
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
66 },
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
67 ],
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
68 });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
69 });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
70 describe("makes a table as requested by ViewConfig", () => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
71 let lr: LayoutResult;
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
72
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
73 beforeAll(async () => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
74 const vc = new ViewConfig();
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
75 await vc.readFromGraph(`
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
76 @prefix : <http://example.com/> .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
77 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
78
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
79 <> a :View; :table [ :primaryType :T1 ] .`);
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
80 const layout = new Layout(vc);
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
81 lr = layout.plan(await typedStatements());
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
82 });
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
83 it("returns 2 sections", () => {
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
84 expect(lr.sections).toHaveLength(2);
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
85 });
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
86 it("puts the right type in the table", async () => {
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
87 const sec0 = lr.sections[0] as AlignedTable;
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
88 expect(sec0.columnHeaders).toEqual([
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
89 { rdfType: EX("T1"), pred: EX("color") },
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
90 { rdfType: EX("T1"), pred: EX("size") },
114
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
91 // and doesn't include rdf:type as a column header here
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
92 ]);
114
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
93 expect(sec0.rowHeaders).toEqual([EX("a"), EX("b"), EX("c"), EX("e")]);
104
1aea03d306af WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents: 103
diff changeset
94 expect(sec0.rows).toEqual([
114
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
95 [[EX("red")], []],
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
96 [[EX("blue")], []],
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
97 [[], []],
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
98 [[], [EX("small")]],
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
99 ]);
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
100 });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
101 it("leaves the rest ungrouped", async () => {
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
102 expect(lr.sections[1]).toEqual({
108
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
103 subjRows: [
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
104 {
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
105 subj: EX("d"),
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
106 predRows: [
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
107 { pred: EX("size"), objs: [EX("big")] },
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
108 { pred: rdf.type, objs: [EX("T2")] },
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
109 ],
5e6840229a05 rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents: 106
diff changeset
110 },
103
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
111 ],
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
112 });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
113 });
f12feced00ce WIP rewriting Layout
drewp@bigasterisk.com
parents: 88
diff changeset
114 });
116
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
115 it("makes two tables", async () => {
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
116 const vc = new ViewConfig();
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
117 await vc.readFromGraph(`
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
118 @prefix ex: <http://example.com/> .
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
119 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
120 @prefix : <http://example.com/> .
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
121
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
122 <> a :View; :table [ :primaryType :T1 ], [ :primaryType :T2 ] .`);
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
123 const layout = new Layout(vc);
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
124 const lr = layout.plan(await typedStatements());
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
125 expect(lr.sections).toHaveLength(2);
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
126 expect(lr.sections[0]).toEqual({
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
127 columnHeaders: [
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
128 { rdfType: EX("T1"), pred: EX("color") },
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
129 { rdfType: EX("T1"), pred: EX("size") },
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
130 ],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
131 rowHeaders: [EX("a"), EX("b"), EX("c"), EX("e")],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
132 rows: [
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
133 [[EX("red")], []],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
134 [[EX("blue")], []],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
135 [[], []],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
136 [[], [EX("small")]],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
137 ],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
138 });
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
139 expect(lr.sections[1]).toEqual({
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
140 columnHeaders: [{ rdfType: EX("T2"), pred: EX("size") }],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
141 rowHeaders: [EX("d"), EX("e")],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
142 rows: [
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
143 [[EX("big")]], //
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
144 [[EX("small")]],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
145 ],
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
146 });
dd3325cc023e multiple table support in Layout
drewp@bigasterisk.com
parents: 114
diff changeset
147 });
114
4b33a479dc2f fix layout test to match new layout return types. clean up UriPairMap
drewp@bigasterisk.com
parents: 109
diff changeset
148 it.skip("makes a table out of ungrouped triples with the same type", async () => {});
88
ac7ad087d474 graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff changeset
149 });