prisma-mock 0.7.1 → 0.8.1
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 +1 -1
- package/lib/index.js +92 -52
- package/package.json +1 -1
package/README.md
CHANGED
package/lib/index.js
CHANGED
|
@@ -233,6 +233,31 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
233
233
|
if (d[field.name]) {
|
|
234
234
|
const c = d[field.name];
|
|
235
235
|
if (field.kind === "object") {
|
|
236
|
+
if (c.set) {
|
|
237
|
+
const { [field.name]: { set }, ...rest } = d;
|
|
238
|
+
const otherModel = datamodel.models.find((model) => {
|
|
239
|
+
return model.name === field.type;
|
|
240
|
+
});
|
|
241
|
+
const otherField = otherModel.fields.find((otherField) => field.relationName === otherField.relationName);
|
|
242
|
+
const delegate = Delegate(getCamelCase(field.type), otherModel);
|
|
243
|
+
const items = c.set.map(where => delegate.findUnique({
|
|
244
|
+
where
|
|
245
|
+
})).filter(Boolean);
|
|
246
|
+
if (items.length !== c.set.length) {
|
|
247
|
+
throwKnownError(`An operation failed because it depends on one or more records that were required but not found. Expected ${c.set.length} records to be connected, found only ${items.length}.`);
|
|
248
|
+
}
|
|
249
|
+
const idField = model?.fields.find((f) => f.isId)?.name;
|
|
250
|
+
let a = manyToManyData[field.relationName] = manyToManyData[field.relationName] || [];
|
|
251
|
+
a = a.filter(i => i[otherField.type][idField] !== item[idField]);
|
|
252
|
+
items.forEach((createdItem) => {
|
|
253
|
+
a.push({
|
|
254
|
+
[field.type]: createdItem,
|
|
255
|
+
[otherField.type]: item || d
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
manyToManyData[field.relationName] = a;
|
|
259
|
+
d = rest;
|
|
260
|
+
}
|
|
236
261
|
if (c.connect) {
|
|
237
262
|
const { [field.name]: { connect }, ...rest } = d;
|
|
238
263
|
const connections = connect instanceof Array ? connect : [connect];
|
|
@@ -339,14 +364,14 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
339
364
|
});
|
|
340
365
|
let createdItems = [];
|
|
341
366
|
if (c.createMany) {
|
|
342
|
-
createdItems = delegate.
|
|
367
|
+
createdItems = delegate._createMany({
|
|
343
368
|
...c.createMany,
|
|
344
369
|
data: c.createMany.data.map(map),
|
|
345
370
|
});
|
|
346
371
|
}
|
|
347
372
|
else {
|
|
348
373
|
if (Array.isArray(c.create)) {
|
|
349
|
-
createdItems = delegate.
|
|
374
|
+
createdItems = delegate._createMany({
|
|
350
375
|
...c.create,
|
|
351
376
|
data: c.create.map(map),
|
|
352
377
|
});
|
|
@@ -441,36 +466,38 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
441
466
|
const { [field.name]: _update, ...rest } = d;
|
|
442
467
|
d = rest;
|
|
443
468
|
}
|
|
444
|
-
if (
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
469
|
+
if (field.kind === "scalar") {
|
|
470
|
+
if (c.increment) {
|
|
471
|
+
d = {
|
|
472
|
+
...d,
|
|
473
|
+
[field.name]: item[field.name] + c.increment,
|
|
474
|
+
};
|
|
475
|
+
}
|
|
476
|
+
if (c.decrement) {
|
|
477
|
+
d = {
|
|
478
|
+
...d,
|
|
479
|
+
[field.name]: item[field.name] - c.decrement,
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
if (c.multiply) {
|
|
483
|
+
d = {
|
|
484
|
+
...d,
|
|
485
|
+
[field.name]: item[field.name] * c.multiply,
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
if (c.divide) {
|
|
489
|
+
const newValue = item[field.name] / c.divide;
|
|
490
|
+
d = {
|
|
491
|
+
...d,
|
|
492
|
+
[field.name]: field.type === "Int" ? Math.floor(newValue) : newValue,
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
if (c.set) {
|
|
496
|
+
d = {
|
|
497
|
+
...d,
|
|
498
|
+
[field.name]: c.set,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
474
501
|
}
|
|
475
502
|
}
|
|
476
503
|
if ((isCreating || d[field.name] === null) &&
|
|
@@ -818,9 +845,11 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
818
845
|
// if (!Array.isArray(data[prop])) {
|
|
819
846
|
// throw new Error(`${prop} not found in data`)
|
|
820
847
|
// }
|
|
848
|
+
let nbUpdated = 0;
|
|
821
849
|
const newItems = data[prop].map((e) => {
|
|
822
850
|
if (matchFnc(args.where)(e)) {
|
|
823
851
|
let data = nestedUpdate(args, false, e);
|
|
852
|
+
nbUpdated++;
|
|
824
853
|
return {
|
|
825
854
|
...e,
|
|
826
855
|
...data,
|
|
@@ -833,7 +862,7 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
833
862
|
[prop]: newItems,
|
|
834
863
|
};
|
|
835
864
|
data = removeMultiFieldIds(model, data);
|
|
836
|
-
return data;
|
|
865
|
+
return { data, nbUpdated };
|
|
837
866
|
};
|
|
838
867
|
const create = (args) => {
|
|
839
868
|
const d = nestedUpdate(args, true, null);
|
|
@@ -850,6 +879,24 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
850
879
|
}
|
|
851
880
|
return findOne({ where, ...args });
|
|
852
881
|
};
|
|
882
|
+
const createMany = (args) => {
|
|
883
|
+
const createdItems = [];
|
|
884
|
+
if (!Array.isArray(args.data)) {
|
|
885
|
+
createdItems.push(create({
|
|
886
|
+
...args,
|
|
887
|
+
data: args.data,
|
|
888
|
+
}));
|
|
889
|
+
}
|
|
890
|
+
else {
|
|
891
|
+
args.data.forEach((data) => {
|
|
892
|
+
createdItems.push(create({
|
|
893
|
+
...args,
|
|
894
|
+
data,
|
|
895
|
+
}));
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
return createdItems;
|
|
899
|
+
};
|
|
853
900
|
const deleteMany = (args) => {
|
|
854
901
|
const model = datamodel.models.find((model) => {
|
|
855
902
|
return getCamelCase(model.name) === prop;
|
|
@@ -957,6 +1004,7 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
957
1004
|
const newItems = data[prop].map((e) => {
|
|
958
1005
|
if (matchFnc(args.where)(e)) {
|
|
959
1006
|
let data = nestedUpdate(args, false, e);
|
|
1007
|
+
data; //?
|
|
960
1008
|
updatedItem = {
|
|
961
1009
|
...e,
|
|
962
1010
|
...data,
|
|
@@ -986,21 +1034,8 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
986
1034
|
findFirstOrThrow: findOrThrow,
|
|
987
1035
|
create,
|
|
988
1036
|
createMany: (args) => {
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
...args,
|
|
992
|
-
data: args.data,
|
|
993
|
-
});
|
|
994
|
-
}
|
|
995
|
-
else {
|
|
996
|
-
args.data.forEach((data) => {
|
|
997
|
-
create({
|
|
998
|
-
...args,
|
|
999
|
-
data,
|
|
1000
|
-
});
|
|
1001
|
-
});
|
|
1002
|
-
}
|
|
1003
|
-
return findMany(args);
|
|
1037
|
+
const createdItems = createMany(args);
|
|
1038
|
+
return { count: createdItems.length };
|
|
1004
1039
|
},
|
|
1005
1040
|
delete: (args) => {
|
|
1006
1041
|
const item = findOne(args);
|
|
@@ -1014,10 +1049,13 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
1014
1049
|
return null;
|
|
1015
1050
|
},
|
|
1016
1051
|
update,
|
|
1017
|
-
deleteMany
|
|
1052
|
+
deleteMany: (args) => {
|
|
1053
|
+
const deleted = deleteMany(args);
|
|
1054
|
+
return { count: deleted.length };
|
|
1055
|
+
},
|
|
1018
1056
|
updateMany: (args) => {
|
|
1019
|
-
updateMany(args);
|
|
1020
|
-
return
|
|
1057
|
+
const { nbUpdated } = updateMany(args);
|
|
1058
|
+
return { count: nbUpdated };
|
|
1021
1059
|
},
|
|
1022
1060
|
upsert(args) {
|
|
1023
1061
|
const res = findOne(args);
|
|
@@ -1043,7 +1081,8 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
1043
1081
|
return res.length;
|
|
1044
1082
|
},
|
|
1045
1083
|
_sortFunc: sortFunc,
|
|
1046
|
-
_findMany: findMany
|
|
1084
|
+
_findMany: findMany,
|
|
1085
|
+
_createMany: createMany,
|
|
1047
1086
|
};
|
|
1048
1087
|
};
|
|
1049
1088
|
datamodel.models.forEach((model) => {
|
|
@@ -1068,6 +1107,7 @@ const createPrismaMock = (data = {}, datamodel = client_1.Prisma.dmmf.datamodel,
|
|
|
1068
1107
|
});
|
|
1069
1108
|
});
|
|
1070
1109
|
});
|
|
1110
|
+
client['$getInternalState'] = () => data;
|
|
1071
1111
|
// @ts-ignore
|
|
1072
1112
|
return client;
|
|
1073
1113
|
};
|