Skip to content

Commit b16b84b

Browse files
committed
Merge branch 'master' into clean-up-schema
2 parents ae08b2a + 30197a7 commit b16b84b

File tree

9 files changed

+88
-10
lines changed

9 files changed

+88
-10
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ env:
1010
branches:
1111
only:
1212
- master
13+
- /^[0-9].[0-9].[0-9](-.*)?$/
1314
cache:
1415
directories:
1516
- "$HOME/.mongodb/versions/downloads"

spec/ParseAPI.spec.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,4 +1271,33 @@ describe('miscellaneous', function() {
12711271
});
12721272
});
12731273

1274+
it('gets relation fields', (done) => {
1275+
let object = new Parse.Object('AnObject');
1276+
let relatedObject = new Parse.Object('RelatedObject');
1277+
Parse.Object.saveAll([object, relatedObject]).then(() => {
1278+
object.relation('related').add(relatedObject);
1279+
return object.save();
1280+
}).then(() => {
1281+
let headers = {
1282+
'Content-Type': 'application/json',
1283+
'X-Parse-Application-Id': 'test',
1284+
'X-Parse-REST-API-Key': 'rest'
1285+
};
1286+
let requestOptions = {
1287+
headers: headers,
1288+
url: 'http://localhost:8378/1/classes/AnObject',
1289+
json: true
1290+
};
1291+
request.get(requestOptions, (err, res, body) => {
1292+
expect(body.results.length).toBe(1);
1293+
let result = body.results[0];
1294+
expect(result.related).toEqual({
1295+
__type: "Relation",
1296+
className: 'RelatedObject'
1297+
})
1298+
done();
1299+
});
1300+
})
1301+
})
1302+
12741303
});

spec/helper.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var express = require('express');
88
var facebook = require('../src/authDataManager/facebook');
99
var ParseServer = require('../src/index').ParseServer;
1010
var path = require('path');
11+
var TestUtils = require('../src/index').TestUtils;
1112

1213
var databaseURI = process.env.DATABASE_URI;
1314
var cloudMain = process.env.CLOUD_CODE_MAIN || './spec/cloud/main.js';
@@ -88,7 +89,7 @@ beforeEach(function(done) {
8889

8990
afterEach(function(done) {
9091
Parse.User.logOut().then(() => {
91-
return clearData();
92+
return TestUtils.destroyAllDataPermanently();
9293
}).then(() => {
9394
done();
9495
}, (error) => {
@@ -232,14 +233,6 @@ function mockFacebook() {
232233
return facebook;
233234
}
234235

235-
function clearData() {
236-
var promises = [];
237-
for (var conn in DatabaseAdapter.dbConnections) {
238-
promises.push(DatabaseAdapter.dbConnections[conn].deleteEverything());
239-
}
240-
return Promise.all(promises);
241-
}
242-
243236
// This is polluting, but, it makes it way easier to directly port old tests.
244237
global.Parse = Parse;
245238
global.TestObject = TestObject;

spec/transform.spec.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ var dummySchema = {
1313
return 'geopoint';
1414
}
1515
return;
16+
},
17+
getRelationFields: function() {
18+
return {}
1619
}
1720
};
1821

src/DatabaseAdapter.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ function clearDatabaseSettings() {
4949
appDatabaseOptions = {};
5050
}
5151

52+
//Used by tests
53+
function destroyAllDataPermanently() {
54+
if (process.env.TESTING) {
55+
var promises = [];
56+
for (var conn in dbConnections) {
57+
promises.push(dbConnections[conn].deleteEverything());
58+
}
59+
return Promise.all(promises);
60+
}
61+
throw 'Only supported in test environment';
62+
}
63+
5264
function getDatabaseConnection(appId: string, collectionPrefix: string) {
5365
if (dbConnections[appId]) {
5466
return dbConnections[appId];
@@ -71,5 +83,6 @@ module.exports = {
7183
setAppDatabaseOptions: setAppDatabaseOptions,
7284
setAppDatabaseURI: setAppDatabaseURI,
7385
clearDatabaseSettings: clearDatabaseSettings,
86+
destroyAllDataPermanently: destroyAllDataPermanently,
7487
defaultDatabaseURI: databaseURI
7588
};

src/Schema.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,24 @@ class Schema {
636636
}
637637
return false;
638638
};
639+
640+
getRelationFields(className) {
641+
if (this.data && this.data[className]) {
642+
let classData = this.data[className];
643+
return Object.keys(classData).filter((field) => {
644+
return classData[field].startsWith('relation');
645+
}).reduce((memo, field) => {
646+
let type = classData[field];
647+
let className = type.slice('relation<'.length, type.length - 1);
648+
memo[field] = {
649+
__type: 'Relation',
650+
className: className
651+
};
652+
return memo;
653+
}, {});
654+
}
655+
return {};
656+
}
639657
}
640658

641659
// Returns a promise for a new Schema.

src/TestUtils.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { destroyAllDataPermanently } from './DatabaseAdapter';
2+
3+
let unsupported = function() {
4+
throw 'Only supported in test environment';
5+
};
6+
7+
let _destroyAllDataPermanently;
8+
if (process.env.TESTING) {
9+
_destroyAllDataPermanently = destroyAllDataPermanently;
10+
} else {
11+
_destroyAllDataPermanently = unsupported;
12+
}
13+
14+
export default {
15+
destroyAllDataPermanently: _destroyAllDataPermanently};

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import winston from 'winston';
22
import ParseServer from './ParseServer';
33
import S3Adapter from 'parse-server-s3-adapter'
44
import FileSystemAdapter from 'parse-server-fs-adapter'
5+
import TestUtils from './TestUtils';
56
import { useExternal } from './deprecated'
67

78
// Factory function
@@ -15,4 +16,4 @@ _ParseServer.createLiveQueryServer = ParseServer.createLiveQueryServer;
1516
let GCSAdapter = useExternal('GCSAdapter', 'parse-server-gcs-adapter');
1617

1718
export default ParseServer;
18-
export { S3Adapter, GCSAdapter, FileSystemAdapter, _ParseServer as ParseServer };
19+
export { S3Adapter, GCSAdapter, FileSystemAdapter, TestUtils, _ParseServer as ParseServer };

src/transform.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,11 @@ function untransformObject(schema, className, mongoObject, isNestedObject = fals
732732
mongoObject[key], true);
733733
}
734734
}
735+
736+
if (!isNestedObject) {
737+
let relationFields = schema.getRelationFields(className);
738+
Object.assign(restObject, relationFields);
739+
}
735740
return restObject;
736741
default:
737742
throw 'unknown js type';

0 commit comments

Comments
 (0)