Files
kami-parse-server/spec/ParseConfigKey.spec.js

145 lines
4.9 KiB
JavaScript

const Config = require('../lib/Config');
describe('Config Keys', () => {
const invalidKeyErrorMessage = 'Invalid key\\(s\\) found in Parse Server configuration';
let loggerErrorSpy;
beforeEach(async () => {
const logger = require('../lib/logger').logger;
loggerErrorSpy = spyOn(logger, 'error').and.callThrough();
spyOn(Config, 'validateOptions').and.callFake(() => {});
});
it('recognizes invalid keys in root', async () => {
await expectAsync(reconfigureServer({
invalidKey: 1,
})).toBeResolved();
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
expect(error).toMatch(invalidKeyErrorMessage);
});
it('recognizes invalid keys in pages.customUrls', async () => {
await expectAsync(reconfigureServer({
pages: {
customUrls: {
invalidKey: 1,
EmailVerificationSendFail: 1,
}
}
})).toBeResolved();
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
expect(error).toMatch(invalidKeyErrorMessage);
expect(error).toMatch(`invalidKey`);
expect(error).toMatch(`EmailVerificationSendFail`);
});
it('recognizes invalid keys in liveQueryServerOptions', async () => {
await expectAsync(reconfigureServer({
liveQueryServerOptions: {
invalidKey: 1,
MasterKey: 1,
}
})).toBeResolved();
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
expect(error).toMatch(invalidKeyErrorMessage);
expect(error).toMatch(`MasterKey`);
});
it('recognizes invalid keys in rateLimit', async () => {
await expectAsync(reconfigureServer({
rateLimit: [
{ invalidKey: 1 },
{ RequestPath: 1 },
{ RequestTimeWindow: 1 },
]
})).toBeRejected();
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
expect(error).toMatch(invalidKeyErrorMessage);
expect(error).toMatch('rateLimit\\[0\\]\\.invalidKey');
expect(error).toMatch('rateLimit\\[1\\]\\.RequestPath');
expect(error).toMatch('rateLimit\\[2\\]\\.RequestTimeWindow');
});
it_only_db('mongo')('recognizes valid keys in default configuration', async () => {
await expectAsync(reconfigureServer({
...defaultConfiguration,
})).toBeResolved();
expect(loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '')).not.toMatch(invalidKeyErrorMessage);
});
it_only_db('mongo')('recognizes valid keys in databaseOptions (MongoDB)', async () => {
await expectAsync(reconfigureServer({
databaseURI: 'mongodb://localhost:27017/parse',
filesAdapter: null,
databaseAdapter: null,
databaseOptions: {
appName: 'MyParseApp',
// Cannot be tested as it requires authentication setup
// authMechanism: 'SCRAM-SHA-256',
// authMechanismProperties: { SERVICE_NAME: 'mongodb' },
authSource: 'admin',
autoSelectFamily: true,
autoSelectFamilyAttemptTimeout: 3000,
compressors: ['zlib'],
connectTimeoutMS: 5000,
directConnection: false,
disableIndexFieldValidation: true,
forceServerObjectId: false,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
maxConnecting: 2,
maxIdleTimeMS: 60000,
maxPoolSize: 10,
maxStalenessSeconds: 90,
maxTimeMS: 1000,
minPoolSize: 5,
// Cannot be tested as it requires a proxy setup
// proxyHost: 'proxy.example.com',
// proxyPassword: 'proxypass',
// proxyPort: 1080,
// proxyUsername: 'proxyuser',
readConcernLevel: 'majority',
readPreference: 'secondaryPreferred',
readPreferenceTags: [{ dc: 'east' }],
// Cannot be tested as it requires a replica set setup
// replicaSet: 'myReplicaSet',
retryReads: true,
retryWrites: true,
serverMonitoringMode: 'auto',
serverSelectionTimeoutMS: 5000,
socketTimeoutMS: 5000,
// Cannot be tested as it requires a replica cluster setup
// srvMaxHosts: 0,
// srvServiceName: 'mongodb',
ssl: false,
tls: false,
tlsAllowInvalidCertificates: false,
tlsAllowInvalidHostnames: false,
tlsCAFile: __dirname + '/support/cert/cert.pem',
tlsCertificateKeyFile: __dirname + '/support/cert/cert.pem',
tlsCertificateKeyFilePassword: 'password',
waitQueueTimeoutMS: 5000,
zlibCompressionLevel: 6,
},
})).toBeResolved();
await expectAsync(reconfigureServer({
databaseURI: 'mongodb://localhost:27017/parse',
filesAdapter: null,
databaseAdapter: null,
databaseOptions: {
// The following option needs to be tested separately due to driver config rules
tlsInsecure: false,
},
})).toBeResolved();
expect(loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '')).not.toMatch(invalidKeyErrorMessage);
});
});