Add tests against multiple MongoDB versions (#7161)
* added tests environment with mongodb 4.4.3 * added CI test for mongodb 4.4.3 * added CI tests for MongoDB versions 4.0, 4.2 * improved flaky test (seems to max out the limit of simultaneous connections) * added spec helpers to run tests only for specific MongoDB version * addedn npm scripts to run tests against relevant mongodb versions * added spec helper function to exclude specific mongodb version * added test for changed aggregate query planner results * fixed regex test with incorrect regex syntax * fixed test where query has select no keys (empty array) * added changelog entry and ordered list * fixed test that tried to simultaneously delete and build index on same collection * added MongoDB compatibility table to readme * updated default local tests to use MongoDB 4.4.3 * added MongoDB badges for new versions to README * fixed typo in readme * added new test helper filter to contribution guide * fixed incorrect storage engine for mongodb 4.4 * changed CI to test MongoDB 3.6. with mmapv1 storage engine and standalone * improved CI test description * added CI self check for new MongoDB versions * fixed CI * removed CI * added CI * added throwing error if any of the checks failed * added github action connector * improved error message * improved error messages * improved error message * updated CI environment to MongoDB 3.6.22 * improved error messages * update CI env name * updated CI env name * improved error message * removed patch versions from CI env description * improved status message * removed version range from core lib * added explicit mongodb version to redis test and node 12 test * bumped Node 12 test to 12.20.1 (version currently recommended by AWS Elastic Beanstalk)
This commit is contained in:
@@ -3340,94 +3340,130 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('lets you add and delete indexes', done => {
|
||||
request({
|
||||
it('lets you add and delete indexes', async () => {
|
||||
// Wait due to index building in MongoDB on background process with collection lock
|
||||
const waitForIndexBuild = new Promise(r => setTimeout(r, 500));
|
||||
|
||||
await request({
|
||||
url: 'http://localhost:8378/1/schemas/NewClass',
|
||||
method: 'POST',
|
||||
headers: masterKeyHeaders,
|
||||
json: true,
|
||||
body: {},
|
||||
}).then(() => {
|
||||
request({
|
||||
url: 'http://localhost:8378/1/schemas/NewClass',
|
||||
method: 'PUT',
|
||||
headers: masterKeyHeaders,
|
||||
json: true,
|
||||
body: {
|
||||
fields: {
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
indexes: {
|
||||
name1: { aString: 1 },
|
||||
name2: { bString: 1 },
|
||||
name3: { cString: 1 },
|
||||
},
|
||||
},
|
||||
}).then(response => {
|
||||
expect(
|
||||
dd(response.data, {
|
||||
className: 'NewClass',
|
||||
fields: {
|
||||
ACL: { type: 'ACL' },
|
||||
createdAt: { type: 'Date' },
|
||||
updatedAt: { type: 'Date' },
|
||||
objectId: { type: 'String' },
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
classLevelPermissions: defaultClassLevelPermissions,
|
||||
indexes: {
|
||||
_id_: { _id: 1 },
|
||||
name1: { aString: 1 },
|
||||
name2: { bString: 1 },
|
||||
name3: { cString: 1 },
|
||||
},
|
||||
})
|
||||
).toEqual(undefined);
|
||||
request({
|
||||
url: 'http://localhost:8378/1/schemas/NewClass',
|
||||
method: 'PUT',
|
||||
headers: masterKeyHeaders,
|
||||
json: true,
|
||||
body: {
|
||||
indexes: {
|
||||
name1: { __op: 'Delete' },
|
||||
name2: { __op: 'Delete' },
|
||||
name4: { dString: 1 },
|
||||
},
|
||||
},
|
||||
}).then(response => {
|
||||
expect(response.data).toEqual({
|
||||
className: 'NewClass',
|
||||
fields: {
|
||||
ACL: { type: 'ACL' },
|
||||
createdAt: { type: 'Date' },
|
||||
updatedAt: { type: 'Date' },
|
||||
objectId: { type: 'String' },
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
classLevelPermissions: defaultClassLevelPermissions,
|
||||
indexes: {
|
||||
_id_: { _id: 1 },
|
||||
name3: { cString: 1 },
|
||||
name4: { dString: 1 },
|
||||
},
|
||||
});
|
||||
config.database.adapter.getIndexes('NewClass').then(indexes => {
|
||||
expect(indexes.length).toEqual(3);
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
let response = await request({
|
||||
url: 'http://localhost:8378/1/schemas/NewClass',
|
||||
method: 'PUT',
|
||||
headers: masterKeyHeaders,
|
||||
json: true,
|
||||
body: {
|
||||
fields: {
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
indexes: {
|
||||
name1: { aString: 1 },
|
||||
name2: { bString: 1 },
|
||||
name3: { cString: 1 },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(
|
||||
dd(response.data, {
|
||||
className: 'NewClass',
|
||||
fields: {
|
||||
ACL: { type: 'ACL' },
|
||||
createdAt: { type: 'Date' },
|
||||
updatedAt: { type: 'Date' },
|
||||
objectId: { type: 'String' },
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
classLevelPermissions: defaultClassLevelPermissions,
|
||||
indexes: {
|
||||
_id_: { _id: 1 },
|
||||
name1: { aString: 1 },
|
||||
name2: { bString: 1 },
|
||||
name3: { cString: 1 },
|
||||
},
|
||||
})
|
||||
).toEqual(undefined);
|
||||
|
||||
await waitForIndexBuild;
|
||||
response = await request({
|
||||
url: 'http://localhost:8378/1/schemas/NewClass',
|
||||
method: 'PUT',
|
||||
headers: masterKeyHeaders,
|
||||
json: true,
|
||||
body: {
|
||||
indexes: {
|
||||
name1: { __op: 'Delete' },
|
||||
name2: { __op: 'Delete' },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.data).toEqual({
|
||||
className: 'NewClass',
|
||||
fields: {
|
||||
ACL: { type: 'ACL' },
|
||||
createdAt: { type: 'Date' },
|
||||
updatedAt: { type: 'Date' },
|
||||
objectId: { type: 'String' },
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
classLevelPermissions: defaultClassLevelPermissions,
|
||||
indexes: {
|
||||
_id_: { _id: 1 },
|
||||
name3: { cString: 1 },
|
||||
},
|
||||
});
|
||||
|
||||
await waitForIndexBuild;
|
||||
response = await request({
|
||||
url: 'http://localhost:8378/1/schemas/NewClass',
|
||||
method: 'PUT',
|
||||
headers: masterKeyHeaders,
|
||||
json: true,
|
||||
body: {
|
||||
indexes: {
|
||||
name4: { dString: 1 },
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(response.data).toEqual({
|
||||
className: 'NewClass',
|
||||
fields: {
|
||||
ACL: { type: 'ACL' },
|
||||
createdAt: { type: 'Date' },
|
||||
updatedAt: { type: 'Date' },
|
||||
objectId: { type: 'String' },
|
||||
aString: { type: 'String' },
|
||||
bString: { type: 'String' },
|
||||
cString: { type: 'String' },
|
||||
dString: { type: 'String' },
|
||||
},
|
||||
classLevelPermissions: defaultClassLevelPermissions,
|
||||
indexes: {
|
||||
_id_: { _id: 1 },
|
||||
name3: { cString: 1 },
|
||||
name4: { dString: 1 },
|
||||
},
|
||||
});
|
||||
|
||||
await waitForIndexBuild;
|
||||
const indexes = await config.database.adapter.getIndexes('NewClass');
|
||||
expect(indexes.length).toEqual(3);
|
||||
});
|
||||
|
||||
it('cannot delete index that does not exist', done => {
|
||||
|
||||
Reference in New Issue
Block a user