prisma-mock 0.0.18 → 0.0.21

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 (2) hide show
  1. package/lib/index.js +63 -9
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -33,17 +33,26 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
33
33
  return true;
34
34
  };
35
35
  const checkIds = (model, data) => {
36
- var _a;
36
+ var _a, _b;
37
37
  const c = getCamelCase(model.name);
38
38
  const idFields = model.idFields || ((_a = model.primaryKey) === null || _a === void 0 ? void 0 : _a.fields);
39
- // console.log("model.name", model.name)
40
- if ((idFields === null || idFields === void 0 ? void 0 : idFields.length) > 1) {
41
- const id = idFields.join('_');
39
+ const checkId = (ids) => {
40
+ const id = ids.join('_');
42
41
  data = Object.assign(Object.assign({}, data), { [c]: data[c].map(item => {
43
- return Object.assign(Object.assign({}, item), { [id]: idFields.reduce((prev, field) => {
42
+ const _a = item, _b = id, idVal = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
43
+ return Object.assign(Object.assign(Object.assign({}, idVal), { [id]: ids.reduce((prev, field) => {
44
44
  return Object.assign(Object.assign({}, prev), { [field]: item[field] });
45
- }, {}) });
45
+ }, {}) }), item);
46
46
  }) });
47
+ };
48
+ // console.log("model.name", model.name)
49
+ if ((idFields === null || idFields === void 0 ? void 0 : idFields.length) > 1) {
50
+ checkId(idFields);
51
+ }
52
+ if (((_b = model.uniqueFields) === null || _b === void 0 ? void 0 : _b.length) > 0) {
53
+ for (const uniqueField of model.uniqueFields) {
54
+ checkId(uniqueField);
55
+ }
47
56
  }
48
57
  return data;
49
58
  };
@@ -62,7 +71,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
62
71
  const joinmodel = cachedSchema.datamodel.models.find(model => {
63
72
  return model.name === field.type;
64
73
  });
65
- const joinfield = joinmodel.fields.find(f => {
74
+ const joinfield = joinmodel === null || joinmodel === void 0 ? void 0 : joinmodel.fields.find(f => {
66
75
  return f.relationName === field.relationName;
67
76
  });
68
77
  return joinfield;
@@ -191,7 +200,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
191
200
  return d;
192
201
  };
193
202
  const matchItem = (child, item, where) => {
194
- var _a;
203
+ var _a, _b;
195
204
  const val = item[child];
196
205
  const filter = where[child];
197
206
  if (child === "OR") {
@@ -256,6 +265,13 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
256
265
  return shallowCompare(val, filter);
257
266
  }
258
267
  }
268
+ if (((_b = model.uniqueFields) === null || _b === void 0 ? void 0 : _b.length) > 0) {
269
+ for (const uniqueField of model.uniqueFields) {
270
+ if (child === uniqueField.join('_')) {
271
+ return shallowCompare(val, filter);
272
+ }
273
+ }
274
+ }
259
275
  if (val === undefined) {
260
276
  return false;
261
277
  }
@@ -383,7 +399,45 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
383
399
  return findOne(Object.assign({ where: { id: d.id } }, args));
384
400
  };
385
401
  const deleteMany = args => {
386
- data = Object.assign(Object.assign({}, data), { [prop]: data[prop].filter(e => !matchFnc(args === null || args === void 0 ? void 0 : args.where)(e)) });
402
+ const relations = [];
403
+ const model = cachedSchema.datamodel.models.find(model => {
404
+ return getCamelCase(model.name) === prop;
405
+ });
406
+ const deleted = [];
407
+ data = Object.assign(Object.assign({}, data), { [prop]: data[prop].filter(e => {
408
+ const shouldDelete = matchFnc(args === null || args === void 0 ? void 0 : args.where)(e);
409
+ if (shouldDelete) {
410
+ deleted.push(e);
411
+ }
412
+ return !shouldDelete;
413
+ }) });
414
+ // Referential Actions
415
+ deleted.forEach(item => {
416
+ model.fields.forEach(field => {
417
+ const joinfield = getJoinField(field);
418
+ if (!joinfield)
419
+ return;
420
+ const delegate = Delegate(getCamelCase(field.type), model);
421
+ if (joinfield.relationOnDelete === "SetNull") {
422
+ delegate.update({
423
+ where: {
424
+ [joinfield.relationFromFields[0]]: item[joinfield.relationToFields[0]],
425
+ },
426
+ data: {
427
+ [joinfield.relationFromFields[0]]: null,
428
+ }
429
+ });
430
+ }
431
+ else if (joinfield.relationOnDelete === "Cascade") {
432
+ delegate.delete({
433
+ where: {
434
+ [joinfield.relationFromFields[0]]: item[joinfield.relationToFields[0]],
435
+ }
436
+ });
437
+ }
438
+ });
439
+ });
440
+ return deleted;
387
441
  };
388
442
  const includes = args => item => {
389
443
  if ((!(args === null || args === void 0 ? void 0 : args.include) && !(args === null || args === void 0 ? void 0 : args.select)) || !item)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-mock",
3
- "version": "0.0.18",
3
+ "version": "0.0.21",
4
4
  "description": "Mock prisma for unit testing database",
5
5
  "main": "lib/index.js",
6
6
  "license": "MIT",