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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/lib/index.js +92 -52
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -128,7 +128,7 @@ Most common cases are covered, but not everything. Here is a rough list of the s
128
128
  - deleteMany
129
129
  - connect
130
130
  - disconnect
131
- - TODO: set
131
+ - set
132
132
  - TODO: connectOrCreate
133
133
  - TODO: upsert
134
134
 
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.createMany({
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.createMany({
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 (c.increment) {
445
- d = {
446
- ...d,
447
- [field.name]: item[field.name] + c.increment,
448
- };
449
- }
450
- if (c.decrement) {
451
- d = {
452
- ...d,
453
- [field.name]: item[field.name] - c.decrement,
454
- };
455
- }
456
- if (c.multiply) {
457
- d = {
458
- ...d,
459
- [field.name]: item[field.name] * c.multiply,
460
- };
461
- }
462
- if (c.divide) {
463
- const newValue = item[field.name] / c.divide;
464
- d = {
465
- ...d,
466
- [field.name]: field.type === "Int" ? Math.floor(newValue) : newValue,
467
- };
468
- }
469
- if (c.set) {
470
- d = {
471
- ...d,
472
- [field.name]: c.set,
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
- if (!Array.isArray(args.data)) {
990
- create({
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 findMany(args);
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
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-mock",
3
- "version": "0.7.1",
3
+ "version": "0.8.1",
4
4
  "description": "Mock prisma for unit testing database",
5
5
  "main": "lib/index.js",
6
6
  "repository": "https://github.com/demonsters/prisma-mock",