Skip to content

Commit 7d56859

Browse files
deps(global)!: bump mongoose to 8.x (#30)
* deps(global)!: bump mongoose to 8.x BREAKING-CHANGE: drop mongo 4.x support * refactor(adapter-mongoose): migrate unit tests to mongodb-memory-server * refactor(adapter-mongoose): fix mongo-specific tests
1 parent 6e23fdb commit 7d56859

File tree

13 files changed

+307
-240
lines changed

13 files changed

+307
-240
lines changed

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
if: needs.should_run_tests.outputs.shouldRunTests == 'true'
7272
- name: Unit tests
7373
if: needs.should_run_tests.outputs.shouldRunTests == 'true'
74-
run: yarn jest --ci --maxWorkers=1 api-tests
74+
run: yarn jest --ci --maxWorkers=1 api-tests --forceExit
7575
env:
7676
CLOUDINARY_CLOUD_NAME: keystone-cloudinary
7777
CLOUDINARY_KEY: 758252673115372

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"lint:types": "tsc",
2727
"lint": "yarn lint:prettier && yarn lint:eslint && yarn lint:markdown && yarn lint:types",
2828
"test": "yarn lint && yarn test:unit && yarn cypress:run",
29+
"test:api": "yarn jest --ci --maxWorkers=1 api-tests",
2930
"test:unit": "cross-env DISABLE_LOGGING=true NODE_ENV=test jest --no-watchman --maxWorkers=1 --logHeapUsage",
3031
"test:unit:debug": "cross-env NODE_ENV=test node --inspect-brk `which jest` --runInBand",
3132
"benchmark": "yarn workspace @open-keystone/benchmarks go",

packages/adapter-mongoose/lib/adapter-mongoose.js

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class MongooseAdapter extends BaseKeystoneAdapter {
3131
this.listAdapterClass = MongooseListAdapter;
3232
this.name = 'mongoose';
3333
this.mongoose = new mongoose.Mongoose();
34-
this.minVer = '4.0.0';
34+
this.minVer = '5.0.0';
3535
if (debugMongoose()) {
3636
this.mongoose.set('debug', true);
3737
}
@@ -56,12 +56,7 @@ class MongooseAdapter extends BaseKeystoneAdapter {
5656
throw new Error(`No MongoDB connection URI specified.`);
5757
}
5858

59-
await this.mongoose.connect(uri, {
60-
useNewUrlParser: true,
61-
useFindAndModify: false,
62-
useUnifiedTopology: true,
63-
...mongooseConfig,
64-
});
59+
await this.mongoose.connect(uri, mongooseConfig);
6560
}
6661
async postConnect({ rels }) {
6762
// Setup all schemas
@@ -345,8 +340,8 @@ class MongooseListAdapter extends BaseListAdapter {
345340
return (
346341
await this._getModel(tableName).create(
347342
values.map(id => ({
348-
[near]: mongoose.Types.ObjectId(itemId),
349-
[far]: mongoose.Types.ObjectId(id),
343+
[near]: new mongoose.Types.ObjectId(itemId),
344+
[far]: new mongoose.Types.ObjectId(id),
350345
}))
351346
)
352347
).map(x => x[far]);
@@ -420,7 +415,7 @@ class MongooseListAdapter extends BaseListAdapter {
420415
}
421416
const currentRefIds = (
422417
await this._getModel(tableName).aggregate([
423-
{ $match: { [matchCol]: mongoose.Types.ObjectId(item.id) } },
418+
{ $match: { [matchCol]: new mongoose.Types.ObjectId(item.id) } },
424419
])
425420
).map(x => x[selectCol].toString());
426421

@@ -431,12 +426,12 @@ class MongooseListAdapter extends BaseListAdapter {
431426
await this._getModel(tableName).deleteMany({
432427
$and: [
433428
{ [matchCol]: { $eq: item._id } },
434-
{ [selectCol]: { $in: needsDelete.map(id => mongoose.Types.ObjectId(id)) } },
429+
{ [selectCol]: { $in: needsDelete.map(id => new mongoose.Types.ObjectId(id)) } },
435430
],
436431
});
437432
} else {
438433
await this._getModel(tableName).updateMany(
439-
{ [selectCol]: { $in: needsDelete.map(id => mongoose.Types.ObjectId(id)) } },
434+
{ [selectCol]: { $in: needsDelete.map(id => new mongoose.Types.ObjectId(id)) } },
440435
{ [columnName]: null }
441436
);
442437
}
@@ -457,7 +452,7 @@ class MongooseListAdapter extends BaseListAdapter {
457452
}
458453

459454
async _delete(id) {
460-
id = mongoose.Types.ObjectId(id);
455+
id = new mongoose.Types.ObjectId(id);
461456
// Traverse all other lists and remove references to this item
462457
// We can't just traverse our own fields, because we might have been
463458
// a silent partner in a relationship, so we have no self-knowledge of it.
@@ -521,14 +516,14 @@ class MongooseListAdapter extends BaseListAdapter {
521516
ids = await this._getModel(tableName).aggregate([
522517
{
523518
$match: {
524-
[columnNames[columnKey].near]: { $eq: mongoose.Types.ObjectId(from.fromId) },
519+
[columnNames[columnKey].near]: { $eq: new mongoose.Types.ObjectId(from.fromId) },
525520
},
526521
},
527522
]);
528523
ids = ids.map(x => x[columnNames[columnKey].far]);
529524
} else {
530525
ids = await this._getModel(tableName).aggregate([
531-
{ $match: { [columnName]: mongoose.Types.ObjectId(from.fromId) } },
526+
{ $match: { [columnName]: new mongoose.Types.ObjectId(from.fromId) } },
532527
]);
533528
ids = ids.map(x => x._id);
534529
}

packages/adapter-mongoose/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
"@open-keystone/keystone": "workspace:^",
1313
"@open-keystone/utils": "workspace:^",
1414
"cuid": "^2.1.8",
15-
"mongoose": "^5.13.15",
15+
"mongoose": "^8.16.0",
1616
"p-settle": "^4.1.1"
1717
},
1818
"devDependencies": {
19-
"mongodb": "^3.6.9",
20-
"mongodb-memory-server-core": "^6.9.6",
19+
"mongodb": "^6.17.0",
20+
"mongodb-memory-server": "^10.1.4",
2121
"pluralize": "^8.0.0"
2222
},
2323
"repository": "https://github.com/keystonejs/keystone-5/tree/main/packages/adapter-mongoose",

packages/adapter-mongoose/tests/mongo-results.test.js

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ const { queryParser } = require('../lib/query-parser');
33
const { postsAdapter, listAdapter } = require('./utils');
44

55
const { MongoClient } = require('mongodb');
6-
const MongoDBMemoryServer = require('mongodb-memory-server-core').default;
6+
const { MongoMemoryServer } = require('mongodb-memory-server');
77

88
const mongoJoinBuilder = parserOptions => {
99
return async (query, aggregate) => {
@@ -16,14 +16,7 @@ const mongoJoinBuilder = parserOptions => {
1616

1717
function getAggregate(database, collection) {
1818
return pipeline => {
19-
return new Promise((resolve, reject) => {
20-
database.collection(collection).aggregate(pipeline, (error, cursor) => {
21-
if (error) {
22-
return reject(error);
23-
}
24-
return resolve(cursor.toArray());
25-
});
26-
});
19+
return database.collection(collection).aggregate(pipeline).toArray();
2720
};
2821
}
2922

@@ -32,18 +25,15 @@ let mongoDb;
3225
let mongoServer;
3326

3427
beforeAll(async () => {
35-
mongoServer = new MongoDBMemoryServer();
36-
const mongoUri = await mongoServer.getConnectionString();
37-
mongoConnection = await MongoClient.connect(mongoUri, {
38-
useNewUrlParser: true,
39-
useUnifiedTopology: true,
40-
});
41-
mongoDb = mongoConnection.db(await mongoServer.getDbName());
42-
});
43-
44-
afterAll(() => {
45-
mongoConnection.close();
46-
mongoServer.stop();
28+
mongoServer = await MongoMemoryServer.create();
29+
const mongoUri = mongoServer.getUri();
30+
mongoConnection = await MongoClient.connect(mongoUri);
31+
mongoDb = mongoConnection.db();
32+
}, 60_000);
33+
34+
afterAll(async () => {
35+
await mongoConnection.close();
36+
await mongoServer.stop();
4737
});
4838

4939
beforeEach(async () => {
@@ -55,7 +45,7 @@ describe('mongo memory servier is alive', () => {
5545
it('should start mongo server', async () => {
5646
const collection = mongoDb.collection('heartbeat');
5747
const result = await collection.insertMany([{ a: 1 }, { b: 1 }]);
58-
expect(result.result).toMatchObject({ n: 2, ok: 1 });
48+
expect(result).toMatchObject({ acknowledged: true, insertedCount: 2 });
5949
expect(await collection.countDocuments({})).toBe(2);
6050
});
6151
});

packages/fields-location-google/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"@open-keystone/fields": "workspace:^",
2121
"cuid": "^2.1.8",
2222
"google-maps-react": "^2.0.6",
23-
"mongoose": "^5.13.15",
23+
"mongoose": "^8.16.0",
2424
"node-fetch": "^2.6.1",
2525
"react": "^17.0.2",
2626
"react-toast-notifications": "^2.4.4"

packages/fields-mongoid/src/Implementation.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,12 @@ export class MongooseMongoIdInterface extends MongooseFieldAdapter {
8282
return {
8383
...this.equalityConditions(
8484
this.field.isPrimaryKey ? '_id' : dbPath,
85-
s => s && mongoose.Types.ObjectId(s)
85+
s => s && new mongoose.Types.ObjectId(s)
8686
),
8787
//NOTE: ObjectId(null) returns a new ObjectId value
8888
...this.inConditions(
8989
this.field.isPrimaryKey ? '_id' : dbPath,
90-
s => s && mongoose.Types.ObjectId(s)
90+
s => s && new mongoose.Types.ObjectId(s)
9191
),
9292
};
9393
}

packages/fields/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"lodash.groupby": "^4.6.0",
5555
"lodash.isequal": "^4.5.0",
5656
"luxon": "^1.27.0",
57-
"mongoose": "^5.13.15",
57+
"mongoose": "^8.16.0",
5858
"p-settle": "^4.1.1",
5959
"prop-types": "^15.7.2",
6060
"react": "^17.0.2",

packages/fields/src/types/DateTime/test-fixtures.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export const filterTests = withKeystone => {
6161
undefined,
6262
adapterName === 'mongoose'
6363
? [
64-
{ name: 'person7', lastOnline: null },
6564
{ name: 'person6', lastOnline: null },
65+
{ name: 'person7', lastOnline: null },
6666
{ name: 'person1', lastOnline: '1666-04-12T00:08:00.000+10:00' },
6767
{ name: 'person2', lastOnline: '1950-10-01T23:59:59.999-10:00' },
6868
{ name: 'person3', lastOnline: '1990-12-31T12:34:56.789+01:23' },

packages/fields/src/types/DateTimeUtc/test-fixtures.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export const filterTests = withKeystone => {
6161
undefined,
6262
adapterName === 'mongoose'
6363
? [
64-
{ name: 'person7', lastOnline: null },
6564
{ name: 'person6', lastOnline: null },
65+
{ name: 'person7', lastOnline: null },
6666
{ name: 'person1', lastOnline: '1949-04-12T00:08:00.000Z' },
6767
{ name: 'person2', lastOnline: '1950-10-01T23:59:59.999Z' },
6868
{ name: 'person3', lastOnline: '1990-12-31T12:34:56.789Z' },

0 commit comments

Comments
 (0)