prisma-mock 0.0.12 → 0.0.15

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 +105 -67
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -72,80 +72,97 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
72
72
  return Promise.all(actions);
73
73
  });
74
74
  const Delegate = (prop, model) => {
75
- const nestedUpdate = (args, isCreating) => {
75
+ const nestedUpdate = (args, isCreating, item) => {
76
76
  let d = args.data;
77
77
  // Get field schema for default values
78
78
  const model = cachedSchema.datamodel.models.find(model => {
79
79
  return getCamelCase(model.name) === prop;
80
80
  });
81
81
  model.fields.forEach(field => {
82
- if (d[field.name] && field.kind === 'object') {
82
+ if (d[field.name]) {
83
83
  const c = d[field.name];
84
- if (c.connect) {
85
- const _a = d, _b = field.name, connect = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
86
- d = Object.assign(Object.assign({}, rest), { [field.relationFromFields[0]]: connect.connect[field.relationToFields[0]] });
87
- }
88
- if (c.create || c.createMany) {
89
- const _c = d, _d = field.name, create = _c[_d], rest = __rest(_c, [typeof _d === "symbol" ? _d : _d + ""]);
90
- d = rest;
91
- // @ts-ignore
92
- const name = getCamelCase(field.type);
93
- const delegate = Delegate(name, model);
94
- const joinfield = getJoinField(field);
95
- if (field.relationFromFields.length > 0) {
96
- const item = delegate.create({
97
- data: create.create
98
- });
99
- d = Object.assign(Object.assign({}, rest), { [field.relationFromFields[0]]: item[field.relationToFields[0]] });
84
+ if (field.kind === 'object') {
85
+ if (c.connect) {
86
+ const _a = d, _b = field.name, connect = _a[_b], rest = __rest(_a, [typeof _b === "symbol" ? _b : _b + ""]);
87
+ d = Object.assign(Object.assign({}, rest), { [field.relationFromFields[0]]: connect.connect[field.relationToFields[0]] });
100
88
  }
101
- else {
102
- const map = (val) => (Object.assign(Object.assign({}, val), { [joinfield.name]: {
103
- connect: joinfield.relationToFields.reduce((prev, cur, index) => {
104
- let val = d[cur];
105
- if (!isCreating && !val) {
106
- val = findOne(args)[cur];
107
- }
108
- return Object.assign(Object.assign({}, prev), { [cur]: val });
109
- }, {}),
110
- } }));
111
- if (c.createMany) {
112
- delegate.createMany(Object.assign(Object.assign({}, c.createMany), { data: c.createMany.data.map(map) }));
89
+ if (c.create || c.createMany) {
90
+ const _c = d, _d = field.name, create = _c[_d], rest = __rest(_c, [typeof _d === "symbol" ? _d : _d + ""]);
91
+ d = rest;
92
+ // @ts-ignore
93
+ const name = getCamelCase(field.type);
94
+ const delegate = Delegate(name, model);
95
+ const joinfield = getJoinField(field);
96
+ if (field.relationFromFields.length > 0) {
97
+ const item = delegate.create({
98
+ data: create.create
99
+ });
100
+ d = Object.assign(Object.assign({}, rest), { [field.relationFromFields[0]]: item[field.relationToFields[0]] });
113
101
  }
114
102
  else {
115
- if (Array.isArray(c.create)) {
116
- delegate.createMany(Object.assign(Object.assign({}, c.create), { data: c.create.map(map) }));
103
+ const map = (val) => (Object.assign(Object.assign({}, val), { [joinfield.name]: {
104
+ connect: joinfield.relationToFields.reduce((prev, cur, index) => {
105
+ let val = d[cur];
106
+ if (!isCreating && !val) {
107
+ val = findOne(args)[cur];
108
+ }
109
+ return Object.assign(Object.assign({}, prev), { [cur]: val });
110
+ }, {}),
111
+ } }));
112
+ if (c.createMany) {
113
+ delegate.createMany(Object.assign(Object.assign({}, c.createMany), { data: c.createMany.data.map(map) }));
117
114
  }
118
115
  else {
119
- delegate.create(Object.assign(Object.assign({}, create.create), { data: map(create.create) }));
116
+ if (Array.isArray(c.create)) {
117
+ delegate.createMany(Object.assign(Object.assign({}, c.create), { data: c.create.map(map) }));
118
+ }
119
+ else {
120
+ delegate.create(Object.assign(Object.assign({}, create.create), { data: map(create.create) }));
121
+ }
120
122
  }
121
123
  }
122
124
  }
123
- }
124
- if (c.update || c.updateMany) {
125
- const name = getCamelCase(field.type);
126
- const delegate = Delegate(name, model);
127
- if (c.updateMany) {
128
- if (Array.isArray(c.updateMany)) {
129
- c.updateMany.forEach(updateMany => {
130
- delegate.updateMany(updateMany);
131
- });
132
- }
133
- else {
134
- delegate.updateMany(c.updateMany);
135
- }
136
- }
137
- else {
138
- if (Array.isArray(c.update)) {
139
- c.update.forEach(update => {
140
- delegate.update(update);
141
- });
125
+ if (c.update || c.updateMany) {
126
+ const name = getCamelCase(field.type);
127
+ const delegate = Delegate(name, model);
128
+ if (c.updateMany) {
129
+ if (Array.isArray(c.updateMany)) {
130
+ c.updateMany.forEach(updateMany => {
131
+ delegate.updateMany(updateMany);
132
+ });
133
+ }
134
+ else {
135
+ delegate.updateMany(c.updateMany);
136
+ }
142
137
  }
143
138
  else {
144
- const item = findOne(args);
145
- delegate.update({ data: c.update, where: getFieldRelationshipWhere(item, field) });
139
+ if (Array.isArray(c.update)) {
140
+ c.update.forEach(update => {
141
+ delegate.update(update);
142
+ });
143
+ }
144
+ else {
145
+ const item = findOne(args);
146
+ delegate.update({ data: c.update, where: getFieldRelationshipWhere(item, field) });
147
+ }
146
148
  }
147
149
  }
148
150
  }
151
+ if (c.increment) {
152
+ d = Object.assign(Object.assign({}, d), { [field.name]: item[field.name] + c.increment });
153
+ }
154
+ if (c.decrement) {
155
+ d = Object.assign(Object.assign({}, d), { [field.name]: item[field.name] - c.decrement });
156
+ }
157
+ if (c.multiply) {
158
+ d = Object.assign(Object.assign({}, d), { [field.name]: item[field.name] * c.multiply });
159
+ }
160
+ if (c.divide) {
161
+ d = Object.assign(Object.assign({}, d), { [field.name]: item[field.name] / c.divide });
162
+ }
163
+ if (c.set) {
164
+ d = Object.assign(Object.assign({}, d), { [field.name]: c.set });
165
+ }
149
166
  }
150
167
  if (isCreating && !d[field.name] && field.default) {
151
168
  if (typeof field.default === 'object') {
@@ -178,6 +195,12 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
178
195
  if (child === "NOT") {
179
196
  return !matchOr(item, filter);
180
197
  }
198
+ if (!filter) {
199
+ if (filter === null) {
200
+ return !val;
201
+ }
202
+ return true;
203
+ }
181
204
  if (filter instanceof Date) {
182
205
  if (val === undefined) {
183
206
  return false;
@@ -265,7 +288,11 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
265
288
  const findOne = args => {
266
289
  if (!data[prop])
267
290
  throw new Error(`${prop} not found in data`);
268
- return includes(args)(data[prop].find(matchFnc(args.where)));
291
+ const items = findMany(args);
292
+ if (items.length === 0) {
293
+ return null;
294
+ }
295
+ return items[0];
269
296
  };
270
297
  const findMany = args => {
271
298
  const res = data[prop].filter(matchFnc(args === null || args === void 0 ? void 0 : args.where)).map(includes(args));
@@ -286,21 +313,27 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
286
313
  return shouldInclude;
287
314
  });
288
315
  }
316
+ if (args === null || args === void 0 ? void 0 : args.select) {
317
+ return res.map(item => {
318
+ const newItem = {};
319
+ Object.keys(args.select).forEach(key => newItem[key] = item[key]);
320
+ return newItem;
321
+ });
322
+ }
289
323
  return res;
290
324
  };
291
- const findFirst = args => {
292
- const item = data[prop].find(matchFnc(args === null || args === void 0 ? void 0 : args.where));
293
- if (item)
294
- return includes(args)(item);
295
- return null;
296
- };
325
+ // const findFirst = args => {
326
+ // const item = data[prop].find(matchFnc(args?.where));
327
+ // if (item) return includes(args)(item);
328
+ // return null;
329
+ // };
297
330
  const updateMany = args => {
298
331
  // if (!Array.isArray(data[prop])) {
299
332
  // throw new Error(`${prop} not found in data`)
300
333
  // }
301
334
  const newItems = data[prop].map(e => {
302
335
  if (matchFnc(args.where)(e)) {
303
- let data = nestedUpdate(args, false);
336
+ let data = nestedUpdate(args, false, e);
304
337
  return Object.assign(Object.assign({}, e), data);
305
338
  }
306
339
  return e;
@@ -309,7 +342,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
309
342
  return data;
310
343
  };
311
344
  const create = args => {
312
- const d = nestedUpdate(args, true);
345
+ const d = nestedUpdate(args, true, null);
313
346
  data = Object.assign(Object.assign({}, data), { [prop]: [...data[prop], d] });
314
347
  data = checkIds(model, data);
315
348
  return findOne(Object.assign({ where: { id: d.id } }, args));
@@ -318,10 +351,11 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
318
351
  data = Object.assign(Object.assign({}, data), { [prop]: data[prop].filter(e => !matchFnc(args === null || args === void 0 ? void 0 : args.where)(e)) });
319
352
  };
320
353
  const includes = args => item => {
321
- if (!(args === null || args === void 0 ? void 0 : args.include) || !item)
354
+ if ((!(args === null || args === void 0 ? void 0 : args.include) && !(args === null || args === void 0 ? void 0 : args.select)) || !item)
322
355
  return item;
323
356
  let newItem = item;
324
- const keys = Object.keys(args.include);
357
+ const obj = (args === null || args === void 0 ? void 0 : args.select) || (args === null || args === void 0 ? void 0 : args.include);
358
+ const keys = Object.keys(obj);
325
359
  keys.forEach(key => {
326
360
  // Get field schema for relation info
327
361
  const model = cachedSchema.datamodel.models.find(model => {
@@ -330,10 +364,14 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
330
364
  const schema = model.fields.find(field => {
331
365
  return field.name === key;
332
366
  });
367
+ switch (schema.type) {
368
+ case "Int":
369
+ return;
370
+ }
333
371
  // Get delegate for relation
334
372
  const delegate = Delegate(getCamelCase(schema.type), model);
335
373
  // Construct arg for relation query
336
- let subArgs = args.include[key] === true ? {} : args.include[key];
374
+ let subArgs = obj[key] === true ? {} : obj[key];
337
375
  subArgs = Object.assign(Object.assign({}, subArgs), { where: Object.assign(Object.assign({}, subArgs.where), getFieldRelationshipWhere(item, schema)) });
338
376
  if (schema.isList) {
339
377
  // Add relation
@@ -349,7 +387,7 @@ const createPrismaMock = async (data = {}, pathToSchema, client = (0, jest_mock_
349
387
  findOne,
350
388
  findUnique: findOne,
351
389
  findMany,
352
- findFirst,
390
+ findFirst: findOne,
353
391
  create,
354
392
  createMany: (args) => {
355
393
  args.data.forEach((data) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-mock",
3
- "version": "0.0.12",
3
+ "version": "0.0.15",
4
4
  "description": "Mock prisma for unit testing database",
5
5
  "main": "lib/index.js",
6
6
  "license": "MIT",