prisma-mock 0.0.25 → 0.0.28

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 +56 -31
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -10,13 +10,9 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  }
11
11
  return t;
12
12
  };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
13
  Object.defineProperty(exports, "__esModule", { value: true });
17
- const sdk_1 = require("@prisma/sdk");
14
+ const client_1 = require("@prisma/client");
18
15
  const jest_mock_extended_1 = require("jest-mock-extended");
19
- const path_1 = __importDefault(require("path"));
20
16
  let cachedSchema;
21
17
  const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_extended_1.mockDeep)()) => {
22
18
  let autoincrement = {};
@@ -24,31 +20,29 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
24
20
  return name.substr(0, 1).toLowerCase() + name.substr(1);
25
21
  };
26
22
  const shallowCompare = (a, b) => {
27
- for (let key in a) {
23
+ for (let key in b) {
28
24
  if (a[key] !== b[key])
29
25
  return false;
30
26
  }
31
27
  return true;
32
28
  };
33
- const checkIds = (model, data) => {
29
+ const removeMultiFieldIds = (model, data) => {
34
30
  var _a, _b;
35
31
  const c = getCamelCase(model.name);
36
32
  const idFields = model.idFields || ((_a = model.primaryKey) === null || _a === void 0 ? void 0 : _a.fields);
37
- const checkId = (ids) => {
33
+ const removeId = (ids) => {
38
34
  const id = ids.join('_');
39
35
  data = Object.assign(Object.assign({}, data), { [c]: data[c].map(item => {
40
36
  const _a = item, _b = id, idVal = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
41
- return Object.assign(Object.assign({ [id]: ids.reduce((prev, field) => {
42
- return Object.assign(Object.assign({}, prev), { [field]: item[field] });
43
- }, {}) }, item), idVal);
37
+ return Object.assign(Object.assign({}, rest), idVal);
44
38
  }) });
45
39
  };
46
40
  if ((idFields === null || idFields === void 0 ? void 0 : idFields.length) > 1) {
47
- checkId(idFields);
41
+ removeId(idFields);
48
42
  }
49
43
  if (((_b = model.uniqueFields) === null || _b === void 0 ? void 0 : _b.length) > 0) {
50
44
  for (const uniqueField of model.uniqueFields) {
51
- checkId(uniqueField);
45
+ removeId(uniqueField);
52
46
  }
53
47
  }
54
48
  return data;
@@ -73,14 +67,17 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
73
67
  });
74
68
  return joinfield;
75
69
  };
76
- if (!cachedSchema) {
77
- const schemaPath = path_1.default.resolve(process.cwd(), 'prisma/schema.prisma');
78
- var pathToModule = pathToSchema || require.resolve(schemaPath);
79
- const datamodel = (0, sdk_1.getSchemaSync)(pathToModule);
80
- cachedSchema = await (0, sdk_1.getDMMF)({
81
- datamodel,
82
- });
83
- }
70
+ // if (!cachedSchema) {
71
+ // const schemaPath = path.resolve(process.cwd(), 'prisma/schema.prisma')
72
+ // var pathToModule =
73
+ // pathToSchema || require.resolve(schemaPath)
74
+ // const datamodel = getSchemaSync(pathToModule)
75
+ // cachedSchema = await getDMMF({
76
+ // datamodel,
77
+ // }) //?
78
+ // Prisma.dmmf //?
79
+ // }
80
+ let cachedSchema = client_1.Prisma.dmmf;
84
81
  // @ts-ignore
85
82
  client["$transaction"].mockImplementation(async (actions) => {
86
83
  for (const action of actions) {
@@ -138,7 +135,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
138
135
  }
139
136
  }
140
137
  }
141
- if (c.update || c.updateMany) {
138
+ if (c.update || c.updateMany || c.deleteMany) {
142
139
  const name = getCamelCase(field.type);
143
140
  const delegate = Delegate(name, model);
144
141
  if (c.updateMany) {
@@ -151,7 +148,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
151
148
  delegate.updateMany(c.updateMany);
152
149
  }
153
150
  }
154
- else {
151
+ else if (c.update) {
155
152
  if (Array.isArray(c.update)) {
156
153
  c.update.forEach(update => {
157
154
  delegate.update(update);
@@ -162,6 +159,18 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
162
159
  delegate.update({ data: c.update, where: getFieldRelationshipWhere(item, field) });
163
160
  }
164
161
  }
162
+ else {
163
+ if (Array.isArray(c.deleteMany)) {
164
+ c.deleteMany.forEach(where => {
165
+ delegate.deleteMany({ where });
166
+ });
167
+ }
168
+ else {
169
+ delegate.deleteMany({ where: c.deleteMany });
170
+ }
171
+ }
172
+ const _e = d, _f = field.name, _update = _e[_f], rest = __rest(_e, [typeof _f === "symbol" ? _f : _f + ""]);
173
+ d = rest;
165
174
  }
166
175
  }
167
176
  if (c.increment) {
@@ -275,13 +284,13 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
275
284
  const idFields = model.idFields || ((_a = model.primaryKey) === null || _a === void 0 ? void 0 : _a.fields);
276
285
  if ((idFields === null || idFields === void 0 ? void 0 : idFields.length) > 1) {
277
286
  if (child === idFields.join('_')) {
278
- return shallowCompare(val, filter);
287
+ return shallowCompare(item, filter);
279
288
  }
280
289
  }
281
290
  if (((_b = model.uniqueFields) === null || _b === void 0 ? void 0 : _b.length) > 0) {
282
291
  for (const uniqueField of model.uniqueFields) {
283
292
  if (child === uniqueField.join('_')) {
284
- return shallowCompare(val, filter);
293
+ return shallowCompare(item, filter);
285
294
  }
286
295
  }
287
296
  }
@@ -402,14 +411,20 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
402
411
  return e;
403
412
  });
404
413
  data = Object.assign(Object.assign({}, data), { [prop]: newItems });
414
+ data = removeMultiFieldIds(model, data);
405
415
  return data;
406
416
  };
407
417
  const create = args => {
408
418
  const d = nestedUpdate(args, true, null);
409
419
  data = Object.assign(Object.assign({}, data), { [prop]: [...data[prop], d] });
410
- data = checkIds(model, data);
411
- // TODO: multi field ids
412
- return findOne(Object.assign({ where: { id: d.id } }, args));
420
+ data = removeMultiFieldIds(model, data);
421
+ let where = {};
422
+ for (const field of model.fields) {
423
+ if (field.default) {
424
+ where[field.name] = d[field.name];
425
+ }
426
+ }
427
+ return findOne(Object.assign({ where }, args));
413
428
  };
414
429
  const deleteMany = args => {
415
430
  const model = cachedSchema.datamodel.models.find(model => {
@@ -484,8 +499,18 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
484
499
  return newItem;
485
500
  };
486
501
  const update = (args) => {
487
- updateMany(args);
488
- return findOne(args);
502
+ let updatedItem;
503
+ const newItems = data[prop].map(e => {
504
+ if (matchFnc(args.where)(e)) {
505
+ let data = nestedUpdate(args, false, e);
506
+ updatedItem = Object.assign(Object.assign({}, e), data);
507
+ return updatedItem;
508
+ }
509
+ return e;
510
+ });
511
+ data = Object.assign(Object.assign({}, data), { [prop]: newItems });
512
+ data = removeMultiFieldIds(model, data);
513
+ return findOne(Object.assign(Object.assign({}, args), { where: updatedItem }));
489
514
  };
490
515
  return {
491
516
  findOne,
@@ -529,7 +554,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
529
554
  if (!data[c]) {
530
555
  data = Object.assign(Object.assign({}, (data || {})), { [c]: [] });
531
556
  }
532
- data = checkIds(model, data);
557
+ data = removeMultiFieldIds(model, data);
533
558
  const objs = Delegate(c, model);
534
559
  Object.keys(objs).forEach(fncName => {
535
560
  client[c][fncName].mockImplementation(async (...params) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-mock",
3
- "version": "0.0.25",
3
+ "version": "0.0.28",
4
4
  "description": "Mock prisma for unit testing database",
5
5
  "main": "lib/index.js",
6
6
  "license": "MIT",