Skip to content

Commit 097af99

Browse files
committed
Merge from ParsePlatform/master
2 parents c060f3c + bd54878 commit 097af99

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1598
-730
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
## Parse Server Changelog
22

3+
### 2.1.2 (2/19/2016)
4+
5+
* Change: The S3 file adapter constructor requires a bucket name
6+
* Fix: Parse Query should throw if improperly encoded
7+
* Fix: Issue where roles were not used in some requests
8+
* Fix: serverURL will no longer default to api.parse.com/1
9+
310
### 2.1.1 (2/18/2016)
411

512
* Experimental: Schemas API support for DELETE operations

bin/dev

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ var nodemon = require('nodemon');
44
var babel = require("babel-core");
55
var gaze = require('gaze');
66
var fs = require('fs');
7+
var path = require('path');
78

89
// Watch the src and transpile when changed
910
gaze('src/**/*', function(err, watcher) {
1011
if (err) throw err;
11-
watcher.on('changed', function(file) {
12-
console.log(file + " has changed");
12+
watcher.on('changed', function(sourceFile) {
13+
console.log(sourceFile + " has changed");
1314
try {
14-
fs.writeFile(file.replace(/\/src\//, "/lib/"), babel.transformFileSync(file).code);
15+
targetFile = path.relative(__dirname, sourceFile).replace(/\/src\//, '/lib/');
16+
targetFile = path.resolve(__dirname, targetFile);
17+
fs.writeFile(targetFile, babel.transformFileSync(sourceFile).code);
1518
} catch (e) {
1619
console.error(e.message, e.stack);
1720
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "parse-server",
3-
"version": "2.1.1",
3+
"version": "2.1.2",
44
"description": "An express module providing a Parse-compatible API server",
55
"main": "lib/index.js",
66
"repository": {
@@ -12,6 +12,7 @@
1212
"apn": "^1.7.5",
1313
"aws-sdk": "~2.2.33",
1414
"azure-storage": "^0.8.0",
15+
"babel-polyfill": "^6.5.0",
1516
"babel-runtime": "^6.5.0",
1617
"bcrypt-nodejs": "0.0.3",
1718
"body-parser": "^1.14.2",

spec/FilesController.spec.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var FilesController = require('../src/Controllers/FilesController').FilesController;
2+
var Config = require("../src/Config");
3+
4+
// Small additional tests to improve overall coverage
5+
describe("FilesController",()=>{
6+
7+
it("should properly expand objects", (done) => {
8+
var config = new Config(Parse.applicationId);
9+
var filesController = new FilesController();
10+
var result = filesController.expandFilesInObject(config, function(){});
11+
12+
expect(result).toBeUndefined();
13+
14+
var fullFile = {
15+
type: '__type',
16+
url: "http://an.url"
17+
}
18+
19+
var anObject = {
20+
aFile: fullFile
21+
}
22+
filesController.expandFilesInObject(config, anObject);
23+
expect(anObject.aFile.url).toEqual("http://an.url");
24+
25+
done();
26+
})
27+
})

spec/LoggerController.spec.js

Lines changed: 59 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,53 +2,85 @@ var LoggerController = require('../src/Controllers/LoggerController').LoggerCont
22
var FileLoggerAdapter = require('../src/Adapters/Logger/FileLoggerAdapter').FileLoggerAdapter;
33

44
describe('LoggerController', () => {
5-
it('can check valid master key of request', (done) => {
5+
it('can check process a query witout throwing', (done) => {
66
// Make mock request
7-
var request = {
8-
auth: {
9-
isMaster: true
10-
},
11-
query: {}
12-
};
7+
var query = {};
138

149
var loggerController = new LoggerController(new FileLoggerAdapter());
1510

1611
expect(() => {
17-
loggerController.handleGET(request);
12+
loggerController.getLogs(query).then(function(res) {
13+
expect(res.length).toBe(0);
14+
done();
15+
})
1816
}).not.toThrow();
17+
});
18+
19+
it('properly validates dateTimes', (done) => {
20+
expect(LoggerController.validDateTime()).toBe(null);
21+
expect(LoggerController.validDateTime("String")).toBe(null);
22+
expect(LoggerController.validDateTime(123456).getTime()).toBe(123456);
23+
expect(LoggerController.validDateTime("2016-01-01Z00:00:00").getTime()).toBe(1451606400000);
1924
done();
2025
});
21-
22-
it('can check invalid construction of controller', (done) => {
26+
27+
it('can set the proper default values', (done) => {
28+
// Make mock request
29+
var result = LoggerController.parseOptions();
30+
expect(result.size).toEqual(10);
31+
expect(result.order).toEqual('desc');
32+
expect(result.level).toEqual('info');
33+
34+
done();
35+
});
36+
37+
it('can process a query witout throwing', (done) => {
2338
// Make mock request
24-
var request = {
25-
auth: {
26-
isMaster: true
27-
},
28-
query: {}
39+
var query = {
40+
from: "2016-01-01Z00:00:00",
41+
until: "2016-01-01Z00:00:00",
42+
size: 5,
43+
order: 'asc',
44+
level: 'error'
2945
};
3046

31-
var loggerController = new LoggerController();
47+
var result = LoggerController.parseOptions(query);
3248

33-
expect(() => {
34-
loggerController.handleGET(request);
35-
}).toThrow();
49+
expect(result.from.getTime()).toEqual(1451606400000);
50+
expect(result.until.getTime()).toEqual(1451606400000);
51+
expect(result.size).toEqual(5);
52+
expect(result.order).toEqual('asc');
53+
expect(result.level).toEqual('error');
54+
3655
done();
3756
});
38-
39-
it('can check invalid master key of request', (done) => {
57+
58+
it('can check process a query witout throwing', (done) => {
4059
// Make mock request
41-
var request = {
42-
auth: {
43-
isMaster: false
44-
},
45-
query: {}
60+
var query = {
61+
from: "2015-01-01",
62+
until: "2016-01-01",
63+
size: 5,
64+
order: 'desc',
65+
level: 'error'
4666
};
4767

4868
var loggerController = new LoggerController(new FileLoggerAdapter());
4969

5070
expect(() => {
51-
loggerController.handleGET(request);
71+
loggerController.getLogs(query).then(function(res) {
72+
expect(res.length).toBe(0);
73+
done();
74+
})
75+
}).not.toThrow();
76+
});
77+
78+
it('should throw without an adapter', (done) => {
79+
80+
var loggerController = new LoggerController();
81+
82+
expect(() => {
83+
loggerController.getLogs();
5284
}).toThrow();
5385
done();
5486
});

spec/LogsRouter.spec.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
var LogsRouter = require('../src/Routers/LogsRouter').LogsRouter;
2+
var LoggerController = require('../src/Controllers/LoggerController').LoggerController;
3+
var FileLoggerAdapter = require('../src/Adapters/Logger/FileLoggerAdapter').FileLoggerAdapter;
4+
5+
const loggerController = new LoggerController(new FileLoggerAdapter());
6+
7+
describe('LogsRouter', () => {
8+
it('can check valid master key of request', (done) => {
9+
// Make mock request
10+
var request = {
11+
auth: {
12+
isMaster: true
13+
},
14+
query: {},
15+
config: {
16+
loggerController: loggerController
17+
}
18+
};
19+
20+
var router = new LogsRouter();
21+
22+
expect(() => {
23+
router.handleGET(request);
24+
}).not.toThrow();
25+
done();
26+
});
27+
28+
it('can check invalid construction of controller', (done) => {
29+
// Make mock request
30+
var request = {
31+
auth: {
32+
isMaster: true
33+
},
34+
query: {},
35+
config: {
36+
loggerController: undefined // missing controller
37+
}
38+
};
39+
40+
var router = new LogsRouter();
41+
42+
expect(() => {
43+
router.handleGET(request);
44+
}).toThrow();
45+
done();
46+
});
47+
48+
it('can check invalid master key of request', (done) => {
49+
// Make mock request
50+
var request = {
51+
auth: {
52+
isMaster: false
53+
},
54+
query: {},
55+
config: {
56+
loggerController: loggerController
57+
}
58+
};
59+
60+
var router = new LogsRouter();
61+
62+
expect(() => {
63+
router.handleGET(request);
64+
}).toThrow();
65+
done();
66+
});
67+
});

spec/ParseObject.spec.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,4 +1736,33 @@ describe('Parse.Object testing', () => {
17361736
});
17371737
});
17381738

1739+
1740+
it("should create nested keys with _", done => {
1741+
const object = new Parse.Object("AnObject");
1742+
object.set("foo", {
1743+
"_bar": "_",
1744+
"baz_bar": 1,
1745+
"__foo_bar": true,
1746+
"_0": "underscore_zero",
1747+
"_more": {
1748+
"_nested": "key"
1749+
}
1750+
});
1751+
object.save().then( res => {
1752+
ok(res);
1753+
return res.fetch();
1754+
}).then( res => {
1755+
const foo = res.get("foo");
1756+
expect(foo["_bar"]).toEqual("_");
1757+
expect(foo["baz_bar"]).toEqual(1);
1758+
expect(foo["__foo_bar"]).toBe(true);
1759+
expect(foo["_0"]).toEqual("underscore_zero");
1760+
expect(foo["_more"]["_nested"]).toEqual("key");
1761+
done();
1762+
}).fail( err => {
1763+
console.error(err);
1764+
fail("should not fail");
1765+
done();
1766+
})
1767+
})
17391768
});

spec/ParseRole.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ describe('Parse Role testing', () => {
4949
}).then((x) => {
5050
x.set('foo', 'baz');
5151
// This should fail:
52-
return x.save();
52+
return x.save({},{sessionToken: ""});
5353
}).then((x) => {
5454
fail('Should not have been able to save.');
5555
}, (e) => {

0 commit comments

Comments
 (0)