Skip to content

Commit 4f097ce

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents 241a1d8 + 33bdd87 commit 4f097ce

18 files changed

+1604
-1512
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ __BREAKING CHANGES:__
88
___
99
- IMPROVE: Optimize queries on classes with pointer permissions. [#7061](https://github.com/parse-community/parse-server/pull/7061). Thanks to [Pedro Diaz](https://github.com/pdiaz)
1010
- FIX: request.context for afterFind triggers. [#7078](https://github.com/parse-community/parse-server/pull/7078). Thanks to [dblythy](https://github.com/dblythy)
11+
- NEW: Added convenience method Parse.Cloud.sendEmail(...) to send email via email adapter in Cloud Code. [#7089](https://github.com/parse-community/parse-server/pull/7089). Thanks to [dblythy](https://github.com/dblythy)
12+
- FIX: Winston Logger interpolating stdout to console [#7114](https://github.com/parse-community/parse-server/pull/7114). Thanks to [dplewis](https://github.com/dplewis)
13+
- NEW: LiveQuery support for $and, $nor, $containedBy, $geoWithin, $geoIntersects queries [#7113](https://github.com/parse-community/parse-server/pull/7113). Thanks to [dplewis](https://github.com/dplewis)
1114

1215
### 4.5.0
1316
[Full Changelog](https://github.com/parse-community/parse-server/compare/4.4.0...4.5.0)

package-lock.json

Lines changed: 228 additions & 309 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,38 +26,38 @@
2626
"@parse/fs-files-adapter": "1.2.0",
2727
"@parse/push-adapter": "3.4.0",
2828
"@parse/s3-files-adapter": "1.6.0",
29-
"@parse/simple-mailgun-adapter": "1.1.0",
30-
"apollo-server-express": "2.19.0",
29+
"@parse/simple-mailgun-adapter": "1.2.0",
30+
"apollo-server-express": "2.19.1",
3131
"bcryptjs": "2.4.3",
3232
"body-parser": "1.19.0",
3333
"commander": "5.1.0",
3434
"cors": "2.8.5",
3535
"deepcopy": "2.1.0",
3636
"express": "4.17.1",
37-
"follow-redirects": "1.13.0",
37+
"follow-redirects": "1.13.1",
3838
"graphql": "15.4.0",
3939
"graphql-list-fields": "2.0.2",
4040
"graphql-relay": "0.6.0",
4141
"graphql-upload": "11.0.0",
4242
"intersect": "1.0.1",
4343
"jsonwebtoken": "8.5.1",
44-
"jwks-rsa": "1.11.0",
45-
"ldapjs": "2.2.2",
44+
"jwks-rsa": "1.12.1",
45+
"ldapjs": "2.2.3",
4646
"lodash": "4.17.20",
4747
"lru-cache": "5.1.1",
48-
"mime": "2.4.6",
48+
"mime": "2.4.7",
4949
"mongodb": "3.6.3",
5050
"parse": "2.19.0",
51-
"pg-promise": "10.8.1",
51+
"pg-promise": "10.8.6",
5252
"pluralize": "8.0.0",
5353
"redis": "3.0.2",
54-
"semver": "7.3.2",
54+
"semver": "7.3.4",
5555
"subscriptions-transport-ws": "0.9.18",
5656
"tv4": "1.3.0",
57-
"uuid": "8.3.1",
57+
"uuid": "8.3.2",
5858
"winston": "3.3.3",
5959
"winston-daily-rotate-file": "4.5.0",
60-
"ws": "7.4.0"
60+
"ws": "7.4.1"
6161
},
6262
"devDependencies": {
6363
"@babel/cli": "7.10.0",

spec/Auth.spec.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,9 @@ describe('Auth', () => {
168168
const acl = new Parse.ACL();
169169
const role = new Parse.Role('roleloadtest' + i, acl);
170170
role.getUsers().add([user]);
171-
roles.push(role.save());
171+
roles.push(role);
172172
}
173-
const savedRoles = await Promise.all(roles);
173+
const savedRoles = await Parse.Object.saveAll(roles);
174174
expect(savedRoles.length).toBe(rolesNumber);
175175
const cloudRoles = await userAuth.getRolesForUser();
176176
expect(cloudRoles.length).toBe(rolesNumber);
@@ -192,9 +192,9 @@ describe('Auth', () => {
192192
const acl = new Parse.ACL();
193193
const role = new Parse.Role('roleloadtest' + i, acl);
194194
role.getUsers().add([user]);
195-
roles.push(role.save());
195+
roles.push(role);
196196
}
197-
const savedRoles = await Promise.all(roles);
197+
const savedRoles = await Parse.Object.saveAll(roles);
198198
expect(savedRoles.length).toBe(rolesNumber);
199199
const cloudRoles = await userAuth.getRolesForUser();
200200
expect(cloudRoles.length).toBe(rolesNumber);

spec/CloudCode.spec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3168,3 +3168,29 @@ describe('afterLogin hook', () => {
31683168
await query.find({ context: { a: 'a' } });
31693169
});
31703170
});
3171+
3172+
describe('sendEmail', () => {
3173+
it('can send email via Parse.Cloud', async done => {
3174+
const emailAdapter = {
3175+
sendMail: mailData => {
3176+
expect(mailData).toBeDefined();
3177+
expect(mailData.to).toBe('test');
3178+
done();
3179+
},
3180+
};
3181+
await reconfigureServer({
3182+
emailAdapter: emailAdapter,
3183+
});
3184+
const mailData = { to: 'test' };
3185+
await Parse.Cloud.sendEmail(mailData);
3186+
});
3187+
3188+
it('cannot send email without adapter', async () => {
3189+
const logger = require('../lib/logger').logger;
3190+
spyOn(logger, 'error').and.callFake(() => {});
3191+
await Parse.Cloud.sendEmail({});
3192+
expect(logger.error).toHaveBeenCalledWith(
3193+
'Failed to send email because no mail adapter is configured for Parse Server.'
3194+
);
3195+
});
3196+
});

spec/ParseAPI.spec.js

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,31 +24,14 @@ const headers = {
2424
};
2525

2626
describe_only_db('mongo')('miscellaneous', () => {
27-
it('test rest_create_app', function (done) {
28-
let appId;
29-
Parse._request('POST', 'rest_create_app')
30-
.then(res => {
31-
expect(typeof res.application_id).toEqual('string');
32-
expect(res.master_key).toEqual('master');
33-
appId = res.application_id;
34-
Parse.initialize(appId, 'unused');
35-
const obj = new Parse.Object('TestObject');
36-
obj.set('foo', 'bar');
37-
return obj.save();
38-
})
39-
.then(() => {
40-
const config = Config.get(appId);
41-
return config.database.adapter.find('TestObject', { fields: {} }, {}, {});
42-
})
43-
.then(results => {
44-
expect(results.length).toEqual(1);
45-
expect(results[0]['foo']).toEqual('bar');
46-
done();
47-
})
48-
.catch(error => {
49-
fail(JSON.stringify(error));
50-
done();
51-
});
27+
it('db contains document after successful save', async () => {
28+
const obj = new Parse.Object('TestObject');
29+
obj.set('foo', 'bar');
30+
await obj.save();
31+
const config = Config.get(defaultConfiguration.appId);
32+
const results = await config.database.adapter.find('TestObject', { fields: {} }, {}, {});
33+
expect(results.length).toEqual(1);
34+
expect(results[0]['foo']).toEqual('bar');
5235
});
5336
});
5437

0 commit comments

Comments
 (0)