Skip to content

Commit 5f8bad1

Browse files
committed
Merge remote-tracking branch 'ParsePlatform/master' into streamVideo_with_gridstoreadapter
# Conflicts: # src/Routers/FilesRouter.js
2 parents b639383 + cbcd44b commit 5f8bad1

39 files changed

+391
-304
lines changed

package.json

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
],
1919
"license": "BSD-3-Clause",
2020
"dependencies": {
21-
"babel-polyfill": "6.8.0",
21+
"babel-polyfill": "6.13.0",
2222
"babel-runtime": "6.11.6",
2323
"bcrypt-nodejs": "0.0.3",
2424
"body-parser": "1.15.2",
@@ -27,39 +27,39 @@
2727
"deepcopy": "0.6.3",
2828
"express": "4.14.0",
2929
"intersect": "1.0.1",
30-
"lodash": "4.14.0",
30+
"lodash": "4.14.2",
3131
"lru-cache": "4.0.1",
3232
"mailgun-js": "0.7.10",
3333
"mime": "1.3.4",
3434
"mongodb": "2.2.5",
35-
"multer": "1.1.0",
36-
"parse": "1.9.0",
35+
"multer": "1.2.0",
36+
"parse": "1.9.1",
3737
"parse-server-fs-adapter": "1.0.0",
3838
"parse-server-push-adapter": "1.0.4",
3939
"parse-server-s3-adapter": "1.0.4",
4040
"parse-server-simple-mailgun-adapter": "1.0.0",
41-
"pg-promise": "5.2.6",
41+
"pg-promise": "5.2.7",
4242
"redis": "2.6.2",
4343
"request": "2.74.0",
44-
"request-promise": "4.0.1",
45-
"semver": "^5.2.0",
44+
"request-promise": "4.1.1",
45+
"semver": "5.2.0",
4646
"tv4": "1.2.7",
4747
"winston": "2.2.0",
4848
"winston-daily-rotate-file": "1.2.0",
4949
"ws": "1.1.1"
5050
},
5151
"devDependencies": {
5252
"babel-cli": "6.11.4",
53-
"babel-core": "6.11.4",
54-
"babel-plugin-syntax-flow": "6.8.0",
53+
"babel-core": "6.13.2",
54+
"babel-plugin-syntax-flow": "6.13.0",
5555
"babel-plugin-transform-flow-strip-types": "6.8.0",
56-
"babel-preset-es2015": "6.6.0",
56+
"babel-preset-es2015": "6.13.2",
5757
"babel-preset-stage-0": "6.5.0",
58-
"babel-register": "6.9.0",
58+
"babel-register": "6.11.6",
5959
"codecov": "1.0.1",
6060
"cross-env": "2.0.0",
6161
"deep-diff": "0.3.4",
62-
"gaze": "1.1.0",
62+
"gaze": "1.1.1",
6363
"istanbul": "1.0.0-alpha.1",
6464
"jasmine": "2.4.1",
6565
"mongodb-runner": "3.3.2",
@@ -68,11 +68,12 @@
6868
"scripts": {
6969
"dev": "npm run build && node bin/dev",
7070
"build": "babel src/ -d lib/",
71-
"pretest": "cross-env MONGODB_VERSION=${MONGODB_VERSION:=3.2.6} MONGODB_STORAGE_ENGINE=mmapv1 mongodb-runner start",
72-
"test": "cross-env NODE_ENV=test TESTING=1 babel-node $COVERAGE_OPTION ./node_modules/.bin/jasmine",
73-
"test:win": "npm run pretest && cross-env NODE_ENV=test TESTING=1 babel-node ./node_modules/.bin/istanbul cover jasmine && npm run posttest",
71+
"pretest": "test -z \"$PARSE_SERVER_TEST_DB\" && cross-env MONGODB_VERSION=${MONGODB_VERSION:=3.2.6} MONGODB_STORAGE_ENGINE=mmapv1 mongodb-runner start || echo",
72+
"test": "cross-env NODE_ENV=test TESTING=1 babel-node $COVERAGE_OPTION ./node_modules/jasmine/bin/jasmine.js",
73+
"test:win": "npm run pretest && cross-env NODE_ENV=test TESTING=1 babel-node ./node_modules/jasmine/bin/jasmine.js && npm run posttest",
7474
"posttest": "mongodb-runner stop",
7575
"coverage": "cross-env COVERAGE_OPTION='./node_modules/.bin/istanbul cover' npm test",
76+
"coverage:win": "npm run pretest && cross-env NODE_ENV=test TESTING=1 babel-node ./node_modules/babel-istanbul/lib/cli.js cover ./node_modules/jasmine/bin/jasmine.js && npm run posttest",
7677
"start": "node ./bin/parse-server",
7778
"prepublish": "npm run build"
7879
},

spec/Analytics.spec.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
const analyticsAdapter = {
2+
appOpened: function(parameters, req) {},
3+
trackEvent: function(eventName, parameters, req) {}
4+
}
5+
6+
describe('AnalyticsController', () => {
7+
it('should track a simple event', (done) => {
8+
9+
spyOn(analyticsAdapter, 'trackEvent').and.callThrough();
10+
reconfigureServer({
11+
analyticsAdapter
12+
}).then(() => {
13+
return Parse.Analytics.track('MyEvent', {
14+
key: 'value',
15+
count: '0'
16+
})
17+
}).then(() => {
18+
expect(analyticsAdapter.trackEvent).toHaveBeenCalled();
19+
var lastCall = analyticsAdapter.trackEvent.calls.first();
20+
let args = lastCall.args;
21+
expect(args[0]).toEqual('MyEvent');
22+
expect(args[1]).toEqual({
23+
dimensions: {
24+
key: 'value',
25+
count: '0'
26+
}
27+
});
28+
done();
29+
}, (err) => {
30+
fail(JSON.stringify(err));
31+
done();
32+
})
33+
});
34+
35+
it('should track a app opened event', (done) => {
36+
37+
spyOn(analyticsAdapter, 'appOpened').and.callThrough();
38+
reconfigureServer({
39+
analyticsAdapter
40+
}).then(() => {
41+
return Parse.Analytics.track('AppOpened', {
42+
key: 'value',
43+
count: '0'
44+
})
45+
}).then(() => {
46+
expect(analyticsAdapter.appOpened).toHaveBeenCalled();
47+
var lastCall = analyticsAdapter.appOpened.calls.first();
48+
let args = lastCall.args;
49+
expect(args[0]).toEqual({
50+
dimensions: {
51+
key: 'value',
52+
count: '0'
53+
}
54+
});
55+
done();
56+
}, (err) => {
57+
fail(JSON.stringify(err));
58+
done();
59+
})
60+
})
61+
})

spec/CloudCode.spec.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,44 @@ describe('Cloud Code', () => {
684684
});
685685
});
686686

687+
it('beforeSave should not affect fetched pointers', done => {
688+
Parse.Cloud.beforeSave('BeforeSaveUnchanged', (req, res) => {
689+
res.success();
690+
});
691+
692+
Parse.Cloud.beforeSave('BeforeSaveChanged', function(req, res) {
693+
req.object.set('foo', 'baz');
694+
res.success();
695+
});
696+
697+
var TestObject = Parse.Object.extend("TestObject");
698+
var BeforeSaveUnchangedObject = Parse.Object.extend("BeforeSaveUnchanged");
699+
var BeforeSaveChangedObject = Parse.Object.extend("BeforeSaveChanged");
700+
701+
var aTestObject = new TestObject();
702+
aTestObject.set("foo", "bar");
703+
aTestObject.save()
704+
.then(aTestObject => {
705+
var aBeforeSaveUnchangedObject = new BeforeSaveUnchangedObject();
706+
aBeforeSaveUnchangedObject.set("aTestObject", aTestObject);
707+
expect(aBeforeSaveUnchangedObject.get("aTestObject").get("foo")).toEqual("bar");
708+
return aBeforeSaveUnchangedObject.save();
709+
})
710+
.then(aBeforeSaveUnchangedObject => {
711+
expect(aBeforeSaveUnchangedObject.get("aTestObject").get("foo")).toEqual("bar");
712+
713+
var aBeforeSaveChangedObject = new BeforeSaveChangedObject();
714+
aBeforeSaveChangedObject.set("aTestObject", aTestObject);
715+
expect(aBeforeSaveChangedObject.get("aTestObject").get("foo")).toEqual("bar");
716+
return aBeforeSaveChangedObject.save();
717+
})
718+
.then(aBeforeSaveChangedObject => {
719+
expect(aBeforeSaveChangedObject.get("aTestObject").get("foo")).toEqual("bar");
720+
expect(aBeforeSaveChangedObject.get("foo")).toEqual("baz");
721+
done();
722+
});
723+
});
724+
687725
it_exclude_dbs(['postgres'])('should fully delete objects when using `unset` with beforeSave (regression test for #1840)', done => {
688726
var TestObject = Parse.Object.extend('TestObject');
689727
var NoBeforeSaveObject = Parse.Object.extend('NoBeforeSave');

spec/CloudCodeLogger.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
'use strict';
22
var LoggerController = require('../src/Controllers/LoggerController').LoggerController;
3-
var FileLoggerAdapter = require('../src/Adapters/Logger/FileLoggerAdapter').FileLoggerAdapter;
3+
var WinstonLoggerAdapter = require('../src/Adapters/Logger/WinstonLoggerAdapter').WinstonLoggerAdapter;
44

55
describe("Cloud Code Logger", () => {
66
it("should expose log to functions", (done) => {
7-
var logController = new LoggerController(new FileLoggerAdapter());
7+
var logController = new LoggerController(new WinstonLoggerAdapter());
88

99
Parse.Cloud.define("loggerTest", (req, res) => {
1010
req.log.info('logTest', 'info log', {info: 'some log' });
@@ -35,7 +35,7 @@ describe("Cloud Code Logger", () => {
3535
});
3636

3737
it("should expose log to trigger", (done) => {
38-
var logController = new LoggerController(new FileLoggerAdapter());
38+
var logController = new LoggerController(new WinstonLoggerAdapter());
3939

4040
Parse.Cloud.beforeSave("MyObject", (req, res) => {
4141
req.log.info('beforeSave MyObject', 'info log', {info: 'some log' });

spec/Logger.spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var logger = require('../src/logger');
2+
var winston = require('winston');
3+
4+
class TestTransport extends winston.Transport {
5+
log(level, msg, meta, callback) {
6+
callback(null, true);
7+
}
8+
}
9+
10+
describe('Logger', () => {
11+
it('should add transport', () => {
12+
const testTransport = new (TestTransport)({});
13+
spyOn(testTransport, 'log');
14+
logger.addTransport(testTransport);
15+
logger.logger.info('hi');
16+
expect(testTransport.log).toHaveBeenCalled();
17+
});
18+
});

spec/LoggerController.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
var LoggerController = require('../src/Controllers/LoggerController').LoggerController;
2-
var FileLoggerAdapter = require('../src/Adapters/Logger/FileLoggerAdapter').FileLoggerAdapter;
2+
var WinstonLoggerAdapter = require('../src/Adapters/Logger/WinstonLoggerAdapter').WinstonLoggerAdapter;
33

44
describe('LoggerController', () => {
55
it('can check process a query without throwing', (done) => {
66
// Make mock request
77
var query = {};
88

9-
var loggerController = new LoggerController(new FileLoggerAdapter());
9+
var loggerController = new LoggerController(new WinstonLoggerAdapter());
1010

1111
expect(() => {
1212
loggerController.getLogs(query).then(function(res) {
@@ -69,7 +69,7 @@ describe('LoggerController', () => {
6969
level: 'error'
7070
};
7171

72-
var loggerController = new LoggerController(new FileLoggerAdapter());
72+
var loggerController = new LoggerController(new WinstonLoggerAdapter());
7373

7474
expect(() => {
7575
loggerController.getLogs(query).then(function(res) {

spec/LogsRouter.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
const request = require('request');
44
var LogsRouter = require('../src/Routers/LogsRouter').LogsRouter;
55
var LoggerController = require('../src/Controllers/LoggerController').LoggerController;
6-
var FileLoggerAdapter = require('../src/Adapters/Logger/FileLoggerAdapter').FileLoggerAdapter;
6+
var WinstonLoggerAdapter = require('../src/Adapters/Logger/WinstonLoggerAdapter').WinstonLoggerAdapter;
77

8-
const loggerController = new LoggerController(new FileLoggerAdapter());
8+
const loggerController = new LoggerController(new WinstonLoggerAdapter());
99

1010
describe('LogsRouter', () => {
1111
it('can check valid master key of request', (done) => {

spec/MongoStorageAdapter.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const databaseURI = 'mongodb://localhost:27017/parseServerMongoAdapterTestDataba
66

77
// These tests are specific to the mongo storage adapter + mongo storage format
88
// and will eventually be moved into their own repo
9-
describe('MongoStorageAdapter', () => {
9+
describe_only_db('mongo')('MongoStorageAdapter', () => {
1010
beforeEach(done => {
1111
new MongoStorageAdapter({ uri: databaseURI })
1212
.deleteAllClasses()

spec/ParseACL.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@ describe('Parse.ACL', () => {
10931093
});
10941094
});
10951095

1096-
it("acl saveAll with permissions", (done) => {
1096+
it_exclude_dbs(['postgres'])("acl saveAll with permissions", (done) => {
10971097
Parse.User.signUp("alice", "wonderland", null, {
10981098
success: function(alice) {
10991099
var acl = new Parse.ACL(alice);

spec/ParseAPI.spec.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
// It would probably be better to refactor them into different files.
33
'use strict';
44

5-
var DatabaseAdapter = require('../src/DatabaseAdapter');
65
const MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAdapter');
76
var request = require('request');
87
const rp = require('request-promise');
98
const Parse = require("parse/node");
109
let Config = require('../src/Config');
1110
const SchemaController = require('../src/Controllers/SchemaController');
12-
var TestUtils = require('../src/index').TestUtils;
11+
var TestUtils = require('../src/TestUtils');
1312
const deepcopy = require('deepcopy');
1413

1514
const userSchema = SchemaController.convertSchemaToAdapterSchema({ className: '_User', fields: Object.assign({}, SchemaController.defaultColumns._Default, SchemaController.defaultColumns._User) });
@@ -348,7 +347,7 @@ describe('miscellaneous', function() {
348347
});
349348
});
350349

351-
it('test rest_create_app', function(done) {
350+
it_exclude_dbs(['postgres'])('test rest_create_app', function(done) {
352351
var appId;
353352
Parse._request('POST', 'rest_create_app').then((res) => {
354353
expect(typeof res.application_id).toEqual('string');

0 commit comments

Comments
 (0)