Skip to content

Commit 6526942

Browse files
committed
Merge pull request #1 from ParsePlatform/master
updating
2 parents ddd0118 + 2d94a88 commit 6526942

11 files changed

+1183
-143
lines changed

spec/HTTPRequest.spec.js

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -216,17 +216,6 @@ describe("httpRequest", () => {
216216
});
217217
});
218218

219-
it('should get a cat image', (done) => {
220-
httpRequest({
221-
url: 'http://thecatapi.com/api/images/get?format=src&type=jpg',
222-
followRedirects: true
223-
}).then((res) => {
224-
expect(res.buffer).not.toBe(null);
225-
expect(res.text).not.toBe(null);
226-
done();
227-
})
228-
})
229-
230219
it("should params object to query string", (done) => {
231220
httpRequest({
232221
url: httpRequestServer+"/qs",

spec/MongoTransform.spec.js

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ var dummySchema = {
2323
};
2424

2525

26-
describe('parseObjectToMongoObject', () => {
26+
describe('parseObjectToMongoObjectForCreate', () => {
2727

2828
it('a basic number', (done) => {
2929
var input = {five: 5};
30-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
30+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input, {
31+
fields: {five: {type: 'Number'}}
32+
});
3133
jequal(input, output);
3234
done();
3335
});
@@ -37,7 +39,7 @@ describe('parseObjectToMongoObject', () => {
3739
createdAt: "2015-10-06T21:24:50.332Z",
3840
updatedAt: "2015-10-06T21:24:50.332Z"
3941
};
40-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
42+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input);
4143
expect(output._created_at instanceof Date).toBe(true);
4244
expect(output._updated_at instanceof Date).toBe(true);
4345
done();
@@ -49,43 +51,53 @@ describe('parseObjectToMongoObject', () => {
4951
objectId: 'myId',
5052
className: 'Blah',
5153
};
52-
var out = transform.parseObjectToMongoObject(dummySchema, null, {pointers: [pointer]});
54+
var out = transform.parseObjectToMongoObjectForCreate(dummySchema, null, {pointers: [pointer]},{
55+
fields: {pointers: {type: 'Array'}}
56+
});
5357
jequal([pointer], out.pointers);
5458
done();
5559
});
5660

57-
it('a delete op', (done) => {
61+
//TODO: object creation requests shouldn't be seeing __op delete, it makes no sense to
62+
//have __op delete in a new object. Figure out what this should actually be testing.
63+
notWorking('a delete op', (done) => {
5864
var input = {deleteMe: {__op: 'Delete'}};
59-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
65+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input);
6066
jequal(output, {});
6167
done();
6268
});
6369

6470
it('basic ACL', (done) => {
6571
var input = {ACL: {'0123': {'read': true, 'write': true}}};
66-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
72+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input);
6773
// This just checks that it doesn't crash, but it should check format.
6874
done();
6975
});
7076

7177
describe('GeoPoints', () => {
7278
it('plain', (done) => {
7379
var geoPoint = {__type: 'GeoPoint', longitude: 180, latitude: -180};
74-
var out = transform.parseObjectToMongoObject(dummySchema, null, {location: geoPoint});
80+
var out = transform.parseObjectToMongoObjectForCreate(dummySchema, null, {location: geoPoint},{
81+
fields: {location: {type: 'GeoPoint'}}
82+
});
7583
expect(out.location).toEqual([180, -180]);
7684
done();
7785
});
7886

7987
it('in array', (done) => {
8088
var geoPoint = {__type: 'GeoPoint', longitude: 180, latitude: -180};
81-
var out = transform.parseObjectToMongoObject(dummySchema, null, {locations: [geoPoint, geoPoint]});
89+
var out = transform.parseObjectToMongoObjectForCreate(dummySchema, null, {locations: [geoPoint, geoPoint]},{
90+
fields: {locations: {type: 'Array'}}
91+
});
8292
expect(out.locations).toEqual([geoPoint, geoPoint]);
8393
done();
8494
});
8595

8696
it('in sub-object', (done) => {
8797
var geoPoint = {__type: 'GeoPoint', longitude: 180, latitude: -180};
88-
var out = transform.parseObjectToMongoObject(dummySchema, null, { locations: { start: geoPoint }});
98+
var out = transform.parseObjectToMongoObjectForCreate(dummySchema, null, { locations: { start: geoPoint }},{
99+
fields: {locations: {type: 'Object'}}
100+
});
89101
expect(out).toEqual({ locations: { start: geoPoint } });
90102
done();
91103
});
@@ -196,7 +208,9 @@ describe('transform schema key changes', () => {
196208
var input = {
197209
somePointer: {__type: 'Pointer', className: 'Micro', objectId: 'oft'}
198210
};
199-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
211+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input, {
212+
fields: {somePointer: {type: 'Pointer'}}
213+
});
200214
expect(typeof output._p_somePointer).toEqual('string');
201215
expect(output._p_somePointer).toEqual('Micro$oft');
202216
done();
@@ -206,7 +220,9 @@ describe('transform schema key changes', () => {
206220
var input = {
207221
userPointer: {__type: 'Pointer', className: '_User', objectId: 'qwerty'}
208222
};
209-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
223+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input, {
224+
fields: {userPointer: {type: 'Pointer'}}
225+
});
210226
expect(typeof output._p_userPointer).toEqual('string');
211227
expect(output._p_userPointer).toEqual('_User$qwerty');
212228
done();
@@ -219,7 +235,7 @@ describe('transform schema key changes', () => {
219235
"Kevin": { "write": true }
220236
}
221237
};
222-
var output = transform.parseObjectToMongoObject(dummySchema, null, input);
238+
var output = transform.parseObjectToMongoObjectForCreate(dummySchema, null, input);
223239
expect(typeof output._rperm).toEqual('object');
224240
expect(typeof output._wperm).toEqual('object');
225241
expect(output.ACL).toBeUndefined();

spec/Parse.Push.spec.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
'use strict';
22

3+
let request = require('request');
34

45
describe('Parse.Push', () => {
56

@@ -89,4 +90,57 @@ describe('Parse.Push', () => {
8990
done();
9091
});
9192
});
93+
94+
it('should not allow clients to query _PushStatus', done => {
95+
setup()
96+
.then(() => Parse.Push.send({
97+
where: {
98+
deviceType: 'ios'
99+
},
100+
data: {
101+
badge: 'increment',
102+
alert: 'Hello world!'
103+
}
104+
}, {useMasterKey: true}))
105+
.then(() => {
106+
request.get({
107+
url: 'http://localhost:8378/1/classes/_PushStatus',
108+
json: true,
109+
headers: {
110+
'X-Parse-Application-Id': 'test',
111+
},
112+
}, (error, response, body) => {
113+
expect(body.results.length).toEqual(0);
114+
done();
115+
});
116+
});
117+
});
118+
119+
it('should allow master key to query _PushStatus', done => {
120+
setup()
121+
.then(() => Parse.Push.send({
122+
where: {
123+
deviceType: 'ios'
124+
},
125+
data: {
126+
badge: 'increment',
127+
alert: 'Hello world!'
128+
}
129+
}, {useMasterKey: true}))
130+
.then(() => {
131+
request.get({
132+
url: 'http://localhost:8378/1/classes/_PushStatus',
133+
json: true,
134+
headers: {
135+
'X-Parse-Application-Id': 'test',
136+
'X-Parse-Master-Key': 'test',
137+
},
138+
}, (error, response, body) => {
139+
expect(body.results.length).toEqual(1);
140+
expect(body.results[0].query).toEqual('{"deviceType":"ios"}');
141+
expect(body.results[0].payload).toEqual('{"badge":"increment","alert":"Hello world!"}');
142+
done();
143+
});
144+
});
145+
});
92146
});

spec/ParseAPI.spec.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,52 @@ describe('miscellaneous', function() {
12981298
done();
12991299
});
13001300
})
1301+
});
1302+
1303+
it('properly returns incremented values (#1554)', (done) => {
1304+
let headers = {
1305+
'Content-Type': 'application/json',
1306+
'X-Parse-Application-Id': 'test',
1307+
'X-Parse-REST-API-Key': 'rest'
1308+
};
1309+
let requestOptions = {
1310+
headers: headers,
1311+
url: 'http://localhost:8378/1/classes/AnObject',
1312+
json: true
1313+
};
1314+
let object = new Parse.Object('AnObject');;
1315+
1316+
function runIncrement(amount) {
1317+
let options = Object.assign({}, requestOptions, {
1318+
body: {
1319+
"key": {
1320+
__op: 'Increment',
1321+
amount: amount
1322+
}
1323+
},
1324+
url: 'http://localhost:8378/1/classes/AnObject/'+object.id
1325+
})
1326+
return new Promise((resolve, reject) => {
1327+
request.put(options, (err, res, body) => {
1328+
if (err) {
1329+
reject(err);
1330+
} else {
1331+
resolve(body);
1332+
}
1333+
});
1334+
})
1335+
}
1336+
1337+
object.save().then(() => {
1338+
return runIncrement(1);
1339+
}).then((res) => {
1340+
expect(res.key).toBe(1);
1341+
return runIncrement(-1);
1342+
}).then((res) => {
1343+
console.log(res);
1344+
expect(res.key).toBe(0);
1345+
done();
1346+
})
13011347
})
13021348

13031349
});

spec/ParseUser.spec.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,6 +1028,23 @@ describe('Parse.User testing', () => {
10281028
});
10291029
});
10301030

1031+
it('returns authData when authed and logged in with provider (regression test for #1498)', done => {
1032+
Parse.Object.enableSingleInstance();
1033+
let provider = getMockFacebookProvider();
1034+
Parse.User._registerAuthenticationProvider(provider);
1035+
Parse.User._logInWith('facebook', {
1036+
success: user => {
1037+
let userQuery = new Parse.Query(Parse.User);
1038+
userQuery.get(user.id)
1039+
.then(user => {
1040+
expect(user.get('authData')).not.toBeUndefined();
1041+
Parse.Object.disableSingleInstance();
1042+
done();
1043+
});
1044+
}
1045+
});
1046+
});
1047+
10311048
it('log in with provider with files', done => {
10321049
let provider = getMockFacebookProvider();
10331050
Parse.User._registerAuthenticationProvider(provider);
@@ -2273,4 +2290,61 @@ describe('Parse.User testing', () => {
22732290
});
22742291
});
22752292

2293+
it('should not create extraneous session tokens', (done) => {
2294+
let config = new Config(Parse.applicationId);
2295+
config.database.loadSchema().then((s) => {
2296+
// Lock down the _User class for creation
2297+
return s.addClassIfNotExists('_User', {}, {create: {}})
2298+
}).then((res) => {
2299+
let user = new Parse.User();
2300+
return user.save({'username': 'user', 'password': 'pass'});
2301+
}).then(() => {
2302+
fail('should not be able to save the user');
2303+
}, (err) => {
2304+
return Promise.resolve();
2305+
}).then(() => {
2306+
let q = new Parse.Query('_Session');
2307+
return q.find({useMasterKey: true})
2308+
}).then((res) => {
2309+
// We should have no session created
2310+
expect(res.length).toBe(0);
2311+
done();
2312+
}, (err) => {
2313+
fail('should not fail');
2314+
done();
2315+
});
2316+
});
2317+
2318+
it('should not overwrite username when unlinking facebook user (regression test for #1532)', done => {
2319+
Parse.Object.disableSingleInstance();
2320+
var provider = getMockFacebookProvider();
2321+
Parse.User._registerAuthenticationProvider(provider);
2322+
var user = new Parse.User();
2323+
user.set("username", "testLinkWithProvider");
2324+
user.set("password", "mypass");
2325+
user.signUp()
2326+
.then(user => user._linkWith("facebook", {
2327+
success: user => {
2328+
expect(user.get('username')).toEqual('testLinkWithProvider');
2329+
expect(Parse.FacebookUtils.isLinked(user)).toBeTruthy();
2330+
return user._unlinkFrom('facebook')
2331+
.then(() => user.fetch())
2332+
.then(user => {
2333+
expect(user.get('username')).toEqual('testLinkWithProvider');
2334+
expect(Parse.FacebookUtils.isLinked(user)).toBeFalsy();
2335+
done();
2336+
});
2337+
},
2338+
error: e => {
2339+
fail('Unexpected failure testing linking');
2340+
fail(error);
2341+
done();
2342+
}
2343+
}))
2344+
.catch(error => {
2345+
fail('Unexpected failure testing in unlink user test');
2346+
fail(error);
2347+
done();
2348+
});
2349+
});
22762350
});

0 commit comments

Comments
 (0)