Skip to content

Commit fc3ebd0

Browse files
flovilmartdrew-gross
authored andcommitted
Style improvements (#2475)
* HooksRouter is enabled by default * Adds middleswares on PromiseRouter, fixes #2410 * Move testing line to helper * Modernize middlewares.js * Moves DB uniqueness initialization to DBController, modernize * Moves testing related code to spec folder * remove unused _removeHook function * Adds tests, docs for Analytics and improvements * nit * moves back TestUtils
1 parent ae36200 commit fc3ebd0

18 files changed

+179
-175
lines changed

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/ParseAPI.spec.js

Lines changed: 1 addition & 2 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) });

spec/helper.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
jasmine.DEFAULT_TIMEOUT_INTERVAL = process.env.PARSE_SERVER_TEST_TIMEOUT || 5000;
55

66
var cache = require('../src/cache').default;
7-
var DatabaseAdapter = require('../src/DatabaseAdapter');
87
var express = require('express');
98
var facebook = require('../src/authDataManager/facebook');
109
var ParseServer = require('../src/index').ParseServer;
1110
var path = require('path');
12-
var TestUtils = require('../src/index').TestUtils;
11+
var TestUtils = require('../src/TestUtils');
1312
var MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAdapter');
1413
const GridStoreAdapter = require('../src/Adapters/Files/GridStoreAdapter').GridStoreAdapter;
1514
const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter');
@@ -87,6 +86,7 @@ const reconfigureServer = changedConfiguration => {
8786
cache.clear();
8887
app = express();
8988
api = new ParseServer(newConfiguration);
89+
api.use(require('./testing-routes').router);
9090
app.use('/1', api);
9191

9292
server = app.listen(port);

src/testing-routes.js renamed to spec/testing-routes.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
// testing-routes.js
2-
import AppCache from './cache';
3-
import * as middlewares from './middlewares';
4-
import { ParseServer } from './index';
2+
import AppCache from '../src/cache';
3+
import * as middlewares from '../src/middlewares';
4+
import { ParseServer } from '../src/index';
55
import { Parse } from 'parse/node';
66

77
var express = require('express'),
8-
cryptoUtils = require('./cryptoUtils');
8+
cryptoUtils = require('../src/cryptoUtils');
99

1010
var router = express.Router();
1111

src/Adapters/Analytics/AnalyticsAdapter.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
export class AnalyticsAdapter {
2+
3+
/*
4+
@param parameters: the analytics request body, analytics info will be in the dimensions property
5+
@param req: the original http request
6+
*/
27
appOpened(parameters, req) {
38
return Promise.resolve({});
49
}
5-
10+
11+
/*
12+
@param eventName: the name of the custom eventName
13+
@param parameters: the analytics request body, analytics info will be in the dimensions property
14+
@param req: the original http request
15+
*/
616
trackEvent(eventName, parameters, req) {
717
return Promise.resolve({});
818
}

src/Controllers/AnalyticsController.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,23 @@ import { AnalyticsAdapter } from '../Adapters/Analytics/AnalyticsAdapter';
33

44
export class AnalyticsController extends AdaptableController {
55
appOpened(req) {
6-
return this.adapter.appOpened(req.body, req).then(
7-
function(response) {
8-
return { response: response };
9-
}).catch((err) => {
10-
return { response: {} };
11-
});
6+
return Promise.resolve().then(() => {
7+
return this.adapter.appOpened(req.body, req);
8+
}).then((response) => {
9+
return { response: response || {} };
10+
}).catch((err) => {
11+
return { response: {} };
12+
});
1213
}
1314

1415
trackEvent(req) {
15-
return this.adapter.trackEvent(req.params.eventName, req.body, req).then(
16-
function(response) {
17-
return { response: response };
18-
}).catch((err) => {
19-
return { response: {} };
20-
});
16+
return Promise.resolve().then(() => {
17+
return this.adapter.trackEvent(req.params.eventName, req.body, req);
18+
}).then((response) => {
19+
return { response: response || {} };
20+
}).catch((err) => {
21+
return { response: {} };
22+
});
2123
}
2224

2325
expectedAdapterType() {

src/Controllers/DatabaseController.js

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
// A database adapter that works with data exported from the hosted
22
// Parse database.
33

4-
import intersect from 'intersect';
5-
import _ from 'lodash';
6-
7-
var mongodb = require('mongodb');
8-
var Parse = require('parse/node').Parse;
9-
10-
var SchemaController = require('./SchemaController');
11-
12-
const deepcopy = require('deepcopy');
4+
import { Parse } from 'parse/node';
5+
import _ from 'lodash';
6+
import mongdb from 'mongodb';
7+
import intersect from 'intersect';
8+
import deepcopy from 'deepcopy';
9+
import logger from '../logger';
10+
import * as SchemaController from './SchemaController';
1311

1412
function addWriteACL(query, acl) {
1513
let newQuery = _.cloneDeep(query);
@@ -880,6 +878,28 @@ DatabaseController.prototype.addPointerPermissions = function(schema, className,
880878
}
881879
}
882880

881+
DatabaseController.prototype.performInitizalization = function() {
882+
const requiredUserFields = { fields: { ...SchemaController.defaultColumns._Default, ...SchemaController.defaultColumns._User } };
883+
884+
let userClassPromise = this.loadSchema()
885+
.then(schema => schema.enforceClassExists('_User'))
886+
887+
let usernameUniqueness = userClassPromise
888+
.then(() => this.adapter.ensureUniqueness('_User', requiredUserFields, ['username']))
889+
.catch(error => {
890+
logger.warn('Unable to ensure uniqueness for usernames: ', error);
891+
return Promise.reject(error);
892+
});
893+
894+
let emailUniqueness = userClassPromise
895+
.then(() => this.adapter.ensureUniqueness('_User', requiredUserFields, ['email']))
896+
.catch(error => {
897+
logger.warn('Unable to ensure uniqueness for user email addresses: ', error);
898+
return Promise.reject(error);
899+
});
900+
return Promise.all([usernameUniqueness, emailUniqueness]);
901+
}
902+
883903
function joinTableName(className, key) {
884904
return `_Join:${key}:${className}`;
885905
}

src/Controllers/HooksController.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
/** @flow weak */
22

3-
import * as DatabaseAdapter from "../DatabaseAdapter";
43
import * as triggers from "../triggers";
54
import * as Parse from "parse/node";
65
import * as request from "request";

src/Controllers/SchemaController.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ const dbTypeMatchesObjectType = (dbType, objectType) => {
268268

269269
// Stores the entire schema of the app in a weird hybrid format somewhere between
270270
// the mongo format and the Parse format. Soon, this will all be Parse format.
271-
class SchemaController {
271+
export default class SchemaController {
272272
_dbAdapter;
273273
data;
274274
perms;

src/Controllers/UserController.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import AdaptableController from './AdaptableController';
44
import MailAdapter from '../Adapters/Email/MailAdapter';
55
import rest from '../rest';
66

7-
var DatabaseAdapter = require('../DatabaseAdapter');
87
var RestWrite = require('../RestWrite');
98
var RestQuery = require('../RestQuery');
109
var hash = require('../password').hash;

0 commit comments

Comments
 (0)