w-orm-mongodb 1.1.39 → 1.1.40
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/README.md +29 -1
- package/dist/w-orm-mongodb.umd.js +2 -2
- package/dist/w-orm-mongodb.umd.js.map +1 -1
- package/docs/WOrmMongodb.html +62 -18
- package/docs/WOrmMongodb.mjs.html +53 -21
- package/docs/index.html +1 -1
- package/package.json +1 -1
- package/src/WOrmMongodb.mjs +52 -20
- package/test/api-basic.test.mjs +229 -1
- package/test/api-gfs.test.mjs +132 -0
package/test/api-basic.test.mjs
CHANGED
|
@@ -10,7 +10,7 @@ let ctDb = 'worm'
|
|
|
10
10
|
let ctPort = null //容器對外埠, 由startContainer動態取得
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
//genOpt
|
|
13
|
+
//genOpt, 不帶autoGenPk以驗證其預設值
|
|
14
14
|
let genOpt = (cl) => {
|
|
15
15
|
return {
|
|
16
16
|
url: genUrl(ctPort),
|
|
@@ -19,6 +19,16 @@ let genOpt = (cl) => {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
//genOptPk, 明確指定autoGenPk
|
|
23
|
+
let genOptPk = (cl, autoGenPk) => {
|
|
24
|
+
return {
|
|
25
|
+
url: genUrl(ctPort),
|
|
26
|
+
db: ctDb,
|
|
27
|
+
cl,
|
|
28
|
+
autoGenPk,
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
22
32
|
//genKeys, 取回傳物件之鍵集合, 用於驗證鍵集合固定
|
|
23
33
|
let genKeys = (v) => {
|
|
24
34
|
return Object.keys(v).sort().join(',')
|
|
@@ -1129,6 +1139,224 @@ describe('change event', function() {
|
|
|
1129
1139
|
})
|
|
1130
1140
|
|
|
1131
1141
|
|
|
1142
|
+
describe('autoGenPk', function() {
|
|
1143
|
+
let rt = null
|
|
1144
|
+
let vans = {}
|
|
1145
|
+
let vget = {}
|
|
1146
|
+
|
|
1147
|
+
before(async function() {
|
|
1148
|
+
this.timeout(120000)
|
|
1149
|
+
|
|
1150
|
+
//woDef, 未給autoGenPk以驗證其預設值為true
|
|
1151
|
+
let woDef = WOrm(genOpt('pkdefault'))
|
|
1152
|
+
await woDef.delAll()
|
|
1153
|
+
|
|
1154
|
+
//預設未帶id者須自動產生, 且產生之id須為有效字串
|
|
1155
|
+
vget[1] = await woDef.insert({ name: 'no-id' })
|
|
1156
|
+
let ssDef = await woDef.select()
|
|
1157
|
+
vget[2] = ssDef.length
|
|
1158
|
+
vget[3] = typeof ssDef[0].id === 'string' && ssDef[0].id.length > 0
|
|
1159
|
+
|
|
1160
|
+
//預設之save未帶id者亦須自動產生
|
|
1161
|
+
vget[4] = await woDef.save({ name: 'no-id-save' })
|
|
1162
|
+
vget[5] = (await woDef.select()).length
|
|
1163
|
+
|
|
1164
|
+
//woOn, 明確開啟
|
|
1165
|
+
let woOn = WOrm(genOptPk('pkon', true))
|
|
1166
|
+
await woOn.delAll()
|
|
1167
|
+
vget[6] = await woOn.insert({ name: 'no-id' })
|
|
1168
|
+
vget[7] = (await woOn.select()).length
|
|
1169
|
+
|
|
1170
|
+
//woOff, 關閉後主鍵須由呼叫端自備
|
|
1171
|
+
let woOff = WOrm(genOptPk('pkoff', false))
|
|
1172
|
+
await woOff.delAll()
|
|
1173
|
+
|
|
1174
|
+
//帶id者正常寫入
|
|
1175
|
+
vget[8] = await woOff.insert({ id: 'p1', name: 'given' })
|
|
1176
|
+
vget[9] = await woOff.selectByPk('p1')
|
|
1177
|
+
|
|
1178
|
+
//未帶id者須reject, 屬整批性錯誤而不進入逐筆結果
|
|
1179
|
+
rt = null
|
|
1180
|
+
// vans[10] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1181
|
+
await woOff.insert({ name: 'no-id' })
|
|
1182
|
+
.then(function(msg) {
|
|
1183
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
1184
|
+
})
|
|
1185
|
+
.catch(function(msg) {
|
|
1186
|
+
rt = msg.toString()
|
|
1187
|
+
})
|
|
1188
|
+
vget[10] = rt
|
|
1189
|
+
|
|
1190
|
+
//save未帶id者亦須reject, autoInsert兩種取值皆同
|
|
1191
|
+
rt = null
|
|
1192
|
+
// vans[11] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1193
|
+
await woOff.save({ name: 'no-id' })
|
|
1194
|
+
.then(function(msg) {
|
|
1195
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
1196
|
+
})
|
|
1197
|
+
.catch(function(msg) {
|
|
1198
|
+
rt = msg.toString()
|
|
1199
|
+
})
|
|
1200
|
+
vget[11] = rt
|
|
1201
|
+
|
|
1202
|
+
rt = null
|
|
1203
|
+
// vans[12] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1204
|
+
await woOff.save({ name: 'no-id' }, { autoInsert: false })
|
|
1205
|
+
.then(function(msg) {
|
|
1206
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
1207
|
+
})
|
|
1208
|
+
.catch(function(msg) {
|
|
1209
|
+
rt = msg.toString()
|
|
1210
|
+
})
|
|
1211
|
+
vget[12] = rt
|
|
1212
|
+
|
|
1213
|
+
//整批reject時, 同批之有效筆數亦不得被寫入
|
|
1214
|
+
rt = null
|
|
1215
|
+
// vans[13] = 'Error: invalid data[1].id, autoGenPk is false'
|
|
1216
|
+
await woOff.insert([
|
|
1217
|
+
{ id: 'p-ok1', name: 'ok1' },
|
|
1218
|
+
{ name: 'no-id' },
|
|
1219
|
+
{ id: 'p-ok2', name: 'ok2' },
|
|
1220
|
+
])
|
|
1221
|
+
.then(function(msg) {
|
|
1222
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
1223
|
+
})
|
|
1224
|
+
.catch(function(msg) {
|
|
1225
|
+
rt = msg.toString()
|
|
1226
|
+
})
|
|
1227
|
+
vget[13] = rt
|
|
1228
|
+
vget[14] = [
|
|
1229
|
+
await woOff.selectByPk('p-ok1'),
|
|
1230
|
+
await woOff.selectByPk('p-ok2'),
|
|
1231
|
+
]
|
|
1232
|
+
|
|
1233
|
+
//save之整批reject亦同
|
|
1234
|
+
await woOff.insert({ id: 'p-base', name: 'base' })
|
|
1235
|
+
await woOff.save([
|
|
1236
|
+
{ id: 'p-base', name: 'should-not-write' },
|
|
1237
|
+
{ name: 'no-id' },
|
|
1238
|
+
]).catch(() => {})
|
|
1239
|
+
vget[15] = (await woOff.selectByPk('p-base')).name
|
|
1240
|
+
|
|
1241
|
+
//del不受autoGenPk影響, 未帶有效id仍為該筆ok為0而非reject
|
|
1242
|
+
vget[16] = await woOff.del({ name: 'no-id' })
|
|
1243
|
+
|
|
1244
|
+
//autoGenPk為建構層設定, 不得於option逐次覆寫
|
|
1245
|
+
rt = null
|
|
1246
|
+
// vans[17] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1247
|
+
await woOff.save({ name: 'no-id' }, { autoGenPk: true })
|
|
1248
|
+
.then(function(msg) {
|
|
1249
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
1250
|
+
})
|
|
1251
|
+
.catch(function(msg) {
|
|
1252
|
+
rt = msg.toString()
|
|
1253
|
+
})
|
|
1254
|
+
vget[17] = rt
|
|
1255
|
+
|
|
1256
|
+
//輸入無效仍依T5回空結果, 不因autoGenPk為false而reject
|
|
1257
|
+
vget[18] = await woOff.insert(null)
|
|
1258
|
+
vget[19] = await woOff.save(null)
|
|
1259
|
+
|
|
1260
|
+
})
|
|
1261
|
+
|
|
1262
|
+
vans[1] = { n: 1, nInserted: 1, ok: 1 }
|
|
1263
|
+
it(`should get ${JSON.stringify(vans[1])} for insert without id by default autoGenPk`, async function() {
|
|
1264
|
+
assert.strict.deepStrictEqual(vget[1], vans[1])
|
|
1265
|
+
})
|
|
1266
|
+
|
|
1267
|
+
vans[2] = 1
|
|
1268
|
+
it(`should get ${JSON.stringify(vans[2])} for records after insert without id by default autoGenPk`, async function() {
|
|
1269
|
+
assert.strict.deepStrictEqual(vget[2], vans[2])
|
|
1270
|
+
})
|
|
1271
|
+
|
|
1272
|
+
vans[3] = true
|
|
1273
|
+
it(`should get ${JSON.stringify(vans[3])} for generated id by default autoGenPk`, async function() {
|
|
1274
|
+
assert.strict.deepStrictEqual(vget[3], vans[3])
|
|
1275
|
+
})
|
|
1276
|
+
|
|
1277
|
+
vans[4] = [{ n: 1, nInserted: 1, nModified: 0, ok: 1 }]
|
|
1278
|
+
it(`should get ${JSON.stringify(vans[4])} for save without id by default autoGenPk`, async function() {
|
|
1279
|
+
assert.strict.deepStrictEqual(vget[4], vans[4])
|
|
1280
|
+
})
|
|
1281
|
+
|
|
1282
|
+
vans[5] = 2
|
|
1283
|
+
it(`should get ${JSON.stringify(vans[5])} for records after save without id by default autoGenPk`, async function() {
|
|
1284
|
+
assert.strict.deepStrictEqual(vget[5], vans[5])
|
|
1285
|
+
})
|
|
1286
|
+
|
|
1287
|
+
vans[6] = { n: 1, nInserted: 1, ok: 1 }
|
|
1288
|
+
it(`should get ${JSON.stringify(vans[6])} for insert without id by autoGenPk=true`, async function() {
|
|
1289
|
+
assert.strict.deepStrictEqual(vget[6], vans[6])
|
|
1290
|
+
})
|
|
1291
|
+
|
|
1292
|
+
vans[7] = 1
|
|
1293
|
+
it(`should get ${JSON.stringify(vans[7])} for records after insert without id by autoGenPk=true`, async function() {
|
|
1294
|
+
assert.strict.deepStrictEqual(vget[7], vans[7])
|
|
1295
|
+
})
|
|
1296
|
+
|
|
1297
|
+
vans[8] = { n: 1, nInserted: 1, ok: 1 }
|
|
1298
|
+
it(`should get ${JSON.stringify(vans[8])} for insert with id by autoGenPk=false`, async function() {
|
|
1299
|
+
assert.strict.deepStrictEqual(vget[8], vans[8])
|
|
1300
|
+
})
|
|
1301
|
+
|
|
1302
|
+
vans[9] = { id: 'p1', name: 'given' }
|
|
1303
|
+
it(`should get ${JSON.stringify(vans[9])} for record after insert with id by autoGenPk=false`, async function() {
|
|
1304
|
+
assert.strict.deepStrictEqual(vget[9], vans[9])
|
|
1305
|
+
})
|
|
1306
|
+
|
|
1307
|
+
vans[10] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1308
|
+
it(`should get ${JSON.stringify(vans[10])} for insert without id by autoGenPk=false`, async function() {
|
|
1309
|
+
assert.strict.deepStrictEqual(vget[10], vans[10])
|
|
1310
|
+
})
|
|
1311
|
+
|
|
1312
|
+
vans[11] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1313
|
+
it(`should get ${JSON.stringify(vans[11])} for save without id by autoGenPk=false`, async function() {
|
|
1314
|
+
assert.strict.deepStrictEqual(vget[11], vans[11])
|
|
1315
|
+
})
|
|
1316
|
+
|
|
1317
|
+
vans[12] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1318
|
+
it(`should get ${JSON.stringify(vans[12])} for save(autoInsert=false) without id by autoGenPk=false`, async function() {
|
|
1319
|
+
assert.strict.deepStrictEqual(vget[12], vans[12])
|
|
1320
|
+
})
|
|
1321
|
+
|
|
1322
|
+
vans[13] = 'Error: invalid data[1].id, autoGenPk is false'
|
|
1323
|
+
it(`should get ${JSON.stringify(vans[13])} for insert with 1 record without id by autoGenPk=false`, async function() {
|
|
1324
|
+
assert.strict.deepStrictEqual(vget[13], vans[13])
|
|
1325
|
+
})
|
|
1326
|
+
|
|
1327
|
+
vans[14] = [null, null]
|
|
1328
|
+
it(`should get ${JSON.stringify(vans[14])} for not writing valid records in rejected batch`, async function() {
|
|
1329
|
+
assert.strict.deepStrictEqual(vget[14], vans[14])
|
|
1330
|
+
})
|
|
1331
|
+
|
|
1332
|
+
vans[15] = 'base'
|
|
1333
|
+
it(`should get ${JSON.stringify(vans[15])} for not writing valid records in rejected save batch`, async function() {
|
|
1334
|
+
assert.strict.deepStrictEqual(vget[15], vans[15])
|
|
1335
|
+
})
|
|
1336
|
+
|
|
1337
|
+
vans[16] = [{ n: 0, nDeleted: 0, ok: 0, err: 'invalid id[undefined]' }]
|
|
1338
|
+
it(`should get ${JSON.stringify(vans[16])} for del without id by autoGenPk=false`, async function() {
|
|
1339
|
+
assert.strict.deepStrictEqual(vget[16], vans[16])
|
|
1340
|
+
})
|
|
1341
|
+
|
|
1342
|
+
vans[17] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
1343
|
+
it(`should get ${JSON.stringify(vans[17])} for not overriding autoGenPk by option`, async function() {
|
|
1344
|
+
assert.strict.deepStrictEqual(vget[17], vans[17])
|
|
1345
|
+
})
|
|
1346
|
+
|
|
1347
|
+
vans[18] = { n: 0, nInserted: 0, ok: 1 }
|
|
1348
|
+
it(`should get ${JSON.stringify(vans[18])} for insert with invalid data by autoGenPk=false`, async function() {
|
|
1349
|
+
assert.strict.deepStrictEqual(vget[18], vans[18])
|
|
1350
|
+
})
|
|
1351
|
+
|
|
1352
|
+
vans[19] = []
|
|
1353
|
+
it(`should get ${JSON.stringify(vans[19])} for save with invalid data by autoGenPk=false`, async function() {
|
|
1354
|
+
assert.strict.deepStrictEqual(vget[19], vans[19])
|
|
1355
|
+
})
|
|
1356
|
+
|
|
1357
|
+
})
|
|
1358
|
+
|
|
1359
|
+
|
|
1132
1360
|
describe('cross process concurrency', function() {
|
|
1133
1361
|
let vans = {}
|
|
1134
1362
|
let vget = {}
|
package/test/api-gfs.test.mjs
CHANGED
|
@@ -20,6 +20,16 @@ let genOpt = (cl) => {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
//genOptPk, 明確指定autoGenPk
|
|
24
|
+
let genOptPk = (cl, autoGenPk) => {
|
|
25
|
+
return {
|
|
26
|
+
url: genUrl(ctPort),
|
|
27
|
+
db: ctDb,
|
|
28
|
+
cl,
|
|
29
|
+
autoGenPk,
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
23
33
|
//genKeys, 取回傳物件之鍵集合, 用於驗證鍵集合固定
|
|
24
34
|
let genKeys = (v) => {
|
|
25
35
|
return Object.keys(v).sort().join(',')
|
|
@@ -528,6 +538,128 @@ describe('gfs legacy duplicated id', function() {
|
|
|
528
538
|
})
|
|
529
539
|
|
|
530
540
|
|
|
541
|
+
describe('gfs autoGenPk', function() {
|
|
542
|
+
let rt = null
|
|
543
|
+
let vans = {}
|
|
544
|
+
let vget = {}
|
|
545
|
+
|
|
546
|
+
before(async function() {
|
|
547
|
+
this.timeout(300000)
|
|
548
|
+
|
|
549
|
+
//woDef, 未給autoGenPk以驗證其預設值為true
|
|
550
|
+
let clDef = 'pkdefaultGfs'
|
|
551
|
+
let woDef = WOrm(genOpt(clDef))
|
|
552
|
+
await woDef.delAllGfs()
|
|
553
|
+
|
|
554
|
+
//預設未帶id者須自動產生
|
|
555
|
+
vget[1] = await woDef.insertGfs({ u8a: genU8a(100, 1) })
|
|
556
|
+
vget[2] = (await countDocs(clDef)).files
|
|
557
|
+
|
|
558
|
+
//woOff, 關閉後主鍵須由呼叫端自備
|
|
559
|
+
let clOff = 'pkoffGfs'
|
|
560
|
+
let woOff = WOrm(genOptPk(clOff, false))
|
|
561
|
+
await woOff.delAllGfs()
|
|
562
|
+
|
|
563
|
+
//帶id者正常寫入
|
|
564
|
+
vget[3] = await woOff.insertGfs({ id: 'g1', u8a: genU8a(100, 2) })
|
|
565
|
+
vget[4] = genHash((await woOff.selectByPkGfs('g1')).u8a) === genHash(genU8a(100, 2))
|
|
566
|
+
|
|
567
|
+
//未帶id者須reject
|
|
568
|
+
rt = null
|
|
569
|
+
// vans[5] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
570
|
+
await woOff.insertGfs({ u8a: genU8a(100, 3) })
|
|
571
|
+
.then(function(msg) {
|
|
572
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
573
|
+
})
|
|
574
|
+
.catch(function(msg) {
|
|
575
|
+
rt = msg.toString()
|
|
576
|
+
})
|
|
577
|
+
vget[5] = rt
|
|
578
|
+
|
|
579
|
+
//整批reject時, 同批之有效筆數亦不得被寫入
|
|
580
|
+
let cBefore = await countDocs(clOff)
|
|
581
|
+
rt = null
|
|
582
|
+
// vans[6] = 'Error: invalid data[1].id, autoGenPk is false'
|
|
583
|
+
await woOff.insertGfs([
|
|
584
|
+
{ id: 'g-ok1', u8a: genU8a(100, 4) },
|
|
585
|
+
{ u8a: genU8a(100, 5) },
|
|
586
|
+
{ id: 'g-ok2', u8a: genU8a(100, 6) },
|
|
587
|
+
])
|
|
588
|
+
.then(function(msg) {
|
|
589
|
+
rt = `不應resolve: ${JSON.stringify(msg)}`
|
|
590
|
+
})
|
|
591
|
+
.catch(function(msg) {
|
|
592
|
+
rt = msg.toString()
|
|
593
|
+
})
|
|
594
|
+
vget[6] = rt
|
|
595
|
+
let cAfter = await countDocs(clOff)
|
|
596
|
+
vget[7] = { files: cAfter.files - cBefore.files, chunks: cAfter.chunks - cBefore.chunks }
|
|
597
|
+
vget[8] = [
|
|
598
|
+
await woOff.selectByPkGfs('g-ok1'),
|
|
599
|
+
await woOff.selectByPkGfs('g-ok2'),
|
|
600
|
+
]
|
|
601
|
+
|
|
602
|
+
//delGfs不受autoGenPk影響, 未帶有效id仍為該筆ok為0而非reject
|
|
603
|
+
vget[9] = await woOff.delGfs({ u8a: genU8a(10) })
|
|
604
|
+
|
|
605
|
+
//輸入無效仍依T5回空結果
|
|
606
|
+
vget[10] = await woOff.insertGfs(null)
|
|
607
|
+
|
|
608
|
+
})
|
|
609
|
+
|
|
610
|
+
vans[1] = { n: 1, nInserted: 1, ok: 1 }
|
|
611
|
+
it(`should get ${JSON.stringify(vans[1])} for insertGfs without id by default autoGenPk`, async function() {
|
|
612
|
+
assert.strict.deepStrictEqual(vget[1], vans[1])
|
|
613
|
+
})
|
|
614
|
+
|
|
615
|
+
vans[2] = 1
|
|
616
|
+
it(`should get ${JSON.stringify(vans[2])} for files after insertGfs without id by default autoGenPk`, async function() {
|
|
617
|
+
assert.strict.deepStrictEqual(vget[2], vans[2])
|
|
618
|
+
})
|
|
619
|
+
|
|
620
|
+
vans[3] = { n: 1, nInserted: 1, ok: 1 }
|
|
621
|
+
it(`should get ${JSON.stringify(vans[3])} for insertGfs with id by autoGenPk=false`, async function() {
|
|
622
|
+
assert.strict.deepStrictEqual(vget[3], vans[3])
|
|
623
|
+
})
|
|
624
|
+
|
|
625
|
+
vans[4] = true
|
|
626
|
+
it(`should get ${JSON.stringify(vans[4])} for content after insertGfs with id by autoGenPk=false`, async function() {
|
|
627
|
+
assert.strict.deepStrictEqual(vget[4], vans[4])
|
|
628
|
+
})
|
|
629
|
+
|
|
630
|
+
vans[5] = 'Error: invalid data[0].id, autoGenPk is false'
|
|
631
|
+
it(`should get ${JSON.stringify(vans[5])} for insertGfs without id by autoGenPk=false`, async function() {
|
|
632
|
+
assert.strict.deepStrictEqual(vget[5], vans[5])
|
|
633
|
+
})
|
|
634
|
+
|
|
635
|
+
vans[6] = 'Error: invalid data[1].id, autoGenPk is false'
|
|
636
|
+
it(`should get ${JSON.stringify(vans[6])} for insertGfs with 1 record without id by autoGenPk=false`, async function() {
|
|
637
|
+
assert.strict.deepStrictEqual(vget[6], vans[6])
|
|
638
|
+
})
|
|
639
|
+
|
|
640
|
+
vans[7] = { files: 0, chunks: 0 }
|
|
641
|
+
it(`should get ${JSON.stringify(vans[7])} for not writing valid records in rejected insertGfs batch`, async function() {
|
|
642
|
+
assert.strict.deepStrictEqual(vget[7], vans[7])
|
|
643
|
+
})
|
|
644
|
+
|
|
645
|
+
vans[8] = [null, null]
|
|
646
|
+
it(`should get ${JSON.stringify(vans[8])} for records after rejected insertGfs batch`, async function() {
|
|
647
|
+
assert.strict.deepStrictEqual(vget[8], vans[8])
|
|
648
|
+
})
|
|
649
|
+
|
|
650
|
+
vans[9] = [{ n: 0, nDeleted: 0, ok: 0, err: 'invalid id[undefined]' }]
|
|
651
|
+
it(`should get ${JSON.stringify(vans[9])} for delGfs without id by autoGenPk=false`, async function() {
|
|
652
|
+
assert.strict.deepStrictEqual(vget[9], vans[9])
|
|
653
|
+
})
|
|
654
|
+
|
|
655
|
+
vans[10] = { n: 0, nInserted: 0, ok: 1 }
|
|
656
|
+
it(`should get ${JSON.stringify(vans[10])} for insertGfs with invalid data by autoGenPk=false`, async function() {
|
|
657
|
+
assert.strict.deepStrictEqual(vget[10], vans[10])
|
|
658
|
+
})
|
|
659
|
+
|
|
660
|
+
})
|
|
661
|
+
|
|
662
|
+
|
|
531
663
|
describe('gfs change event', function() {
|
|
532
664
|
let vans = {}
|
|
533
665
|
let vget = {}
|