@api-client/core 0.18.39 → 0.18.41
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.
- package/RELEASE_SETUP.md +4 -2
- package/build/oauth-popup.html +33 -0
- package/build/src/mocking/ModelingMock.d.ts +2 -0
- package/build/src/mocking/ModelingMock.d.ts.map +1 -1
- package/build/src/mocking/ModelingMock.js +2 -0
- package/build/src/mocking/ModelingMock.js.map +1 -1
- package/build/src/mocking/lib/DataCatalog.d.ts +53 -0
- package/build/src/mocking/lib/DataCatalog.d.ts.map +1 -0
- package/build/src/mocking/lib/DataCatalog.js +129 -0
- package/build/src/mocking/lib/DataCatalog.js.map +1 -0
- package/build/src/models/DataCatalog.d.ts +14 -0
- package/build/src/models/DataCatalog.d.ts.map +1 -1
- package/build/src/models/DataCatalog.js.map +1 -1
- package/build/src/sdk/DataCatalogSdk.d.ts +6 -6
- package/build/src/sdk/DataCatalogSdk.d.ts.map +1 -1
- package/build/src/sdk/DataCatalogSdk.js +6 -2
- package/build/src/sdk/DataCatalogSdk.js.map +1 -1
- package/build/src/sdk/SdkMock.d.ts +67 -46
- package/build/src/sdk/SdkMock.d.ts.map +1 -1
- package/build/src/sdk/SdkMock.js +327 -92
- package/build/src/sdk/SdkMock.js.map +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/data/models/example-generator-api.json +12 -12
- package/package.json +5 -4
- package/src/mocking/ModelingMock.ts +2 -0
- package/src/mocking/lib/DataCatalog.ts +166 -0
- package/src/models/DataCatalog.ts +14 -0
- package/src/sdk/DataCatalogSdk.ts +9 -7
- package/src/sdk/SdkMock.ts +781 -299
- package/tests/unit/mocking/current/DataCatalog.spec.ts +449 -0
- package/TESTING_READY.md +0 -114
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import { test } from '@japa/runner'
|
|
2
|
+
import sinon from 'sinon'
|
|
3
|
+
import { DataCatalog } from '../../../../src/mocking/lib/DataCatalog.js'
|
|
4
|
+
import { DataCatalogKind, DataCatalogVersionKind } from '../../../../src/models/kinds.js'
|
|
5
|
+
import type {
|
|
6
|
+
DataCatalogSchema,
|
|
7
|
+
DataCatalogSchemaWithVersion,
|
|
8
|
+
DataCatalogVersionInfo,
|
|
9
|
+
} from '../../../../src/models/DataCatalog.js'
|
|
10
|
+
import type { DataCatalogVersionSchema } from '../../../../src/models/DataCatalogVersion.js'
|
|
11
|
+
|
|
12
|
+
test.group('dataCatalog()', (group) => {
|
|
13
|
+
let catalog: DataCatalog
|
|
14
|
+
|
|
15
|
+
group.each.setup(() => {
|
|
16
|
+
catalog = new DataCatalog()
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
test('returns an object', ({ assert }) => {
|
|
20
|
+
const result = catalog.dataCatalog()
|
|
21
|
+
assert.typeOf(result, 'object')
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
test('has the {property} property of a type {type}')
|
|
25
|
+
.with([
|
|
26
|
+
{ property: 'kind', type: 'string' },
|
|
27
|
+
{ property: 'key', type: 'string' },
|
|
28
|
+
{ property: 'name', type: 'string' },
|
|
29
|
+
{ property: 'organization', type: 'string' },
|
|
30
|
+
{ property: 'file', type: 'string' },
|
|
31
|
+
{ property: 'scope', type: 'string' },
|
|
32
|
+
{ property: 'description', type: 'string' },
|
|
33
|
+
{ property: 'publishedBy', type: 'string' },
|
|
34
|
+
{ property: 'publishedAt', type: 'number' },
|
|
35
|
+
{ property: 'createdAt', type: 'number' },
|
|
36
|
+
{ property: 'updatedAt', type: 'number' },
|
|
37
|
+
{ property: 'tags', type: 'array' },
|
|
38
|
+
])
|
|
39
|
+
.run(({ assert }, { property, type }) => {
|
|
40
|
+
const result = catalog.dataCatalog()
|
|
41
|
+
assert.typeOf(result[property as keyof DataCatalogSchema], type)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
test('has the correct kind', ({ assert }) => {
|
|
45
|
+
const result = catalog.dataCatalog()
|
|
46
|
+
assert.equal(result.kind, DataCatalogKind)
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
test('scope is one of the valid values', ({ assert }) => {
|
|
50
|
+
const result = catalog.dataCatalog()
|
|
51
|
+
assert.include(['public', 'private', 'organization'], result.scope)
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test('uses passed key', ({ assert }) => {
|
|
55
|
+
const result = catalog.dataCatalog({ key: 'custom-key' })
|
|
56
|
+
assert.equal(result.key, 'custom-key')
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
test('uses passed name', ({ assert }) => {
|
|
60
|
+
const result = catalog.dataCatalog({ name: 'Custom Catalog' })
|
|
61
|
+
assert.equal(result.name, 'Custom Catalog')
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
test('uses passed organization', ({ assert }) => {
|
|
65
|
+
const result = catalog.dataCatalog({ organization: 'org-123' })
|
|
66
|
+
assert.equal(result.organization, 'org-123')
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test('uses passed file', ({ assert }) => {
|
|
70
|
+
const result = catalog.dataCatalog({ file: 'file-456' })
|
|
71
|
+
assert.equal(result.file, 'file-456')
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
test('uses passed scope', ({ assert }) => {
|
|
75
|
+
const result = catalog.dataCatalog({ scope: 'private' })
|
|
76
|
+
assert.equal(result.scope, 'private')
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
test('uses passed description', ({ assert }) => {
|
|
80
|
+
const result = catalog.dataCatalog({ description: 'Test description' })
|
|
81
|
+
assert.equal(result.description, 'Test description')
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
test('uses passed publishedBy', ({ assert }) => {
|
|
85
|
+
const result = catalog.dataCatalog({ publishedBy: 'user-789' })
|
|
86
|
+
assert.equal(result.publishedBy, 'user-789')
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
test('uses passed publishedAt', ({ assert }) => {
|
|
90
|
+
const timestamp = Date.now()
|
|
91
|
+
const result = catalog.dataCatalog({ publishedAt: timestamp })
|
|
92
|
+
assert.equal(result.publishedAt, timestamp)
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
test('uses passed createdAt', ({ assert }) => {
|
|
96
|
+
const timestamp = Date.now()
|
|
97
|
+
const result = catalog.dataCatalog({ createdAt: timestamp })
|
|
98
|
+
assert.equal(result.createdAt, timestamp)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
test('uses passed updatedAt', ({ assert }) => {
|
|
102
|
+
const timestamp = Date.now()
|
|
103
|
+
const result = catalog.dataCatalog({ updatedAt: timestamp })
|
|
104
|
+
assert.equal(result.updatedAt, timestamp)
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
test('uses passed tags', ({ assert }) => {
|
|
108
|
+
const tags = ['tag1', 'tag2', 'tag3']
|
|
109
|
+
const result = catalog.dataCatalog({ tags })
|
|
110
|
+
assert.deepEqual(result.tags, tags)
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
test.group('dataCatalogs()', (group) => {
|
|
115
|
+
let catalog: DataCatalog
|
|
116
|
+
|
|
117
|
+
group.each.setup(() => {
|
|
118
|
+
catalog = new DataCatalog()
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
test('returns an array', ({ assert }) => {
|
|
122
|
+
const result = catalog.dataCatalogs()
|
|
123
|
+
assert.typeOf(result, 'array')
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
test('list has default number of items', ({ assert }) => {
|
|
127
|
+
const result = catalog.dataCatalogs()
|
|
128
|
+
assert.lengthOf(result, 25)
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
test('returns requested number of items', ({ assert }) => {
|
|
132
|
+
const result = catalog.dataCatalogs(10)
|
|
133
|
+
assert.lengthOf(result, 10)
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
test('calls dataCatalog()', ({ assert }) => {
|
|
137
|
+
const spy = sinon.spy(catalog, 'dataCatalog')
|
|
138
|
+
catalog.dataCatalogs(5)
|
|
139
|
+
assert.equal(spy.callCount, 5)
|
|
140
|
+
})
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
test.group('dataCatalogVersion()', (group) => {
|
|
144
|
+
let catalog: DataCatalog
|
|
145
|
+
|
|
146
|
+
group.each.setup(() => {
|
|
147
|
+
catalog = new DataCatalog()
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
test('returns an object', ({ assert }) => {
|
|
151
|
+
const result = catalog.dataCatalogVersion()
|
|
152
|
+
assert.typeOf(result, 'object')
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
test('has the {property} property of a type {type}')
|
|
156
|
+
.with([
|
|
157
|
+
{ property: 'kind', type: 'string' },
|
|
158
|
+
{ property: 'key', type: 'string' },
|
|
159
|
+
{ property: 'catalogKey', type: 'string' },
|
|
160
|
+
{ property: 'scope', type: 'string' },
|
|
161
|
+
{ property: 'lifecycle', type: 'string' },
|
|
162
|
+
{ property: 'version', type: 'string' },
|
|
163
|
+
{ property: 'publishedBy', type: 'string' },
|
|
164
|
+
{ property: 'createdAt', type: 'number' },
|
|
165
|
+
{ property: 'updatedAt', type: 'number' },
|
|
166
|
+
{ property: 'changelog', type: 'string' },
|
|
167
|
+
])
|
|
168
|
+
.run(({ assert }, { property, type }) => {
|
|
169
|
+
const result = catalog.dataCatalogVersion()
|
|
170
|
+
assert.typeOf(result[property as keyof DataCatalogVersionSchema], type)
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
test('has the correct kind', ({ assert }) => {
|
|
174
|
+
const result = catalog.dataCatalogVersion()
|
|
175
|
+
assert.equal(result.kind, DataCatalogVersionKind)
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
test('scope is one of the valid values', ({ assert }) => {
|
|
179
|
+
const result = catalog.dataCatalogVersion()
|
|
180
|
+
assert.include(['public', 'private', 'organization'], result.scope)
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
test('lifecycle is one of the valid values', ({ assert }) => {
|
|
184
|
+
const result = catalog.dataCatalogVersion()
|
|
185
|
+
assert.include(['stable', 'beta', 'dev'], result.lifecycle)
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
test('version starts with v', ({ assert }) => {
|
|
189
|
+
const result = catalog.dataCatalogVersion()
|
|
190
|
+
assert.isTrue(result.version.startsWith('v'))
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
test('uses passed key', ({ assert }) => {
|
|
194
|
+
const result = catalog.dataCatalogVersion({ key: 'version-key' })
|
|
195
|
+
assert.equal(result.key, 'version-key')
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
test('uses passed catalogKey', ({ assert }) => {
|
|
199
|
+
const result = catalog.dataCatalogVersion({ catalogKey: 'catalog-123' })
|
|
200
|
+
assert.equal(result.catalogKey, 'catalog-123')
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
test('uses passed scope', ({ assert }) => {
|
|
204
|
+
const result = catalog.dataCatalogVersion({ scope: 'private' })
|
|
205
|
+
assert.equal(result.scope, 'private')
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
test('uses passed lifecycle', ({ assert }) => {
|
|
209
|
+
const result = catalog.dataCatalogVersion({ lifecycle: 'beta' })
|
|
210
|
+
assert.equal(result.lifecycle, 'beta')
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
test('uses passed version', ({ assert }) => {
|
|
214
|
+
const result = catalog.dataCatalogVersion({ version: 'v2.0.0' })
|
|
215
|
+
assert.equal(result.version, 'v2.0.0')
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
test('uses passed publishedBy', ({ assert }) => {
|
|
219
|
+
const result = catalog.dataCatalogVersion({ publishedBy: 'user-999' })
|
|
220
|
+
assert.equal(result.publishedBy, 'user-999')
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
test('uses passed createdAt', ({ assert }) => {
|
|
224
|
+
const timestamp = Date.now()
|
|
225
|
+
const result = catalog.dataCatalogVersion({ createdAt: timestamp })
|
|
226
|
+
assert.equal(result.createdAt, timestamp)
|
|
227
|
+
})
|
|
228
|
+
|
|
229
|
+
test('uses passed updatedAt', ({ assert }) => {
|
|
230
|
+
const timestamp = Date.now()
|
|
231
|
+
const result = catalog.dataCatalogVersion({ updatedAt: timestamp })
|
|
232
|
+
assert.equal(result.updatedAt, timestamp)
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
test('uses passed changelog', ({ assert }) => {
|
|
236
|
+
const result = catalog.dataCatalogVersion({ changelog: 'Custom changelog' })
|
|
237
|
+
assert.equal(result.changelog, 'Custom changelog')
|
|
238
|
+
})
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
test.group('dataCatalogVersions()', (group) => {
|
|
242
|
+
let catalog: DataCatalog
|
|
243
|
+
|
|
244
|
+
group.each.setup(() => {
|
|
245
|
+
catalog = new DataCatalog()
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
test('returns an array', ({ assert }) => {
|
|
249
|
+
const result = catalog.dataCatalogVersions()
|
|
250
|
+
assert.typeOf(result, 'array')
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
test('list has default number of items', ({ assert }) => {
|
|
254
|
+
const result = catalog.dataCatalogVersions()
|
|
255
|
+
assert.lengthOf(result, 25)
|
|
256
|
+
})
|
|
257
|
+
|
|
258
|
+
test('returns requested number of items', ({ assert }) => {
|
|
259
|
+
const result = catalog.dataCatalogVersions(7)
|
|
260
|
+
assert.lengthOf(result, 7)
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
test('calls dataCatalogVersion()', ({ assert }) => {
|
|
264
|
+
const spy = sinon.spy(catalog, 'dataCatalogVersion')
|
|
265
|
+
catalog.dataCatalogVersions(3)
|
|
266
|
+
assert.equal(spy.callCount, 3)
|
|
267
|
+
})
|
|
268
|
+
})
|
|
269
|
+
|
|
270
|
+
test.group('dataCatalogWithVersion()', (group) => {
|
|
271
|
+
let catalog: DataCatalog
|
|
272
|
+
|
|
273
|
+
group.each.setup(() => {
|
|
274
|
+
catalog = new DataCatalog()
|
|
275
|
+
})
|
|
276
|
+
|
|
277
|
+
test('returns an object', ({ assert }) => {
|
|
278
|
+
const result = catalog.dataCatalogWithVersion()
|
|
279
|
+
assert.typeOf(result, 'object')
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
test('has the {property} property of a type {type}')
|
|
283
|
+
.with([
|
|
284
|
+
{ property: 'kind', type: 'string' },
|
|
285
|
+
{ property: 'key', type: 'string' },
|
|
286
|
+
{ property: 'name', type: 'string' },
|
|
287
|
+
{ property: 'organization', type: 'string' },
|
|
288
|
+
{ property: 'file', type: 'string' },
|
|
289
|
+
{ property: 'scope', type: 'string' },
|
|
290
|
+
{ property: 'description', type: 'string' },
|
|
291
|
+
{ property: 'publishedBy', type: 'string' },
|
|
292
|
+
{ property: 'publishedAt', type: 'number' },
|
|
293
|
+
{ property: 'createdAt', type: 'number' },
|
|
294
|
+
{ property: 'updatedAt', type: 'number' },
|
|
295
|
+
{ property: 'tags', type: 'array' },
|
|
296
|
+
{ property: 'versions', type: 'array' },
|
|
297
|
+
])
|
|
298
|
+
.run(({ assert }, { property, type }) => {
|
|
299
|
+
const result = catalog.dataCatalogWithVersion()
|
|
300
|
+
assert.typeOf(result[property as keyof DataCatalogSchemaWithVersion], type)
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
test('has at least one version', ({ assert }) => {
|
|
304
|
+
const result = catalog.dataCatalogWithVersion()
|
|
305
|
+
assert.isAtLeast(result.versions.length, 1)
|
|
306
|
+
})
|
|
307
|
+
|
|
308
|
+
test('has at most 20 versions', ({ assert }) => {
|
|
309
|
+
const result = catalog.dataCatalogWithVersion()
|
|
310
|
+
assert.isAtMost(result.versions.length, 20)
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
test('each version has required properties', ({ assert }) => {
|
|
314
|
+
const result = catalog.dataCatalogWithVersion()
|
|
315
|
+
result.versions.forEach((version) => {
|
|
316
|
+
assert.typeOf(version.version, 'string')
|
|
317
|
+
assert.typeOf(version.lifecycle, 'string')
|
|
318
|
+
assert.include(['stable', 'beta', 'dev'], version.lifecycle)
|
|
319
|
+
})
|
|
320
|
+
})
|
|
321
|
+
|
|
322
|
+
test('versions follow semantic versioning pattern', ({ assert }) => {
|
|
323
|
+
const result = catalog.dataCatalogWithVersion()
|
|
324
|
+
result.versions.forEach((version) => {
|
|
325
|
+
assert.match(version.version, /^v\d+\.\d+\.\d+$/)
|
|
326
|
+
})
|
|
327
|
+
})
|
|
328
|
+
|
|
329
|
+
test('uses passed initialization values', ({ assert }) => {
|
|
330
|
+
const result = catalog.dataCatalogWithVersion({
|
|
331
|
+
key: 'custom-key',
|
|
332
|
+
name: 'Custom Name',
|
|
333
|
+
})
|
|
334
|
+
assert.equal(result.key, 'custom-key')
|
|
335
|
+
assert.equal(result.name, 'Custom Name')
|
|
336
|
+
assert.isArray(result.versions)
|
|
337
|
+
})
|
|
338
|
+
})
|
|
339
|
+
|
|
340
|
+
test.group('dataCatalogsWithVersion()', (group) => {
|
|
341
|
+
let catalog: DataCatalog
|
|
342
|
+
|
|
343
|
+
group.each.setup(() => {
|
|
344
|
+
catalog = new DataCatalog()
|
|
345
|
+
})
|
|
346
|
+
|
|
347
|
+
test('returns an array', ({ assert }) => {
|
|
348
|
+
const result = catalog.dataCatalogsWithVersion()
|
|
349
|
+
assert.typeOf(result, 'array')
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
test('list has default number of items', ({ assert }) => {
|
|
353
|
+
const result = catalog.dataCatalogsWithVersion()
|
|
354
|
+
assert.lengthOf(result, 3)
|
|
355
|
+
})
|
|
356
|
+
|
|
357
|
+
test('returns requested number of items', ({ assert }) => {
|
|
358
|
+
const result = catalog.dataCatalogsWithVersion(5)
|
|
359
|
+
assert.lengthOf(result, 5)
|
|
360
|
+
})
|
|
361
|
+
|
|
362
|
+
test('calls dataCatalogWithVersion()', ({ assert }) => {
|
|
363
|
+
const spy = sinon.spy(catalog, 'dataCatalogWithVersion')
|
|
364
|
+
catalog.dataCatalogsWithVersion(4)
|
|
365
|
+
assert.equal(spy.callCount, 4)
|
|
366
|
+
})
|
|
367
|
+
|
|
368
|
+
test('each item has versions array', ({ assert }) => {
|
|
369
|
+
const result = catalog.dataCatalogsWithVersion(2)
|
|
370
|
+
result.forEach((item) => {
|
|
371
|
+
assert.isArray(item.versions)
|
|
372
|
+
assert.isAtLeast(item.versions.length, 1)
|
|
373
|
+
})
|
|
374
|
+
})
|
|
375
|
+
})
|
|
376
|
+
|
|
377
|
+
test.group('versionInfo()', (group) => {
|
|
378
|
+
let catalog: DataCatalog
|
|
379
|
+
|
|
380
|
+
group.each.setup(() => {
|
|
381
|
+
catalog = new DataCatalog()
|
|
382
|
+
})
|
|
383
|
+
|
|
384
|
+
test('returns an object', ({ assert }) => {
|
|
385
|
+
const result = catalog.versionInfo()
|
|
386
|
+
assert.typeOf(result, 'object')
|
|
387
|
+
})
|
|
388
|
+
|
|
389
|
+
test('has the {property} property of a type {type}')
|
|
390
|
+
.with([
|
|
391
|
+
{ property: 'key', type: 'string' },
|
|
392
|
+
{ property: 'version', type: 'string' },
|
|
393
|
+
{ property: 'published', type: 'number' },
|
|
394
|
+
])
|
|
395
|
+
.run(({ assert }, { property, type }) => {
|
|
396
|
+
const result = catalog.versionInfo()
|
|
397
|
+
assert.typeOf(result[property as keyof DataCatalogVersionInfo], type)
|
|
398
|
+
})
|
|
399
|
+
|
|
400
|
+
test('version starts with v', ({ assert }) => {
|
|
401
|
+
const result = catalog.versionInfo()
|
|
402
|
+
assert.isTrue(result.version.startsWith('v'))
|
|
403
|
+
})
|
|
404
|
+
|
|
405
|
+
test('uses passed key', ({ assert }) => {
|
|
406
|
+
const result = catalog.versionInfo({ key: 'info-key' })
|
|
407
|
+
assert.equal(result.key, 'info-key')
|
|
408
|
+
})
|
|
409
|
+
|
|
410
|
+
test('uses passed version', ({ assert }) => {
|
|
411
|
+
const result = catalog.versionInfo({ version: 'v3.0.0' })
|
|
412
|
+
assert.equal(result.version, 'v3.0.0')
|
|
413
|
+
})
|
|
414
|
+
|
|
415
|
+
test('uses passed published timestamp', ({ assert }) => {
|
|
416
|
+
const timestamp = Date.now()
|
|
417
|
+
const result = catalog.versionInfo({ published: timestamp })
|
|
418
|
+
assert.equal(result.published, timestamp)
|
|
419
|
+
})
|
|
420
|
+
})
|
|
421
|
+
|
|
422
|
+
test.group('versionInfos()', (group) => {
|
|
423
|
+
let catalog: DataCatalog
|
|
424
|
+
|
|
425
|
+
group.each.setup(() => {
|
|
426
|
+
catalog = new DataCatalog()
|
|
427
|
+
})
|
|
428
|
+
|
|
429
|
+
test('returns an array', ({ assert }) => {
|
|
430
|
+
const result = catalog.versionInfos()
|
|
431
|
+
assert.typeOf(result, 'array')
|
|
432
|
+
})
|
|
433
|
+
|
|
434
|
+
test('list has default number of items', ({ assert }) => {
|
|
435
|
+
const result = catalog.versionInfos()
|
|
436
|
+
assert.lengthOf(result, 5)
|
|
437
|
+
})
|
|
438
|
+
|
|
439
|
+
test('returns requested number of items', ({ assert }) => {
|
|
440
|
+
const result = catalog.versionInfos(8)
|
|
441
|
+
assert.lengthOf(result, 8)
|
|
442
|
+
})
|
|
443
|
+
|
|
444
|
+
test('calls versionInfo()', ({ assert }) => {
|
|
445
|
+
const spy = sinon.spy(catalog, 'versionInfo')
|
|
446
|
+
catalog.versionInfos(6)
|
|
447
|
+
assert.equal(spy.callCount, 6)
|
|
448
|
+
})
|
|
449
|
+
})
|
package/TESTING_READY.md
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
# Testing Setup Complete! 🎉
|
|
2
|
-
|
|
3
|
-
Your API Client Core project now has a comprehensive testing setup with documentation and utilities.
|
|
4
|
-
|
|
5
|
-
## What's Been Added
|
|
6
|
-
|
|
7
|
-
### 📚 Documentation
|
|
8
|
-
|
|
9
|
-
- **`TESTING_SETUP.md`** - Complete testing guide and reference
|
|
10
|
-
- **Test Templates** - Ready-to-use templates for new tests
|
|
11
|
-
|
|
12
|
-
### 🛠️ Utilities
|
|
13
|
-
|
|
14
|
-
- **`tests/test-utils.ts`** - Common testing utilities and helpers
|
|
15
|
-
- **`tests/example-test-setup.ts`** - Working examples of test patterns
|
|
16
|
-
- **`tests/template-node.spec.ts`** - Template for Node.js tests
|
|
17
|
-
- **`test/template-browser.test.ts`** - Template for browser tests
|
|
18
|
-
|
|
19
|
-
### ⚡ VS Code Tasks
|
|
20
|
-
|
|
21
|
-
- **Test: Run All Tests** - Runs both Node.js and browser tests
|
|
22
|
-
- Additional test tasks available in the Command Palette
|
|
23
|
-
|
|
24
|
-
## Quick Start
|
|
25
|
-
|
|
26
|
-
### Run All Tests
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npm test
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
### Run Node.js Tests Only
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npm run test:node
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Run Browser Tests Only
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npm run test:browser
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### Run Tests with Coverage
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm run test:coverage
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Run Tests in Watch Mode
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
npm run test:browser:watch
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
## Your Testing Stack
|
|
57
|
-
|
|
58
|
-
### Node.js Tests (Japa)
|
|
59
|
-
|
|
60
|
-
- **Location**: `tests/unit/**/*.spec.ts`
|
|
61
|
-
- **Framework**: Japa with Assert plugin
|
|
62
|
-
- **Features**: Sinon mocking, API client testing, type checking
|
|
63
|
-
- **Run with**: `npm run test:node`
|
|
64
|
-
|
|
65
|
-
### Browser Tests (Web Test Runner)
|
|
66
|
-
|
|
67
|
-
- **Location**: `test/**/*.browser.test.ts` or `test/**/*.spec.ts`
|
|
68
|
-
- **Framework**: Web Test Runner with Chai
|
|
69
|
-
- **Features**: Playwright automation, OAuth2 mock server, DOM testing
|
|
70
|
-
- **Run with**: `npm run test:browser`
|
|
71
|
-
|
|
72
|
-
## File Naming Conventions
|
|
73
|
-
|
|
74
|
-
- **Node.js tests**: `*.spec.ts` in `tests/unit/`
|
|
75
|
-
- **Browser tests**: `*.browser.test.ts` or `*.spec.ts` in `test/`
|
|
76
|
-
- **Shared utilities**: Place in `test/` directory
|
|
77
|
-
|
|
78
|
-
## Next Steps
|
|
79
|
-
|
|
80
|
-
1. **Review the documentation** in `TESTING_SETUP.md`
|
|
81
|
-
2. **Explore the examples** in `test/example-test-setup.ts`
|
|
82
|
-
3. **Use the templates** to create new tests:
|
|
83
|
-
- Copy `test/template-node.spec.ts` for Node.js tests
|
|
84
|
-
- Copy `test/template-browser.test.ts` for browser tests
|
|
85
|
-
4. **Run the existing tests** to ensure everything works
|
|
86
|
-
5. **Write tests for your modules** using the patterns shown
|
|
87
|
-
|
|
88
|
-
## Testing Best Practices
|
|
89
|
-
|
|
90
|
-
✅ **Separate Node.js and browser tests** - Use appropriate file naming
|
|
91
|
-
✅ **Use test utilities** - Leverage `TestUtils` for common operations
|
|
92
|
-
✅ **Mock external dependencies** - Use Sinon for consistent mocking
|
|
93
|
-
✅ **Test both success and error cases** - Ensure comprehensive coverage
|
|
94
|
-
✅ **Group related tests** - Use test groups for better organization
|
|
95
|
-
✅ **Clean up after tests** - Restore mocks and clean up resources
|
|
96
|
-
|
|
97
|
-
## Available Test Utilities
|
|
98
|
-
|
|
99
|
-
- `TestUtils.createMockResponse()` - HTTP response mocking
|
|
100
|
-
- `TestUtils.createTestRequest()` - HTTP request creation
|
|
101
|
-
- `TestUtils.generateTestData()` - Random test data
|
|
102
|
-
- `TestUtils.assertThrows()` - Error testing
|
|
103
|
-
- `TestUtils.mockFetch()` - Fetch API mocking
|
|
104
|
-
- `BrowserTestUtils.waitForElement()` - DOM element waiting
|
|
105
|
-
- `BrowserTestUtils.createMockLocalStorage()` - Storage mocking
|
|
106
|
-
|
|
107
|
-
## Need Help?
|
|
108
|
-
|
|
109
|
-
- Check `TESTING_SETUP.md` for detailed documentation
|
|
110
|
-
- Look at existing tests in `tests/unit/` for examples
|
|
111
|
-
- Review the templates for common patterns
|
|
112
|
-
- Run tests with `--verbose` flag for more output
|
|
113
|
-
|
|
114
|
-
Happy testing! 🚀
|