@malloydata/malloy-tests 0.0.95-dev231019211822 → 0.0.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +213 -1
  2. package/dist/api.spec.d.ts +1 -1
  3. package/dist/api.spec.js +6 -13
  4. package/dist/api.spec.js.map +1 -1
  5. package/dist/databases/all/db_index.spec.js +21 -41
  6. package/dist/databases/all/db_index.spec.js.map +1 -1
  7. package/dist/databases/all/expr.spec.js +262 -339
  8. package/dist/databases/all/expr.spec.js.map +1 -1
  9. package/dist/databases/all/functions.spec.js +37 -35
  10. package/dist/databases/all/functions.spec.js.map +1 -1
  11. package/dist/databases/all/join.spec.js +125 -169
  12. package/dist/databases/all/join.spec.js.map +1 -1
  13. package/dist/databases/all/nomodel.spec.js +335 -594
  14. package/dist/databases/all/nomodel.spec.js.map +1 -1
  15. package/dist/databases/all/orderby.spec.js +82 -128
  16. package/dist/databases/all/orderby.spec.js.map +1 -1
  17. package/dist/databases/all/sql_expressions.spec.js +27 -43
  18. package/dist/databases/all/sql_expressions.spec.js.map +1 -1
  19. package/dist/databases/all/time.spec.js +63 -103
  20. package/dist/databases/all/time.spec.js.map +1 -1
  21. package/dist/databases/bigquery/double_truncation.spec.js +1 -1
  22. package/dist/databases/bigquery/handexpr.spec.js +12 -12
  23. package/dist/databases/bigquery/injestion_time_partitioning.spec.js +22 -22
  24. package/dist/databases/bigquery/joined_filters.spec.js +3 -3
  25. package/dist/databases/bigquery/json.spec.d.ts +1 -1
  26. package/dist/databases/bigquery/json.spec.js +25 -45
  27. package/dist/databases/bigquery/json.spec.js.map +1 -1
  28. package/dist/databases/bigquery/malloy_query.spec.d.ts +1 -1
  29. package/dist/databases/bigquery/malloy_query.spec.js +47 -48
  30. package/dist/databases/bigquery/malloy_query.spec.js.map +1 -1
  31. package/dist/databases/bigquery/time.spec.js +9 -13
  32. package/dist/databases/bigquery/time.spec.js.map +1 -1
  33. package/dist/databases/bigquery/wildcard_table_names.spec.js +19 -19
  34. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js +53 -87
  35. package/dist/databases/bigquery-duckdb/nested_source_table.spec.js.map +1 -1
  36. package/dist/databases/bigquery-postgres/multi_connection.spec.js +5 -20
  37. package/dist/databases/bigquery-postgres/multi_connection.spec.js.map +1 -1
  38. package/dist/databases/bigquery-postgres/streaming.spec.js +6 -6
  39. package/dist/databases/bigquery-postgres/streaming.spec.js.map +1 -1
  40. package/dist/databases/duckdb/duckdb.spec.js +24 -33
  41. package/dist/databases/duckdb/duckdb.spec.js.map +1 -1
  42. package/dist/databases/postgres/postgres.spec.js +46 -67
  43. package/dist/databases/postgres/postgres.spec.js.map +1 -1
  44. package/dist/jestMatcher.spec.d.ts +1 -0
  45. package/dist/jestMatcher.spec.js +81 -0
  46. package/dist/jestMatcher.spec.js.map +1 -0
  47. package/dist/render/render.spec.js +10 -12
  48. package/dist/render/render.spec.js.map +1 -1
  49. package/dist/tags.spec.js +22 -2
  50. package/dist/tags.spec.js.map +1 -1
  51. package/dist/util/db-jest-matchers.d.ts +17 -6
  52. package/dist/util/db-jest-matchers.js +81 -20
  53. package/dist/util/db-jest-matchers.js.map +1 -1
  54. package/dist/util/index.d.ts +1 -2
  55. package/dist/util/index.js +11 -13
  56. package/dist/util/index.js.map +1 -1
  57. package/package.json +6 -6
  58. package/src/api.spec.ts +7 -16
  59. package/src/databases/all/db_index.spec.ts +22 -48
  60. package/src/databases/all/expr.spec.ts +273 -431
  61. package/src/databases/all/functions.spec.ts +37 -35
  62. package/src/databases/all/join.spec.ts +130 -196
  63. package/src/databases/all/nomodel.spec.ts +333 -689
  64. package/src/databases/all/orderby.spec.ts +87 -161
  65. package/src/databases/all/sql_expressions.spec.ts +29 -49
  66. package/src/databases/all/time.spec.ts +73 -130
  67. package/src/databases/bigquery/double_truncation.spec.ts +1 -1
  68. package/src/databases/bigquery/handexpr.spec.ts +12 -12
  69. package/src/databases/bigquery/injestion_time_partitioning.spec.ts +22 -22
  70. package/src/databases/bigquery/joined_filters.spec.ts +3 -3
  71. package/src/databases/bigquery/json.spec.ts +25 -49
  72. package/src/databases/bigquery/malloy_query.spec.ts +47 -54
  73. package/src/databases/bigquery/time.spec.ts +13 -17
  74. package/src/databases/bigquery/wildcard_table_names.spec.ts +19 -19
  75. package/src/databases/bigquery-duckdb/nested_source_table.spec.ts +56 -98
  76. package/src/databases/bigquery-postgres/multi_connection.spec.ts +5 -23
  77. package/src/databases/bigquery-postgres/streaming.spec.ts +12 -6
  78. package/src/databases/duckdb/duckdb.spec.ts +31 -43
  79. package/src/databases/postgres/postgres.spec.ts +54 -84
  80. package/src/jestMatcher.spec.ts +88 -0
  81. package/src/render/render.spec.ts +10 -12
  82. package/src/tags.spec.ts +22 -2
  83. package/src/util/db-jest-matchers.ts +106 -32
  84. package/src/util/index.ts +16 -14
@@ -24,12 +24,13 @@
24
24
  /* eslint-disable no-console */
25
25
 
26
26
  import {RuntimeList, allDatabases} from '../../runtimes';
27
- import {databasesFromEnvironmentOr} from '../../util';
27
+ import {databasesFromEnvironmentOr, testIf} from '../../util';
28
28
  import '../../util/db-jest-matchers';
29
29
 
30
30
  const runtimes = new RuntimeList(databasesFromEnvironmentOr(allDatabases));
31
- const joinModelText = `
32
- source: aircraft_models is table('malloytest.aircraft_models') extend {
31
+ function modelText(connectionName: string) {
32
+ return `
33
+ source: aircraft_models is ${connectionName}.table('malloytest.aircraft_models') extend {
33
34
  primary_key: aircraft_model_code
34
35
  measure: model_count is count()
35
36
  view: manufacturer_models is {
@@ -42,7 +43,7 @@ const joinModelText = `
42
43
  }
43
44
  }
44
45
 
45
- source: aircraft is table('malloytest.aircraft') extend {
46
+ source: aircraft is ${connectionName}.table('malloytest.aircraft') extend {
46
47
  primary_key: tail_num
47
48
  measure: aircraft_count is count()
48
49
  }
@@ -52,11 +53,7 @@ const joinModelText = `
52
53
  with manufacturer
53
54
  }
54
55
  `;
55
-
56
- // const models = new Map<string, malloy.ModelMaterializer>();
57
- // runtimes.runtimeMap.forEach((runtime, key) => {
58
- // models.set(key, runtime.loadModel(joinModelText));
59
- // });
56
+ }
60
57
 
61
58
  afterAll(async () => {
62
59
  await runtimes.closeAll();
@@ -64,107 +61,79 @@ afterAll(async () => {
64
61
 
65
62
  describe('join expression tests', () => {
66
63
  runtimes.runtimeMap.forEach((runtime, database) => {
64
+ const joinModelText = modelText(database);
65
+ const joinModel = runtime.loadModel(joinModelText);
67
66
  it(`model source refine join - ${database}`, async () => {
68
- const result = await runtime
69
- .loadModel(joinModelText)
70
- .loadQuery(
71
- `
72
- source: a2 is aircraft extend {
73
- join_one: aircraft_models with aircraft_model_code
74
- }
75
-
76
- run: a2 -> {
77
- aggregate:
78
- aircraft_count
79
- aircraft_models.model_count
80
- }
81
- `
82
- )
83
- .run();
84
- expect(result.data.value[0]['model_count']).toBe(1416);
67
+ await expect(`
68
+ source: a2 is aircraft extend {
69
+ join_one: aircraft_models with aircraft_model_code
70
+ }
71
+ run: a2 -> {
72
+ aggregate:
73
+ aircraft_count
74
+ aircraft_models.model_count
75
+ }
76
+ `).malloyResultMatches(joinModel, {model_count: 1416});
85
77
  });
86
78
 
87
79
  it(`model source refine in query join - ${database}`, async () => {
88
- const result = await runtime
89
- .loadModel(joinModelText)
90
- .loadQuery(
91
- `
92
- run: aircraft {
93
- join_one: aircraft_models with aircraft_model_code
94
- } -> {
95
- aggregate:
96
- aircraft_count
97
- aircraft_models.model_count
98
- }
99
- `
100
- )
101
- .run();
102
- expect(result.data.value[0]['model_count']).toBe(1416);
80
+ await expect(`
81
+ run: aircraft extend {
82
+ join_one: aircraft_models with aircraft_model_code
83
+ } -> {
84
+ aggregate:
85
+ aircraft_count
86
+ aircraft_models.model_count
87
+ }
88
+ `).malloyResultMatches(joinModel, {model_count: 1416});
103
89
  });
104
90
 
105
91
  it(`model: join fact table query - ${database}`, async () => {
106
- const result = await runtime
107
- .loadModel(joinModelText)
108
- .loadQuery(
109
- `
110
- run: aircraft_models {
111
- join_one: am_facts is
112
- aircraft_models->{
113
- group_by: m is manufacturer
114
- aggregate: num_models is count()
115
- } with manufacturer
116
- } -> {
117
- select:
118
- manufacturer
119
- am_facts.num_models
120
- order_by: 2 desc
121
- limit: 1
122
- }
123
- `
124
- )
125
- .run();
126
- expect(result.data.value[0]['num_models']).toBe(1147);
92
+ await expect(`
93
+ run: aircraft_models extend {
94
+ join_one: am_facts is
95
+ aircraft_models->{
96
+ group_by: m is manufacturer
97
+ aggregate: num_models is count()
98
+ } with manufacturer
99
+ } -> {
100
+ select:
101
+ manufacturer
102
+ am_facts.num_models
103
+ order_by: 2 desc
104
+ limit: 1
105
+ }
106
+ `).malloyResultMatches(joinModel, {num_models: 1147});
127
107
  });
128
108
 
129
109
  it(`model: source based on query - ${database}`, async () => {
130
- const result = await runtime
131
- .loadModel(joinModelText)
132
- .loadQuery(
133
- `
134
- run:
135
- aircraft_models-> {
110
+ await expect(`
111
+ run: aircraft_models
112
+ -> {
136
113
  group_by: m is manufacturer
137
114
  aggregate: num_models is count()
115
+ } -> {
116
+ select:
117
+ m
118
+ num_models
119
+ order_by: 2 desc
120
+ limit: 1
138
121
  }
139
- -> {
140
- select:
141
- m
142
- num_models
143
- order_by: 2 desc
144
- limit: 1
145
- }
146
- `
147
- )
148
- .run();
149
- expect(result.data.value[0]['num_models']).toBe(1147);
122
+ `).malloyResultMatches(joinModel, {num_models: 1147});
150
123
  });
151
124
 
152
125
  it(`model: funnel - merge two queries - ${database}`, async () => {
153
- const result = await runtime
154
- .loadModel(joinModelText)
155
- .loadQuery(
156
- `
157
- run: aircraft_models->{
158
- group_by: m is manufacturer
159
- aggregate: num_models is count()
160
- } extend {
126
+ await expect(`
127
+ run: aircraft_models->{
128
+ group_by: m is manufacturer
129
+ aggregate: num_models is count()
130
+ } extend {
161
131
  join_one: seats is
162
132
  aircraft_models->{
163
133
  group_by: m is manufacturer
164
134
  aggregate: total_seats is seats.sum()
165
135
  } with m
166
- }
167
- -> {
136
+ } -> {
168
137
  select:
169
138
  m
170
139
  num_models
@@ -172,83 +141,66 @@ describe('join expression tests', () => {
172
141
  order_by: 2 desc
173
142
  limit: 1
174
143
  }
175
- `
176
- )
177
- .run();
178
- expect(result.data.value[0]['num_models']).toBe(1147);
179
- expect(result.data.value[0]['total_seats']).toBe(252771);
144
+ `).malloyResultMatches(joinModel, {
145
+ num_models: 1147,
146
+ total_seats: 252771,
147
+ });
180
148
  });
181
149
 
182
150
  it(`model: modeled funnel - ${database}`, async () => {
183
- const result = await runtime
184
- .loadModel(joinModelText)
185
- .loadQuery(
186
- `
187
- source: foo is aircraft_models-> manufacturer_models extend {
188
- join_one: seats is aircraft_models->manufacturer_seats with manufacturer
189
- }
190
- run: foo-> {
191
- select:
192
- manufacturer,
193
- num_models,
194
- seats.total_seats
195
- order_by: 2 desc
196
- limit: 1
197
- }
198
- `
199
- )
200
- .run();
201
- expect(result.data.value[0]['num_models']).toBe(1147);
202
- expect(result.data.value[0]['total_seats']).toBe(252771);
151
+ await expect(`
152
+ run: aircraft_models-> manufacturer_models extend {
153
+ join_one: seats is aircraft_models->manufacturer_seats with manufacturer
154
+ } -> {
155
+ select:
156
+ manufacturer,
157
+ num_models,
158
+ seats.total_seats
159
+ order_by: 2 desc
160
+ limit: 1
161
+ }
162
+ `).malloyResultMatches(joinModel, {
163
+ num_models: 1147,
164
+ total_seats: 252771,
165
+ });
203
166
  });
204
167
 
205
168
  it(`model: modeled funnel2 - ${database}`, async () => {
206
- const result = await runtime
207
- .loadModel(joinModelText)
208
- .loadQuery(
209
- `
210
- run: funnel->{
211
- select:
212
- manufacturer
213
- num_models
214
- seats.total_seats
215
- order_by: 2 desc
216
- limit: 1
217
- }
218
- `
219
- )
220
- .run();
221
- expect(result.data.value[0]['num_models']).toBe(1147);
222
- expect(result.data.value[0]['total_seats']).toBe(252771);
169
+ await expect(`
170
+ run: funnel->{
171
+ select:
172
+ manufacturer
173
+ num_models
174
+ seats.total_seats
175
+ order_by: 2 desc
176
+ limit: 1
177
+ }
178
+ `).malloyResultMatches(joinModel, {
179
+ num_models: 1147,
180
+ total_seats: 252771,
181
+ });
223
182
  });
224
183
 
225
184
  it(`model: double_pipe - ${database}`, async () => {
226
- const result = await runtime
227
- .loadModel(joinModelText)
228
- .loadQuery(
229
- `
230
- run: aircraft_models->{
231
- group_by: manufacturer
232
- aggregate: f is count()
233
- }->{
234
- aggregate: f_sum is f.sum()
235
- }->{
236
- select: f_sum2 is f_sum+1
237
- }
238
- `
239
- )
240
- .run();
241
- expect(result.data.value[0]['f_sum2']).toBe(60462);
185
+ await expect(`
186
+ run: aircraft_models->{
187
+ group_by: manufacturer
188
+ aggregate: f is count()
189
+ }->{
190
+ aggregate: f_sum is f.sum()
191
+ }->{
192
+ select: f_sum2 is f_sum+1
193
+ }
194
+ `).malloyResultMatches(joinModel, {f_sum2: 60462});
242
195
  });
243
196
 
244
- test(`model: unnest is left join - ${database}`, async () => {
245
- const result = await runtime
246
- .loadModel(joinModelText)
247
- .loadQuery(
248
- `
197
+ testIf(runtime.supportsNesting)(
198
+ `model: unnest is left join - ${database}`,
199
+ async () => {
200
+ await expect(`
249
201
  // produce a table with 4 rows that has a nested element
250
- query: a_states is table('malloytest.state_facts')-> {
251
- where: state ? ~ 'A%'
202
+ query: a_states is ${database}.table('malloytest.state_facts')-> {
203
+ where: state ? ~ 'A%'
252
204
  group_by: state
253
205
  nest: somthing is {group_by: state}
254
206
  }
@@ -256,7 +208,7 @@ describe('join expression tests', () => {
256
208
  // join the 4 rows and reference the
257
209
  // nested column. should return all the rows.
258
210
  // If the unnest is an inner join, we'll get back just 4 rows.
259
- run: table('malloytest.state_facts') {
211
+ run: ${database}.table('malloytest.state_facts') extend {
260
212
  join_one: a_states is a_states with state
261
213
  }
262
214
  -> {
@@ -265,73 +217,55 @@ describe('join expression tests', () => {
265
217
  nest: a is {
266
218
  group_by: a_states.somthing.state
267
219
  }
220
+ limit: 5
268
221
  }
269
- `
270
- )
271
- .run();
272
- // console.log(result.data.toObject());
273
- expect(result.data.rowCount).toBeGreaterThan(4);
274
- });
222
+ `).malloyResultMatches(joinModel, [{}, {}, {}, {}, {}]);
223
+ }
224
+ );
275
225
 
276
- // not sure how to solve this one yet.
226
+ // not sure how to solve this one yet, just check for > 4 rows
277
227
  it(`All joins at the same level - ${database}`, async () => {
278
- const result = await runtime
279
- .loadQuery(
280
- `
281
- source: flights is table('malloytest.flights') extend {
282
- join_one: aircraft is table('malloytest.aircraft')
228
+ await expect(`
229
+ source: flights is ${database}.table('malloytest.flights') extend {
230
+ join_one: aircraft is ${database}.table('malloytest.aircraft')
283
231
  on tail_num = aircraft.tail_num
284
- join_one: aircraft_models is table('malloytest.aircraft_models')
232
+ join_one: aircraft_models is ${database}.table('malloytest.aircraft_models')
285
233
  on aircraft.aircraft_model_code = aircraft_models.aircraft_model_code
286
234
  }
287
235
 
288
236
  run: flights -> {
289
237
  group_by: aircraft_models.seats
290
238
  aggregate: flight_count is count()
239
+ limit: 5
291
240
  }
292
- `
293
- )
294
- .run();
295
- // console.log(result.data.toObject());
296
- expect(result.data.rowCount).toBeGreaterThan(4);
241
+ `).malloyResultMatches(joinModel, [{}, {}, {}, {}, {}]);
297
242
  });
298
243
 
299
244
  it(`join issue440 - ${database}`, async () => {
300
- const result = await runtime
301
- .loadQuery(
302
- `
303
- source: aircraft_models is table('malloytest.aircraft_models')
245
+ await expect(`
246
+ source: aircraft_models is ${database}.table('malloytest.aircraft_models')
304
247
 
305
- source: aircraft is table('malloytest.aircraft')
248
+ source: aircraft is ${database}.table('malloytest.aircraft')
306
249
 
307
- source: flights is table('malloytest.flights') extend {
250
+ source: flights is ${database}.table('malloytest.flights') extend {
308
251
  join_one: aircraft on aircraft.tail_num = tail_num
309
252
  join_one: aircraft_models on aircraft_models.aircraft_model_code = aircraft.aircraft_model_code
310
253
  }
311
254
 
312
255
  run: flights-> {
313
256
  group_by: testingtwo is aircraft_models.model
257
+ limit: 5
314
258
  }
315
- `
316
- )
317
- .run();
318
- // console.log(result.data.toObject());
319
- expect(result.data.rowCount).toBeGreaterThan(4);
259
+ `).malloyResultMatches(runtime, [{}, {}, {}, {}, {}]);
320
260
  });
321
261
 
322
262
  it(`join issue1092 - ${database}`, async () => {
323
- const result = await runtime
324
- .loadQuery(
325
- `
326
- run: table('malloytest.state_facts') -> {
327
- join_one: sf is table('malloytest.state_facts') on sf.state = state
328
- aggregate: x is sf.births.sum() { ? state = 'CA' }
329
- }
330
- `
331
- )
332
- .run();
333
- // console.log(result.data.toObject());
334
- expect(result.data.rowCount).toBe(1);
263
+ await expect(`
264
+ run: ${database}.table('malloytest.state_facts') -> {
265
+ extend: {join_one: sf is ${database}.table('malloytest.state_facts') on sf.state = state}
266
+ aggregate: x is sf.births.sum() { where: state = 'CA' }
267
+ }
268
+ `).malloyResultMatches(runtime, [{}]);
335
269
  });
336
270
  });
337
271
  });