@lightdash/common 0.2036.2 → 0.2037.0

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 (49) hide show
  1. package/dist/cjs/index.d.ts +1 -0
  2. package/dist/cjs/index.d.ts.map +1 -1
  3. package/dist/cjs/index.js +1 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/types/changeset.d.ts +16 -16
  6. package/dist/cjs/types/changeset.js +1 -1
  7. package/dist/cjs/types/changeset.js.map +1 -1
  8. package/dist/cjs/utils/changeset.d.ts +7 -0
  9. package/dist/cjs/utils/changeset.d.ts.map +1 -0
  10. package/dist/cjs/utils/changeset.js +137 -0
  11. package/dist/cjs/utils/changeset.js.map +1 -0
  12. package/dist/cjs/utils/changeset.mock.d.ts +4 -0
  13. package/dist/cjs/utils/changeset.mock.d.ts.map +1 -0
  14. package/dist/cjs/utils/changeset.mock.js +149 -0
  15. package/dist/cjs/utils/changeset.mock.js.map +1 -0
  16. package/dist/cjs/utils/changeset.test.d.ts +2 -0
  17. package/dist/cjs/utils/changeset.test.d.ts.map +1 -0
  18. package/dist/cjs/utils/changeset.test.js +250 -0
  19. package/dist/cjs/utils/changeset.test.js.map +1 -0
  20. package/dist/esm/index.d.ts +1 -0
  21. package/dist/esm/index.d.ts.map +1 -1
  22. package/dist/esm/index.js +1 -0
  23. package/dist/esm/index.js.map +1 -1
  24. package/dist/esm/types/changeset.d.ts +16 -16
  25. package/dist/esm/types/changeset.js +1 -1
  26. package/dist/esm/types/changeset.js.map +1 -1
  27. package/dist/esm/utils/changeset.d.ts +7 -0
  28. package/dist/esm/utils/changeset.d.ts.map +1 -0
  29. package/dist/esm/utils/changeset.js +132 -0
  30. package/dist/esm/utils/changeset.js.map +1 -0
  31. package/dist/esm/utils/changeset.mock.d.ts +4 -0
  32. package/dist/esm/utils/changeset.mock.d.ts.map +1 -0
  33. package/dist/esm/utils/changeset.mock.js +146 -0
  34. package/dist/esm/utils/changeset.mock.js.map +1 -0
  35. package/dist/esm/utils/changeset.test.d.ts +2 -0
  36. package/dist/esm/utils/changeset.test.d.ts.map +1 -0
  37. package/dist/esm/utils/changeset.test.js +248 -0
  38. package/dist/esm/utils/changeset.test.js.map +1 -0
  39. package/dist/tsconfig.types.tsbuildinfo +1 -1
  40. package/dist/types/index.d.ts +1 -0
  41. package/dist/types/index.d.ts.map +1 -1
  42. package/dist/types/types/changeset.d.ts +16 -16
  43. package/dist/types/utils/changeset.d.ts +7 -0
  44. package/dist/types/utils/changeset.d.ts.map +1 -0
  45. package/dist/types/utils/changeset.mock.d.ts +4 -0
  46. package/dist/types/utils/changeset.mock.d.ts.map +1 -0
  47. package/dist/types/utils/changeset.test.d.ts +2 -0
  48. package/dist/types/utils/changeset.test.d.ts.map +1 -0
  49. package/package.json +2 -1
@@ -0,0 +1,248 @@
1
+ import { ChangesetUtils } from './changeset';
2
+ import { mockCustomersExplore, mockOrdersExplore } from './changeset.mock';
3
+ const changeset = {
4
+ changesetUuid: 'cs1',
5
+ createdAt: new Date(),
6
+ updatedAt: new Date(),
7
+ createdByUserUuid: 'u1',
8
+ updatedByUserUuid: 'u2',
9
+ projectUuid: 'p1',
10
+ status: 'applied',
11
+ name: 'test',
12
+ };
13
+ const mockExplores = {
14
+ orders: mockOrdersExplore,
15
+ customers: mockCustomersExplore,
16
+ };
17
+ describe('ChangesetUtils', () => {
18
+ describe('applyChange', () => {
19
+ describe('update', () => {
20
+ describe('fields', () => {
21
+ it('should update the dimension', () => {
22
+ expect(mockExplores.orders.tables.orders.dimensions.status
23
+ .description).toEqual('Status of the order');
24
+ const change = {
25
+ changeUuid: 'c1',
26
+ changesetUuid: 'cs1',
27
+ createdAt: new Date(),
28
+ createdByUserUuid: 'u1',
29
+ sourcePromptUuid: 'sp1',
30
+ type: 'update',
31
+ entityType: 'dimension',
32
+ entityName: 'status',
33
+ payload: {
34
+ patches: [
35
+ {
36
+ op: 'replace',
37
+ path: '/description',
38
+ value: 'Status of the order. (Shipped, Completed, Cancelled)',
39
+ },
40
+ ],
41
+ },
42
+ entityTableName: 'orders',
43
+ };
44
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
45
+ expect(patchedExplores.orders.tables.orders.dimensions.status
46
+ .description).toEqual('Status of the order. (Shipped, Completed, Cancelled)');
47
+ });
48
+ it('should update the dimension without description and label', () => {
49
+ expect(mockExplores.orders.tables.orders.dimensions
50
+ .order_date_month).not.toHaveProperty('description');
51
+ expect(mockExplores.orders.tables.orders.dimensions
52
+ .order_date_month.label).toEqual('');
53
+ const change = {
54
+ changeUuid: 'c2',
55
+ changesetUuid: 'cs1',
56
+ createdAt: new Date(),
57
+ createdByUserUuid: 'u1',
58
+ sourcePromptUuid: 'sp1',
59
+ type: 'update',
60
+ entityType: 'dimension',
61
+ entityName: 'order_date_month',
62
+ payload: {
63
+ patches: [
64
+ {
65
+ op: 'replace',
66
+ path: '/label',
67
+ value: 'Date Month',
68
+ },
69
+ {
70
+ op: 'add',
71
+ path: '/description',
72
+ value: 'Date Month of the order (Jan, Feb, Mar, etc.)',
73
+ },
74
+ ],
75
+ },
76
+ entityTableName: 'orders',
77
+ };
78
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
79
+ expect(patchedExplores.orders.tables.orders.dimensions
80
+ .order_date_month.label).toEqual('Date Month');
81
+ expect(patchedExplores.orders.tables.orders.dimensions
82
+ .order_date_month.description).toEqual('Date Month of the order (Jan, Feb, Mar, etc.)');
83
+ });
84
+ it('should update the metric', () => {
85
+ expect(mockExplores.orders.tables.orders.metrics.total_orders
86
+ .description).toEqual('Total orders');
87
+ const change = {
88
+ changeUuid: 'c3',
89
+ changesetUuid: 'cs1',
90
+ createdAt: new Date(),
91
+ createdByUserUuid: 'u1',
92
+ sourcePromptUuid: 'sp1',
93
+ type: 'update',
94
+ entityType: 'metric',
95
+ entityTableName: 'orders',
96
+ entityName: 'total_orders',
97
+ payload: {
98
+ patches: [
99
+ {
100
+ op: 'replace',
101
+ path: '/description',
102
+ value: 'Total orders - aggregated value',
103
+ },
104
+ ],
105
+ },
106
+ };
107
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
108
+ expect(patchedExplores.orders.tables.orders.metrics
109
+ .total_orders.description).toEqual('Total orders - aggregated value');
110
+ });
111
+ it('should update the field in joined tables too', () => {
112
+ expect(mockExplores.orders.tables.customers.dimensions.id
113
+ .label).toEqual('ID');
114
+ expect(mockExplores.customers.tables.customers.dimensions.id
115
+ .label).toEqual('ID');
116
+ const change = {
117
+ changeUuid: 'c4',
118
+ changesetUuid: 'cs1',
119
+ createdAt: new Date(),
120
+ createdByUserUuid: 'u1',
121
+ sourcePromptUuid: 'sp1',
122
+ type: 'update',
123
+ entityType: 'dimension',
124
+ entityTableName: 'customers',
125
+ entityName: 'id',
126
+ payload: {
127
+ patches: [
128
+ {
129
+ op: 'replace',
130
+ path: '/label',
131
+ value: 'ID of the customer',
132
+ },
133
+ ],
134
+ },
135
+ };
136
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
137
+ expect(patchedExplores.orders.tables.customers.dimensions.id
138
+ .label).toEqual('ID of the customer');
139
+ expect(patchedExplores.customers.tables.customers.dimensions
140
+ .id.label).toEqual('ID of the customer');
141
+ });
142
+ it('should skip the patch if the field is not found in the explore', () => {
143
+ const change = {
144
+ changeUuid: 'c5',
145
+ changesetUuid: 'cs1',
146
+ createdAt: new Date(),
147
+ createdByUserUuid: 'u1',
148
+ sourcePromptUuid: 'sp1',
149
+ type: 'update',
150
+ entityType: 'table',
151
+ entityTableName: 'orders',
152
+ entityName: 'id_not_found',
153
+ payload: {
154
+ patches: [
155
+ {
156
+ op: 'replace',
157
+ path: '/description',
158
+ value: 'ID of the customer',
159
+ },
160
+ ],
161
+ },
162
+ };
163
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
164
+ expect(patchedExplores).toStrictEqual(mockExplores);
165
+ });
166
+ it('should skip the patch if the table is not found in the explore', () => {
167
+ const change = {
168
+ changeUuid: 'c6',
169
+ changesetUuid: 'cs1',
170
+ createdAt: new Date(),
171
+ createdByUserUuid: 'u1',
172
+ sourcePromptUuid: 'sp1',
173
+ type: 'update',
174
+ entityType: 'table',
175
+ entityTableName: 'payments',
176
+ entityName: 'somefield',
177
+ payload: {
178
+ patches: [
179
+ {
180
+ op: 'replace',
181
+ path: '/description',
182
+ value: 'Some field',
183
+ },
184
+ ],
185
+ },
186
+ };
187
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
188
+ expect(patchedExplores).toStrictEqual(mockExplores);
189
+ });
190
+ });
191
+ describe('tables', () => {
192
+ it('should update the table label', () => {
193
+ expect(mockExplores.orders.tables.orders.label).toEqual('Orders');
194
+ const change = {
195
+ changeUuid: 'c7',
196
+ changesetUuid: 'cs1',
197
+ createdAt: new Date(),
198
+ createdByUserUuid: 'u1',
199
+ sourcePromptUuid: 'sp1',
200
+ type: 'update',
201
+ entityType: 'table',
202
+ entityTableName: 'orders',
203
+ entityName: 'orders',
204
+ payload: {
205
+ patches: [
206
+ {
207
+ op: 'replace',
208
+ path: '/label',
209
+ value: 'Orders Table',
210
+ },
211
+ ],
212
+ },
213
+ };
214
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
215
+ expect(patchedExplores.orders.tables.orders.label).toEqual('Orders Table');
216
+ });
217
+ it('should update the joined table properties', () => {
218
+ expect(mockExplores.orders.tables.customers).not.toHaveProperty('description');
219
+ expect(mockExplores.customers.tables.customers).not.toHaveProperty('description');
220
+ const change = {
221
+ changeUuid: 'c8',
222
+ changesetUuid: 'cs1',
223
+ createdAt: new Date(),
224
+ createdByUserUuid: 'u1',
225
+ sourcePromptUuid: 'sp1',
226
+ type: 'update',
227
+ entityType: 'table',
228
+ entityTableName: 'customers',
229
+ entityName: 'customers',
230
+ payload: {
231
+ patches: [
232
+ {
233
+ op: 'add',
234
+ path: '/description',
235
+ value: 'Customers Table is a table that contains customer information',
236
+ },
237
+ ],
238
+ },
239
+ };
240
+ const patchedExplores = ChangesetUtils.applyChangeset({ ...changeset, changes: [change] }, mockExplores);
241
+ expect(patchedExplores.orders.tables.customers.description).toEqual('Customers Table is a table that contains customer information');
242
+ expect(patchedExplores.customers.tables.customers.description).toEqual('Customers Table is a table that contains customer information');
243
+ });
244
+ });
245
+ });
246
+ });
247
+ });
248
+ //# sourceMappingURL=changeset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changeset.test.js","sourceRoot":"","sources":["../../../src/utils/changeset.test.ts"],"names":[],"mappings":"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"}