Postgres: Operations, Hooks, OAuth login, Files support (#2528)
* Adds files related tests through fs-adapter with PG * Schema deletions implementations * Adds Hooks spec * Fix test * Adds support for containsAll (numbers and strings) * Better support for deleteFields and deleteClass * Recursive JSON update for authData * Adds node_modules to travis cache * Disable temporarily to make tests pass * Adds _perishable_token support for _User class * ignore when a table creation fails at init (table exists) * Adds support for AddUnique and Remove * PG 9.4 compatible functions * Re-enable tests * nit * Better handling of schema creation race
This commit is contained in:
@@ -212,7 +212,7 @@ describe('miscellaneous', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it('ensure that if you try to sign up a user with a unique username and email, but duplicates in some other field that has a uniqueness constraint, you get a regular duplicate value error', done => {
|
||||
it_exclude_dbs(['postgres'])('ensure that if you try to sign up a user with a unique username and email, but duplicates in some other field that has a uniqueness constraint, you get a regular duplicate value error', done => {
|
||||
let config = new Config('test');
|
||||
config.database.adapter.addFieldIfNotExists('_User', 'randomField', { type: 'String' })
|
||||
.then(() => config.database.adapter.ensureUniqueness('_User', userSchema, ['randomField']))
|
||||
@@ -233,6 +233,7 @@ describe('miscellaneous', function() {
|
||||
return user.signUp()
|
||||
})
|
||||
.catch(error => {
|
||||
console.error(error);
|
||||
expect(error.code).toEqual(Parse.Error.DUPLICATE_VALUE);
|
||||
done();
|
||||
});
|
||||
@@ -816,7 +817,7 @@ describe('miscellaneous', function() {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('should return the updated fields on PUT', done => {
|
||||
it('should return the updated fields on PUT', done => {
|
||||
let obj = new Parse.Object('GameScore');
|
||||
obj.save({a:'hello', c: 1, d: ['1'], e:['1'], f:['1','2']}).then(( ) => {
|
||||
var headers = {
|
||||
|
||||
@@ -11,8 +11,8 @@ for (var i = 0; i < str.length; i++) {
|
||||
data.push(str.charCodeAt(i));
|
||||
}
|
||||
|
||||
describe_only_db('mongo')('Parse.File testing', () => {
|
||||
describe_only_db('mongo')('creating files', () => {
|
||||
describe('Parse.File testing', () => {
|
||||
describe('creating files', () => {
|
||||
it('works with Content-Type', done => {
|
||||
var headers = {
|
||||
'Content-Type': 'application/octet-stream',
|
||||
@@ -88,7 +88,7 @@ describe_only_db('mongo')('Parse.File testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('supports REST end-to-end file create, read, delete, read', done => {
|
||||
it('supports REST end-to-end file create, read, delete, read', done => {
|
||||
var headers = {
|
||||
'Content-Type': 'image/jpeg',
|
||||
'X-Parse-Application-Id': 'test',
|
||||
@@ -204,7 +204,7 @@ describe_only_db('mongo')('Parse.File testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("save file", done => {
|
||||
it("save file", done => {
|
||||
var file = new Parse.File("hello.txt", data, "text/plain");
|
||||
ok(!file.url());
|
||||
file.save(expectSuccess({
|
||||
@@ -273,7 +273,7 @@ describe_only_db('mongo')('Parse.File testing', () => {
|
||||
}, done));
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("autosave file in object", done => {
|
||||
it("autosave file in object", done => {
|
||||
var file = new Parse.File("hello.txt", data, "text/plain");
|
||||
ok(!file.url());
|
||||
var object = new Parse.Object("TestObject");
|
||||
@@ -506,7 +506,7 @@ describe_only_db('mongo')('Parse.File testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('creates correct url for old files hosted on files.parsetfss.com', done => {
|
||||
it('creates correct url for old files hosted on files.parsetfss.com', done => {
|
||||
var file = {
|
||||
__type: 'File',
|
||||
url: 'http://irrelevant.elephant/',
|
||||
@@ -529,7 +529,7 @@ describe_only_db('mongo')('Parse.File testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('creates correct url for old files hosted on files.parse.com', done => {
|
||||
it('creates correct url for old files hosted on files.parse.com', done => {
|
||||
var file = {
|
||||
__type: 'File',
|
||||
url: 'http://irrelevant.elephant/',
|
||||
|
||||
@@ -15,7 +15,7 @@ app.use(bodyParser.json({ 'type': '*/*' }))
|
||||
app.listen(12345);
|
||||
|
||||
describe('Hooks', () => {
|
||||
it_exclude_dbs(['postgres'])("should have no hooks registered", (done) => {
|
||||
it("should have no hooks registered", (done) => {
|
||||
Parse.Hooks.getFunctions().then((res) => {
|
||||
expect(res.constructor).toBe(Array.prototype.constructor);
|
||||
done();
|
||||
@@ -25,7 +25,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should have no triggers registered", (done) => {
|
||||
it("should have no triggers registered", (done) => {
|
||||
Parse.Hooks.getTriggers().then( (res) => {
|
||||
expect(res.constructor).toBe(Array.prototype.constructor);
|
||||
done();
|
||||
@@ -35,7 +35,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should CRUD a function registration", (done) => {
|
||||
it("should CRUD a function registration", (done) => {
|
||||
// Create
|
||||
Parse.Hooks.createFunction("My-Test-Function", "http://someurl")
|
||||
.then(response => {
|
||||
@@ -76,7 +76,7 @@ describe('Hooks', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should CRUD a trigger registration", (done) => {
|
||||
it("should CRUD a trigger registration", (done) => {
|
||||
// Create
|
||||
Parse.Hooks.createTrigger("MyClass","beforeDelete", "http://someurl").then((res) => {
|
||||
expect(res.className).toBe("MyClass");
|
||||
@@ -142,7 +142,7 @@ describe('Hooks', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should fail trying to create two times the same function", (done) => {
|
||||
it("should fail trying to create two times the same function", (done) => {
|
||||
Parse.Hooks.createFunction("my_new_function", "http://url.com").then( () => {
|
||||
return Parse.Hooks.createFunction("my_new_function", "http://url.com")
|
||||
}, () => {
|
||||
@@ -165,7 +165,7 @@ describe('Hooks', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should fail trying to create two times the same trigger", (done) => {
|
||||
it("should fail trying to create two times the same trigger", (done) => {
|
||||
Parse.Hooks.createTrigger("MyClass", "beforeSave", "http://url.com").then( () => {
|
||||
return Parse.Hooks.createTrigger("MyClass", "beforeSave", "http://url.com")
|
||||
}, () => {
|
||||
@@ -188,7 +188,7 @@ describe('Hooks', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should fail trying to update a function that don't exist", (done) => {
|
||||
it("should fail trying to update a function that don't exist", (done) => {
|
||||
Parse.Hooks.updateFunction("A_COOL_FUNCTION", "http://url.com").then( () => {
|
||||
fail("Should not succeed")
|
||||
}, (err) => {
|
||||
@@ -213,7 +213,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should fail trying to update a trigger that don't exist", (done) => {
|
||||
it("should fail trying to update a trigger that don't exist", (done) => {
|
||||
Parse.Hooks.updateTrigger("AClassName","beforeSave", "http://url.com").then( () => {
|
||||
fail("Should not succeed")
|
||||
}, (err) => {
|
||||
@@ -269,7 +269,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
|
||||
|
||||
it_exclude_dbs(['postgres'])("should create hooks and properly preload them", (done) => {
|
||||
it("should create hooks and properly preload them", (done) => {
|
||||
|
||||
var promises = [];
|
||||
for (var i = 0; i<5; i++) {
|
||||
@@ -304,7 +304,7 @@ describe('Hooks', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should run the function on the test server", (done) => {
|
||||
it("should run the function on the test server", (done) => {
|
||||
|
||||
app.post("/SomeFunction", function(req, res) {
|
||||
res.json({success:"OK!"});
|
||||
@@ -326,7 +326,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should run the function on the test server", (done) => {
|
||||
it("should run the function on the test server", (done) => {
|
||||
|
||||
app.post("/SomeFunctionError", function(req, res) {
|
||||
res.json({error: {code: 1337, error: "hacking that one!"}});
|
||||
@@ -353,7 +353,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should provide X-Parse-Webhook-Key when defined", (done) => {
|
||||
it("should provide X-Parse-Webhook-Key when defined", (done) => {
|
||||
app.post("/ExpectingKey", function(req, res) {
|
||||
if (req.get('X-Parse-Webhook-Key') === 'hook') {
|
||||
res.json({success: "correct key provided"});
|
||||
@@ -378,7 +378,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should not pass X-Parse-Webhook-Key if not provided", (done) => {
|
||||
it("should not pass X-Parse-Webhook-Key if not provided", (done) => {
|
||||
reconfigureServer({ webhookKey: undefined })
|
||||
.then(() => {
|
||||
app.post("/ExpectingKeyAlso", function(req, res) {
|
||||
@@ -411,7 +411,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
|
||||
|
||||
it_exclude_dbs(['postgres'])("should run the beforeSave hook on the test server", (done) => {
|
||||
it("should run the beforeSave hook on the test server", (done) => {
|
||||
var triggerCount = 0;
|
||||
app.post("/BeforeSaveSome", function(req, res) {
|
||||
triggerCount++;
|
||||
@@ -438,7 +438,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("beforeSave hooks should correctly handle responses containing entire object", (done) => {
|
||||
it("beforeSave hooks should correctly handle responses containing entire object", (done) => {
|
||||
app.post("/BeforeSaveSome2", function(req, res) {
|
||||
var object = Parse.Object.fromJSON(req.body.object);
|
||||
object.set('hello', "world");
|
||||
@@ -458,7 +458,7 @@ describe('Hooks', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should run the afterSave hook on the test server", (done) => {
|
||||
it("should run the afterSave hook on the test server", (done) => {
|
||||
var triggerCount = 0;
|
||||
var newObjectId;
|
||||
app.post("/AfterSaveSome", function(req, res) {
|
||||
|
||||
@@ -591,14 +591,19 @@ describe('Parse.Object testing', () => {
|
||||
var objectId = x1.id;
|
||||
var x2 = new Parse.Object('X', {objectId: objectId});
|
||||
x2.addUnique('stuff', 2);
|
||||
x2.addUnique('stuff', 3);
|
||||
expect(x2.get('stuff')).toEqual([2, 3]);
|
||||
x2.addUnique('stuff', 4);
|
||||
expect(x2.get('stuff')).toEqual([2, 4]);
|
||||
return x2.save();
|
||||
}).then(() => {
|
||||
var query = new Parse.Query('X');
|
||||
return query.get(x1.id);
|
||||
}).then((x3) => {
|
||||
expect(x3.get('stuff')).toEqual([1, 2, 3]);
|
||||
let stuff = x3.get('stuff');
|
||||
let expected = [1, 2, 4];
|
||||
expect(stuff.length).toBe(expected.length);
|
||||
for (var i of stuff) {
|
||||
expect(expected.indexOf(i) >= 0).toBe(true);
|
||||
}
|
||||
done();
|
||||
}, (error) => {
|
||||
on_db('mongo', () => {
|
||||
@@ -625,15 +630,21 @@ describe('Parse.Object testing', () => {
|
||||
var query = new Parse.Query('X');
|
||||
return query.get(x1.id);
|
||||
}).then((x3) => {
|
||||
expect(x3.get('stuff')).toEqual([1, {'hello': 'world'}, {'foo': 'bar'}, {'bar': 'baz'}]);
|
||||
let stuff = x3.get('stuff');
|
||||
let target = [1, {'hello': 'world'}, {'foo': 'bar'}, {'bar': 'baz'}];
|
||||
expect(stuff.length).toEqual(target.length);
|
||||
let found = 0;
|
||||
for (let thing in target) {
|
||||
for (let st in stuff) {
|
||||
if (st == thing) {
|
||||
found++;
|
||||
}
|
||||
}
|
||||
}
|
||||
expect(found).toBe(target.length);
|
||||
done();
|
||||
}, (error) => {
|
||||
on_db('mongo', () => {
|
||||
jfail(error);
|
||||
});
|
||||
on_db('postgres', () => {
|
||||
expect(error.message).toEqual("Postgres does not support AddUnique operator.");
|
||||
});
|
||||
jfail(error);
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -654,6 +665,7 @@ describe('Parse.Object testing', () => {
|
||||
expect(x3.get('stuff')).toEqual([1, {'foo': 'bar'}]);
|
||||
done();
|
||||
}, (error) => {
|
||||
console.error(error);
|
||||
on_db('mongo', () => {
|
||||
jfail(error);
|
||||
});
|
||||
|
||||
@@ -185,7 +185,7 @@ describe('Parse.Query testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("containsAll number array queries", function(done) {
|
||||
it("containsAll number array queries", function(done) {
|
||||
var NumberSet = Parse.Object.extend({ className: "NumberSet" });
|
||||
|
||||
var objectsList = [];
|
||||
@@ -211,7 +211,7 @@ describe('Parse.Query testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("containsAll string array queries", function(done) {
|
||||
it("containsAll string array queries", function(done) {
|
||||
var StringSet = Parse.Object.extend({ className: "StringSet" });
|
||||
|
||||
var objectsList = [];
|
||||
@@ -872,7 +872,7 @@ describe('Parse.Query testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("order by descending number and string", function(done) {
|
||||
it_exclude_dbs(['postgres'])("order by descending number and string", function(done) {
|
||||
var strings = ["a", "b", "c", "d"];
|
||||
var makeBoxedNumber = function(num, i) {
|
||||
return new BoxedNumber({ number: num, string: strings[i] });
|
||||
|
||||
@@ -331,6 +331,9 @@ describe('Parse.Relation testing', () => {
|
||||
done();
|
||||
});
|
||||
});
|
||||
}).catch(err => {
|
||||
jfail(err);
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ describe('Parse Role testing', () => {
|
||||
return role.save({}, { useMasterKey: true });
|
||||
};
|
||||
|
||||
it("should not recursively load the same role multiple times", (done) => {
|
||||
it_exclude_dbs(['postgres'])("should not recursively load the same role multiple times", (done) => {
|
||||
var rootRole = "RootRole";
|
||||
var roleNames = ["FooRole", "BarRole", "BazRole"];
|
||||
var allRoles = [rootRole].concat(roleNames);
|
||||
|
||||
@@ -137,7 +137,7 @@ describe('Parse.User testing', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("user login with files", (done) => {
|
||||
it("user login with files", (done) => {
|
||||
let file = new Parse.File("yolo.txt", [1,2,3], "text/plain");
|
||||
file.save().then((file) => {
|
||||
return Parse.User.signUp("asdf", "zxcv", { "file" : file });
|
||||
@@ -1118,7 +1118,7 @@ describe('Parse.User testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('log in with provider with files', done => {
|
||||
it('log in with provider with files', done => {
|
||||
let provider = getMockFacebookProvider();
|
||||
Parse.User._registerAuthenticationProvider(provider);
|
||||
let file = new Parse.File("yolo.txt", [1, 2, 3], "text/plain");
|
||||
@@ -1468,7 +1468,7 @@ describe('Parse.User testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("link multiple providers", (done) => {
|
||||
it("link multiple providers", (done) => {
|
||||
var provider = getMockFacebookProvider();
|
||||
var mockProvider = getMockMyOauthProvider();
|
||||
Parse.User._registerAuthenticationProvider(provider);
|
||||
@@ -1504,7 +1504,7 @@ describe('Parse.User testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("link multiple providers and updates token", (done) => {
|
||||
it("link multiple providers and updates token", (done) => {
|
||||
var provider = getMockFacebookProvider();
|
||||
var secondProvider = getMockFacebookProviderWithIdToken('8675309', 'jenny_valid_token');
|
||||
|
||||
@@ -1545,7 +1545,7 @@ describe('Parse.User testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("link multiple providers and update token", (done) => {
|
||||
it("link multiple providers and update token", (done) => {
|
||||
var provider = getMockFacebookProvider();
|
||||
var mockProvider = getMockMyOauthProvider();
|
||||
Parse.User._registerAuthenticationProvider(provider);
|
||||
@@ -1820,7 +1820,7 @@ describe('Parse.User testing', () => {
|
||||
});
|
||||
});
|
||||
|
||||
xit("querying for users doesn't get session tokens", (done) => {
|
||||
it("querying for users doesn't get session tokens", (done) => {
|
||||
Parse.Promise.as().then(function() {
|
||||
return Parse.User.signUp("finn", "human", { foo: "bar" });
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ describe("test validate_receipt endpoint", () => {
|
||||
});
|
||||
})
|
||||
|
||||
it_exclude_dbs(['postgres'])("should bypass appstore validation", (done) => {
|
||||
it("should bypass appstore validation", (done) => {
|
||||
|
||||
request.post({
|
||||
headers: {
|
||||
@@ -170,7 +170,7 @@ describe("test validate_receipt endpoint", () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should be able to update a _Product", (done) => {
|
||||
it("should be able to update a _Product", (done) => {
|
||||
var query = new Parse.Query("_Product");
|
||||
query.first().then(function(product) {
|
||||
if (!product) {
|
||||
@@ -188,7 +188,7 @@ describe("test validate_receipt endpoint", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])("should not be able to remove a require key in a _Product", (done) => {
|
||||
it("should not be able to remove a require key in a _Product", (done) => {
|
||||
var query = new Parse.Query("_Product");
|
||||
query.first().then(function(product){
|
||||
if (!product) {
|
||||
|
||||
@@ -211,7 +211,7 @@ describe('SchemaController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('will resolve class creation races appropriately', done => {
|
||||
it('will resolve class creation races appropriately', done => {
|
||||
// If two callers race to create the same schema, the response to the
|
||||
// race loser should be the same as if they hadn't been racing.
|
||||
config.database.loadSchema()
|
||||
@@ -617,7 +617,7 @@ describe('SchemaController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('refuses to delete fields that dont exist', done => {
|
||||
it('refuses to delete fields that dont exist', done => {
|
||||
hasAllPODobject().save()
|
||||
.then(() => config.database.loadSchema())
|
||||
.then(schema => schema.deleteField('missingField', 'HasAllPOD'))
|
||||
@@ -628,7 +628,7 @@ describe('SchemaController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('drops related collection when deleting relation field', done => {
|
||||
it('drops related collection when deleting relation field', done => {
|
||||
var obj1 = hasAllPODobject();
|
||||
obj1.save()
|
||||
.then(savedObj1 => {
|
||||
@@ -659,7 +659,7 @@ describe('SchemaController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('can delete relation field when related _Join collection not exist', done => {
|
||||
it('can delete relation field when related _Join collection not exist', done => {
|
||||
config.database.loadSchema()
|
||||
.then(schema => {
|
||||
schema.addClassIfNotExists('NewClass', {
|
||||
@@ -688,7 +688,13 @@ describe('SchemaController', () => {
|
||||
})
|
||||
.then(() => config.database.collectionExists('_Join:relationField:NewClass'))
|
||||
.then(exist => {
|
||||
expect(exist).toEqual(false);
|
||||
on_db('postgres', () => {
|
||||
// We create the table when creating the column
|
||||
expect(exist).toEqual(true);
|
||||
}, () => {
|
||||
expect(exist).toEqual(false);
|
||||
});
|
||||
|
||||
})
|
||||
.then(() => schema.deleteField('relationField', 'NewClass', config.database))
|
||||
.then(() => schema.reloadData())
|
||||
@@ -705,7 +711,7 @@ describe('SchemaController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('can delete string fields and resave as number field', done => {
|
||||
it('can delete string fields and resave as number field', done => {
|
||||
Parse.Object.disableSingleInstance();
|
||||
var obj1 = hasAllPODobject();
|
||||
var obj2 = hasAllPODobject();
|
||||
@@ -733,7 +739,7 @@ describe('SchemaController', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('can delete pointer fields and resave as string', done => {
|
||||
it('can delete pointer fields and resave as string', done => {
|
||||
Parse.Object.disableSingleInstance();
|
||||
var obj1 = new Parse.Object('NewClass');
|
||||
obj1.save()
|
||||
|
||||
@@ -187,7 +187,7 @@ describe("Custom Pages, Email Verification, Password Reset", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('does send with a simple adapter', done => {
|
||||
it('does send with a simple adapter', done => {
|
||||
var calls = 0;
|
||||
var emailAdapter = {
|
||||
sendMail: function(options){
|
||||
@@ -675,7 +675,7 @@ describe("Custom Pages, Email Verification, Password Reset", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('should send a password reset link', done => {
|
||||
it('should send a password reset link', done => {
|
||||
var user = new Parse.User();
|
||||
var emailAdapter = {
|
||||
sendVerificationEmail: () => Promise.resolve(),
|
||||
@@ -740,7 +740,7 @@ describe("Custom Pages, Email Verification, Password Reset", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('should programatically reset password', done => {
|
||||
it('should programatically reset password', done => {
|
||||
var user = new Parse.User();
|
||||
var emailAdapter = {
|
||||
sendVerificationEmail: () => Promise.resolve(),
|
||||
|
||||
@@ -3,6 +3,17 @@
|
||||
|
||||
jasmine.DEFAULT_TIMEOUT_INTERVAL = process.env.PARSE_SERVER_TEST_TIMEOUT || 5000;
|
||||
|
||||
global.on_db = (db, callback, elseCallback) => {
|
||||
if (process.env.PARSE_SERVER_TEST_DB == db) {
|
||||
return callback();
|
||||
} else if (!process.env.PARSE_SERVER_TEST_DB && db == 'mongo') {
|
||||
return callback();
|
||||
}
|
||||
if (elseCallback) {
|
||||
elseCallback();
|
||||
}
|
||||
}
|
||||
|
||||
var cache = require('../src/cache').default;
|
||||
var express = require('express');
|
||||
var facebook = require('../src/authDataManager/facebook');
|
||||
@@ -11,6 +22,7 @@ var path = require('path');
|
||||
var TestUtils = require('../src/TestUtils');
|
||||
var MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAdapter');
|
||||
const GridStoreAdapter = require('../src/Adapters/Files/GridStoreAdapter').GridStoreAdapter;
|
||||
const FSAdapter = require('parse-server-fs-adapter');
|
||||
const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter');
|
||||
|
||||
const mongoURI = 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase';
|
||||
@@ -40,7 +52,14 @@ if (process.env.PARSE_SERVER_TEST_DB === 'postgres') {
|
||||
|
||||
var port = 8378;
|
||||
|
||||
let gridStoreAdapter = new GridStoreAdapter(mongoURI);
|
||||
let filesAdapter;
|
||||
|
||||
on_db('mongo', () => {
|
||||
filesAdapter = new GridStoreAdapter(mongoURI);
|
||||
}, () => {
|
||||
filesAdapter = new FSAdapter();
|
||||
});
|
||||
|
||||
let logLevel;
|
||||
let silent = true;
|
||||
if (process.env.VERBOSE) {
|
||||
@@ -53,7 +72,7 @@ if (process.env.PARSE_SERVER_LOG_LEVEL) {
|
||||
}
|
||||
// Default server configuration for tests.
|
||||
var defaultConfiguration = {
|
||||
filesAdapter: gridStoreAdapter,
|
||||
filesAdapter,
|
||||
serverURL: 'http://localhost:' + port + '/1',
|
||||
databaseAdapter,
|
||||
appId: 'test',
|
||||
@@ -383,16 +402,6 @@ global.describe_only_db = db => {
|
||||
}
|
||||
}
|
||||
|
||||
global.on_db = (db, callback, elseCallback) => {
|
||||
if (process.env.PARSE_SERVER_TEST_DB == db) {
|
||||
return callback();
|
||||
} else if (!process.env.PARSE_SERVER_TEST_DB && db == 'mongo') {
|
||||
return callback();
|
||||
}
|
||||
if (elseCallback) {
|
||||
elseCallback();
|
||||
}
|
||||
}
|
||||
|
||||
var libraryCache = {};
|
||||
jasmine.mockLibrary = function(library, name, mock) {
|
||||
|
||||
@@ -170,7 +170,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('responds with a list of schemas after creating objects', done => {
|
||||
it('responds with a list of schemas after creating objects', done => {
|
||||
var obj1 = hasAllPODobject();
|
||||
obj1.save().then(savedObj1 => {
|
||||
var obj2 = new Parse.Object('HasPointersAndRelations');
|
||||
@@ -193,7 +193,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('responds with a single schema', done => {
|
||||
it('responds with a single schema', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save().then(() => {
|
||||
request.get({
|
||||
@@ -207,7 +207,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('treats class names case sensitively', done => {
|
||||
it('treats class names case sensitively', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save().then(() => {
|
||||
request.get({
|
||||
@@ -462,7 +462,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('refuses to put to existing fields, even if it would not be a change', done => {
|
||||
it('refuses to put to existing fields, even if it would not be a change', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save()
|
||||
.then(() => {
|
||||
@@ -484,7 +484,7 @@ describe('schemas', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('refuses to delete non-existent fields', done => {
|
||||
it('refuses to delete non-existent fields', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save()
|
||||
.then(() => {
|
||||
@@ -506,7 +506,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('refuses to add a geopoint to a class that already has one', done => {
|
||||
it('refuses to add a geopoint to a class that already has one', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save()
|
||||
.then(() => {
|
||||
@@ -552,7 +552,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('allows you to delete and add a geopoint in the same request', done => {
|
||||
it('allows you to delete and add a geopoint in the same request', done => {
|
||||
var obj = new Parse.Object('NewClass');
|
||||
obj.set('geo1', new Parse.GeoPoint({latitude: 0, longitude: 0}));
|
||||
obj.save()
|
||||
@@ -584,7 +584,7 @@ describe('schemas', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('put with no modifications returns all fields', done => {
|
||||
it('put with no modifications returns all fields', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save()
|
||||
.then(() => {
|
||||
@@ -757,7 +757,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('will not delete any fields if the additions are invalid', done => {
|
||||
it('will not delete any fields if the additions are invalid', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save()
|
||||
.then(() => {
|
||||
@@ -798,7 +798,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('refuses to delete non-empty collection', done => {
|
||||
it('refuses to delete non-empty collection', done => {
|
||||
var obj = hasAllPODobject();
|
||||
obj.save()
|
||||
.then(() => {
|
||||
@@ -829,7 +829,7 @@ describe('schemas', () => {
|
||||
})
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('does not fail when deleting nonexistant collections', done => {
|
||||
it('does not fail when deleting nonexistant collections', done => {
|
||||
request.del({
|
||||
url: 'http://localhost:8378/1/schemas/Missing',
|
||||
headers: masterKeyHeaders,
|
||||
@@ -841,7 +841,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('deletes collections including join tables', done => {
|
||||
it('deletes collections including join tables', done => {
|
||||
var obj = new Parse.Object('MyClass');
|
||||
obj.set('data', 'data');
|
||||
obj.save()
|
||||
@@ -892,7 +892,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('deletes schema when actual collection does not exist', done => {
|
||||
it('deletes schema when actual collection does not exist', done => {
|
||||
request.post({
|
||||
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
|
||||
headers: masterKeyHeaders,
|
||||
@@ -920,7 +920,7 @@ describe('schemas', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it_exclude_dbs(['postgres'])('deletes schema when actual collection exists', done => {
|
||||
it('deletes schema when actual collection exists', done => {
|
||||
request.post({
|
||||
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
|
||||
headers: masterKeyHeaders,
|
||||
@@ -1582,7 +1582,7 @@ describe('schemas', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it_exclude_dbs(['postgres'])('gives correct response when deleting a schema with CLPs (regression test #1919)', done => {
|
||||
it('gives correct response when deleting a schema with CLPs (regression test #1919)', done => {
|
||||
new Parse.Object('MyClass').save({ data: 'foo'})
|
||||
.then(obj => obj.destroy())
|
||||
.then(() => setPermissionsOnClass('MyClass', { find: {}, get: {} }, true))
|
||||
|
||||
Reference in New Issue
Block a user