prisma-mock 1.1.0-alpha.2 → 1.1.0-alpha.3

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 CHANGED
@@ -315,6 +315,7 @@ const client = createPrismaMock(Prisma, {
315
315
  ### Attribute Functions ✅
316
316
 
317
317
  - `autoincrement()`
318
+ - `auto()` (MongoDB ObjectId)
318
319
  - `cuid()`
319
320
  - `uuid()`
320
321
  - `now()`
@@ -362,10 +363,6 @@ The following features are planned but not yet implemented:
362
363
  - `isEmpty`
363
364
  - `equals`
364
365
 
365
- ### Attributes
366
-
367
- - `auto()`
368
-
369
366
  ### Referential Actions
370
367
 
371
368
  - `onDelete: Restrict`
@@ -6,11 +6,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const autoincrement_1 = __importDefault(require("./autoincrement"));
7
7
  const cuid_1 = __importDefault(require("./cuid"));
8
8
  const now_1 = __importDefault(require("./now"));
9
+ const objectId_1 = __importDefault(require("./objectId"));
9
10
  const uuid_1 = __importDefault(require("./uuid"));
10
11
  function createHandleDefault() {
11
12
  // const registry = new Map<string, (string, Prisma.DMMF.Field, PrismaMockData) => any>();
12
13
  const registry = new Map();
13
14
  registry.set("autoincrement", (0, autoincrement_1.default)());
15
+ registry.set("auto", (0, objectId_1.default)());
14
16
  registry.set("cuid", (0, cuid_1.default)());
15
17
  registry.set("uuid", (0, uuid_1.default)());
16
18
  registry.set("now", now_1.default);
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generates MongoDB ObjectId-like strings (24 hex chars).
3
+ * Used for @default(auto()) with @db.ObjectId
4
+ */
5
+ declare const createObjectId: () => () => string;
6
+ export default createObjectId;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Generates MongoDB ObjectId-like strings (24 hex chars).
5
+ * Used for @default(auto()) with @db.ObjectId
6
+ */
7
+ const createObjectId = () => {
8
+ let counter = 0;
9
+ return () => {
10
+ const hex = "0123456789abcdef";
11
+ let result = "";
12
+ for (let i = 0; i < 22; i++) {
13
+ result += hex[Math.floor(Math.random() * 16)];
14
+ }
15
+ result += (++counter).toString(16).padStart(2, "0");
16
+ return result;
17
+ };
18
+ };
19
+ exports.default = createObjectId;
package/lib/delegate.js CHANGED
@@ -133,7 +133,7 @@ const createDelegate = ({ ref, prisma, datamodel = prisma.dmmf.datamodel, caseIn
133
133
  if (isCreating && (field.isUnique || field.isId)) {
134
134
  const existing = findOne({ where: { [field.name]: inputFieldData } });
135
135
  if (existing) {
136
- (0, errors_1.throwKnownError)(prisma, `Unique constraint failed on the fields: (\`${field.name}\`)`, { code: 'P2002', meta: { target: [field.name] } });
136
+ (0, errors_1.throwKnownError)(prisma, `Unique constraint failed on the fields: (\`${field.name}\`)`, { code: 'P2002', meta: { modelName: model.name, target: [field.name] } });
137
137
  }
138
138
  }
139
139
  // Handle relation fields (object type)
@@ -509,7 +509,9 @@ const createDelegate = ({ ref, prisma, datamodel = prisma.dmmf.datamodel, caseIn
509
509
  const findOrThrow = (args) => {
510
510
  const found = findOne(args);
511
511
  if (!found) {
512
- (0, errors_1.throwKnownError)(prisma, `No ${prop.slice(0, 1).toUpperCase()}${prop.slice(1)} found`);
512
+ (0, errors_1.throwKnownError)(prisma, `No ${prop.slice(0, 1).toUpperCase()}${prop.slice(1)} found`, {
513
+ meta: { cause: "No record was found for a query.", modelName: model.name },
514
+ });
513
515
  }
514
516
  return found;
515
517
  };
@@ -824,7 +826,7 @@ const createDelegate = ({ ref, prisma, datamodel = prisma.dmmf.datamodel, caseIn
824
826
  if (!hasMatch) {
825
827
  if (args.skipForeignKeysChecks)
826
828
  return;
827
- (0, errors_1.throwKnownError)(prisma, "An operation failed because it depends on one or more records that were required but not found. Record to update not found.", { meta: { cause: "Record to update not found." } });
829
+ (0, errors_1.throwKnownError)(prisma, "An operation failed because it depends on one or more records that were required but not found. Record to update not found.", { meta: { cause: "No record was found for an update.", modelName: model.name } });
828
830
  }
829
831
  ref.data = {
830
832
  ...ref.data,
@@ -1063,7 +1065,7 @@ const createDelegate = ({ ref, prisma, datamodel = prisma.dmmf.datamodel, caseIn
1063
1065
  delete: (args) => {
1064
1066
  const item = findOne(args);
1065
1067
  if (!item) {
1066
- (0, errors_1.throwKnownError)(prisma, "An operation failed because it depends on one or more records that were required but not found. Record to delete does not exist.", { meta: { cause: "Record to delete does not exist." } });
1068
+ (0, errors_1.throwKnownError)(prisma, "An operation failed because it depends on one or more records that were required but not found. Record to delete does not exist.", { meta: { cause: "No record was found for a delete.", modelName: model.name } });
1067
1069
  }
1068
1070
  const deleted = deleteMany(args);
1069
1071
  if (deleted.length) {
@@ -40,6 +40,8 @@ function createMatch({ prisma, getFieldRelationshipWhere, getDelegateForFieldNam
40
40
  if (info?.relationName) {
41
41
  const childName = (0, fieldHelpers_1.getCamelCase)(info.type);
42
42
  let childWhere = {};
43
+ let useIsFilter = false;
44
+ let useIsNotFilter = false;
43
45
  if (filter.every) {
44
46
  childWhere = filter.every;
45
47
  }
@@ -49,6 +51,14 @@ function createMatch({ prisma, getFieldRelationshipWhere, getDelegateForFieldNam
49
51
  else if (filter.none) {
50
52
  childWhere = filter.none;
51
53
  }
54
+ else if ("is" in filter) {
55
+ useIsFilter = true;
56
+ childWhere = filter.is === null ? {} : filter.is;
57
+ }
58
+ else if ("isNot" in filter) {
59
+ useIsNotFilter = true;
60
+ childWhere = filter.isNot === null ? {} : filter.isNot;
61
+ }
52
62
  else {
53
63
  childWhere = filter;
54
64
  }
@@ -57,10 +67,37 @@ function createMatch({ prisma, getFieldRelationshipWhere, getDelegateForFieldNam
57
67
  });
58
68
  const delegate = getDelegateForFieldName(childName);
59
69
  const joinWhere = getFieldRelationshipWhere(item, info, submodel);
70
+ if (useIsFilter) {
71
+ if (filter.is === null) {
72
+ if (!joinWhere)
73
+ return true;
74
+ const res = delegate.findMany({ where: joinWhere });
75
+ return res.length === 0;
76
+ }
77
+ if (!joinWhere)
78
+ return false;
79
+ const res = delegate.findMany({
80
+ where: { AND: [childWhere, joinWhere] },
81
+ });
82
+ return res.length > 0;
83
+ }
84
+ if (useIsNotFilter) {
85
+ if (filter.isNot === null) {
86
+ if (!joinWhere)
87
+ return false;
88
+ const res = delegate.findMany({ where: joinWhere });
89
+ return res.length > 0;
90
+ }
91
+ if (!joinWhere)
92
+ return true;
93
+ const res = delegate.findMany({
94
+ where: { AND: [childWhere, joinWhere] },
95
+ });
96
+ return res.length === 0;
97
+ }
60
98
  if (!joinWhere) {
61
99
  return false;
62
100
  }
63
- // return true
64
101
  const res = delegate.findMany({
65
102
  where: {
66
103
  AND: [
@@ -70,17 +107,12 @@ function createMatch({ prisma, getFieldRelationshipWhere, getDelegateForFieldNam
70
107
  }
71
108
  });
72
109
  if (filter.every) {
73
- // const all = data[childName].filter(
74
- // matchFnc(getFieldRelationshipWhere(item, info)),
75
- // )
76
110
  const where = getFieldRelationshipWhere(item, info, model);
77
111
  if (!where)
78
112
  return false;
79
113
  const all = delegate.findMany({
80
114
  where,
81
115
  });
82
- // For "every": all related records must match the condition
83
- // If no related records exist, "every" is vacuously true
84
116
  if (all.length === 0)
85
117
  return true;
86
118
  return res.length === all.length;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prisma-mock",
3
- "version": "1.1.0-alpha.2",
3
+ "version": "1.1.0-alpha.3",
4
4
  "description": "Mock prisma for unit testing database",
5
5
  "main": "lib/index.js",
6
6
  "repository": {
@@ -45,11 +45,13 @@
45
45
  "preversion": "jest && tsc",
46
46
  "lint": "tsc --noEmit",
47
47
  "build": "tsc",
48
- "test": "jest",
48
+ "test": "prisma generate && npm run generate:mongodb && jest",
49
49
  "generate": "prisma generate",
50
+ "generate:mongodb": "DATABASE_URL_MONGODB=mongodb://localhost:27017/test prisma generate --schema=prisma/schema-mongodb.prisma",
50
51
  "release": "yarn build && changeset publish && git push --follow-tags",
51
52
  "watch": "tsc --watch",
52
53
  "test:postgres": "env-cmd -e postgres jest --maxWorkers=1",
54
+ "test:mongodb": "npm run generate:mongodb && jest __tests__/mongodb.test.ts",
53
55
  "changeset": "changeset",
54
56
  "changeset:add": "changeset add",
55
57
  "changeset:validate:ci": "changeset status --since=origin/main --verbose"