184 lines
7.5 KiB
JavaScript
184 lines
7.5 KiB
JavaScript
const { loadAdapter, loadModule } = require('../lib/Adapters/AdapterLoader');
|
|
const FilesAdapter = require('@parse/fs-files-adapter').default;
|
|
const MockFilesAdapter = require('mock-files-adapter');
|
|
const Config = require('../lib/Config');
|
|
|
|
describe('AdapterLoader', () => {
|
|
it('should instantiate an adapter from string in object', done => {
|
|
const adapterPath = require('path').resolve('./spec/support/MockAdapter');
|
|
|
|
const adapter = loadAdapter({
|
|
adapter: adapterPath,
|
|
options: {
|
|
key: 'value',
|
|
foo: 'bar',
|
|
},
|
|
});
|
|
|
|
expect(adapter instanceof Object).toBe(true);
|
|
expect(adapter.options.key).toBe('value');
|
|
expect(adapter.options.foo).toBe('bar');
|
|
done();
|
|
});
|
|
|
|
it('should instantiate an adapter from string', done => {
|
|
const adapterPath = require('path').resolve('./spec/support/MockAdapter');
|
|
const adapter = loadAdapter(adapterPath);
|
|
|
|
expect(adapter instanceof Object).toBe(true);
|
|
done();
|
|
});
|
|
|
|
it('should instantiate an adapter from string that is module', done => {
|
|
const adapterPath = require('path').resolve('./lib/Adapters/Files/FilesAdapter');
|
|
const adapter = loadAdapter({
|
|
adapter: adapterPath,
|
|
});
|
|
|
|
expect(typeof adapter).toBe('object');
|
|
expect(typeof adapter.createFile).toBe('function');
|
|
expect(typeof adapter.deleteFile).toBe('function');
|
|
expect(typeof adapter.getFileData).toBe('function');
|
|
expect(typeof adapter.getFileLocation).toBe('function');
|
|
done();
|
|
});
|
|
|
|
it('should instantiate an adapter from npm module', done => {
|
|
const adapter = loadAdapter({
|
|
module: '@parse/fs-files-adapter',
|
|
});
|
|
|
|
expect(typeof adapter).toBe('object');
|
|
expect(typeof adapter.createFile).toBe('function');
|
|
expect(typeof adapter.deleteFile).toBe('function');
|
|
expect(typeof adapter.getFileData).toBe('function');
|
|
expect(typeof adapter.getFileLocation).toBe('function');
|
|
done();
|
|
});
|
|
|
|
it('should instantiate an adapter from function/Class', done => {
|
|
const adapter = loadAdapter({
|
|
adapter: FilesAdapter,
|
|
});
|
|
expect(adapter instanceof FilesAdapter).toBe(true);
|
|
done();
|
|
});
|
|
|
|
it('should instantiate the default adapter from Class', done => {
|
|
const adapter = loadAdapter(null, FilesAdapter);
|
|
expect(adapter instanceof FilesAdapter).toBe(true);
|
|
done();
|
|
});
|
|
|
|
it('should use the default adapter', done => {
|
|
const defaultAdapter = new FilesAdapter();
|
|
const adapter = loadAdapter(null, defaultAdapter);
|
|
expect(adapter instanceof FilesAdapter).toBe(true);
|
|
done();
|
|
});
|
|
|
|
it('should use the provided adapter', done => {
|
|
const originalAdapter = new FilesAdapter();
|
|
const adapter = loadAdapter(originalAdapter);
|
|
expect(adapter).toBe(originalAdapter);
|
|
done();
|
|
});
|
|
|
|
it('should fail loading an improperly configured adapter', done => {
|
|
const Adapter = function (options) {
|
|
if (!options.foo) {
|
|
throw 'foo is required for that adapter';
|
|
}
|
|
};
|
|
const adapterOptions = {
|
|
param: 'key',
|
|
doSomething: function () {},
|
|
};
|
|
|
|
expect(() => {
|
|
const adapter = loadAdapter(adapterOptions, Adapter);
|
|
expect(adapter).toEqual(adapterOptions);
|
|
}).not.toThrow('foo is required for that adapter');
|
|
done();
|
|
});
|
|
|
|
it('should load push adapter from options', async () => {
|
|
const options = {
|
|
android: {
|
|
firebaseServiceAccount: {
|
|
"type": "service_account",
|
|
"project_id": "example-xxxx",
|
|
"private_key_id": "xxxx",
|
|
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCxFcVMD9L2xJWW\nEMi4w/XIBPvX5bTStIEdt4GY+yfrmCHspaVdgpTcHlTLA60sAGTFdorPprOwAm6f\njaTG4j86zfW25GF6AlFO/8vE2B0tjreuQQtcP9gkWJmsTp8yzXDirDQ43Kv93Kbc\nUPmsyAN5WB8XiFjjWLnFCeDiOVdd8sHfG0HYldNzyYwXrOTLE5kOjASYSJDzdrfI\nwN9PzZC7+cCy/DDzTRKQCqfz9pEZmxqJk4Id5HLVNkGKgji3C3b6o3MXWPS+1+zD\nGheKC9WLDZnCVycAnNHFiPpsp7R82lLKC3Dth37b6qzJO+HwfTmzCb0/xCVJ0/mZ\nC4Mxih/bAgMBAAECggEACbL1DvDw75Yd0U3TCJenDxEC0DTjHgVH6x5BaWUcLyGy\nffkmoQQFbjb1Evd9FSNiYZRYDv6E6feAIpoJ8+CxcOGV+zHwCtQ0qtyExx/FHVkr\nQ06JtkBC8N6vcAoQWyJ4c9nVtGWVv/5FX1zKCAYedpd2gH31zGHwLtQXLpzQZbNO\nO/0rcggg4unGSUIyw5437XiyckJ3QdneSEPe9HvY2wxLn/f1PjMpRYiNLBSuaFBJ\n+MYXr//Vh7cMInQk5/pMFbGxugNb7dtjgvm3LKRssKnubEOyrKldo8DVJmAvjhP4\nWboOOBVEo2ZhXgnBjeMvI8btXlJ85h9lZ7xwqfWsjQKBgQDkrrLpA3Mm21rsP1Ar\nMLEnYTdMZ7k+FTm5pJffPOsC7wiLWdRLwwrtb0V3kC3jr2K4SZY/OEV8IAWHfut/\n8mP8cPQPJiFp92iOgde4Xq/Ycwx4ZAXUj7mHHgywFi2K0xATzgc9sgX3NCVl9utR\nIU/FbEDCLxyD4T3Jb5gL3xFdhwKBgQDGPS46AiHuYmV7OG4gEOsNdczTppBJCgTt\nKGSJOxZg8sQodNJeWTPP2iQr4yJ4EY57NQmH7WSogLrGj8tmorEaL7I2kYlHJzGm\nniwApWEZlFc00xgXwV5d8ATfmAf8W1ZSZ6THbHesDUGjXSoL95k3KKXhnztjUT6I\n8d5qkCygDQKBgFN7p1rDZKVZzO6UCntJ8lJS/jIJZ6nPa9xmxv67KXxPsQnWSFdE\nI9gcF/sXCnmlTF/ElXIM4+j1c69MWULDRVciESb6n5YkuOnVYuAuyPk2vuWwdiRs\nN6mpAa7C2etlM+hW/XO7aswdIE4B/1QF2i5TX6zEMB/A+aJw98vVqmw/AoGADOm9\nUiADb9DPBXjGi6YueYD756mI6okRixU/f0TvDz+hEXWSonyzCE4QXx97hlC2dEYf\nKdCH5wYDpJ2HRVdBrBABTtaqF41xCYZyHVSof48PIyzA/AMnj3zsBFiV5JVaiSGh\nNTBWl0mBxg9yhrcJLvOh4pGJv81yAl+m+lAL6B0CgYEArtqtQ1YVLIUn4Pb/HDn8\nN8o7WbhloWQnG34iSsAG8yNtzbbxdugFrEm5ejPSgZ+dbzSzi/hizOFS/+/fwEdl\nay9jqY1fngoqSrS8eddUsY1/WAcmd6wPWEamsSjazA4uxQERruuFOi94E4b895KA\nqYe0A3xb0JL2ieAOZsn8XNA=\n-----END PRIVATE KEY-----\n",
|
|
"client_email": "test@example.com",
|
|
"client_id": "1",
|
|
"auth_uri": "https://example.com",
|
|
"token_uri": "https://example.com",
|
|
"auth_provider_x509_cert_url": "https://example.com",
|
|
"client_x509_cert_url": "https://example.com",
|
|
"universe_domain": "example.com"
|
|
}
|
|
},
|
|
};
|
|
const ParsePushAdapter = await loadModule('@parse/push-adapter');
|
|
expect(() => {
|
|
const adapter = loadAdapter(undefined, ParsePushAdapter, options);
|
|
expect(adapter.constructor).toBe(ParsePushAdapter);
|
|
expect(adapter).not.toBe(undefined);
|
|
}).not.toThrow();
|
|
});
|
|
|
|
it('should load custom push adapter from string (#3544)', done => {
|
|
const adapterPath = require('path').resolve('./spec/support/MockPushAdapter');
|
|
const options = {
|
|
ios: {
|
|
bundleId: 'bundle.id',
|
|
},
|
|
};
|
|
const pushAdapterOptions = {
|
|
adapter: adapterPath,
|
|
options,
|
|
};
|
|
expect(() => {
|
|
reconfigureServer({
|
|
push: pushAdapterOptions,
|
|
}).then(() => {
|
|
const config = Config.get(Parse.applicationId);
|
|
const pushAdapter = config.pushWorker.adapter;
|
|
expect(pushAdapter.getValidPushTypes()).toEqual(['ios']);
|
|
expect(pushAdapter.options).toEqual(pushAdapterOptions);
|
|
done();
|
|
});
|
|
}).not.toThrow();
|
|
});
|
|
|
|
it('should load custom database adapter from config', done => {
|
|
const adapterPath = require('path').resolve('./spec/support/MockDatabaseAdapter');
|
|
const options = {
|
|
databaseURI: 'oracledb://user:password@localhost:1521/freepdb1',
|
|
collectionPrefix: '',
|
|
};
|
|
const databaseAdapterOptions = {
|
|
adapter: adapterPath,
|
|
options,
|
|
};
|
|
expect(() => {
|
|
const databaseAdapter = loadAdapter(databaseAdapterOptions);
|
|
expect(databaseAdapter).not.toBe(undefined);
|
|
expect(databaseAdapter.options).toEqual(options);
|
|
expect(databaseAdapter.getDatabaseURI()).toEqual(options.databaseURI);
|
|
}).not.toThrow();
|
|
done();
|
|
});
|
|
|
|
it('should load file adapter from direct passing', done => {
|
|
spyOn(console, 'warn').and.callFake(() => {});
|
|
const mockFilesAdapter = new MockFilesAdapter('key', 'secret', 'bucket');
|
|
expect(() => {
|
|
const adapter = loadAdapter(mockFilesAdapter, FilesAdapter);
|
|
expect(adapter).toBe(mockFilesAdapter);
|
|
}).not.toThrow();
|
|
done();
|
|
});
|
|
});
|