Fix delete schema when actual collection does not exist
This commit is contained in:
@@ -744,4 +744,75 @@ describe('schemas', () => {
|
|||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('deletes schema when actual collection does not exist', done => {
|
||||||
|
request.post({
|
||||||
|
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
|
||||||
|
headers: masterKeyHeaders,
|
||||||
|
json: true,
|
||||||
|
body: {
|
||||||
|
className: 'NewClassForDelete'
|
||||||
|
}
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(error).toEqual(null);
|
||||||
|
expect(response.body.className).toEqual('NewClassForDelete');
|
||||||
|
request.del({
|
||||||
|
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
|
||||||
|
headers: masterKeyHeaders,
|
||||||
|
json: true,
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(response.statusCode).toEqual(200);
|
||||||
|
expect(response.body).toEqual({});
|
||||||
|
config.database.loadSchema().then(schema => {
|
||||||
|
schema.hasClass('NewClassForDelete').then(exist => {
|
||||||
|
expect(exist).toEqual(false);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('deletes schema when actual collection exists', done => {
|
||||||
|
request.post({
|
||||||
|
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
|
||||||
|
headers: masterKeyHeaders,
|
||||||
|
json: true,
|
||||||
|
body: {
|
||||||
|
className: 'NewClassForDelete'
|
||||||
|
}
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(error).toEqual(null);
|
||||||
|
expect(response.body.className).toEqual('NewClassForDelete');
|
||||||
|
request.post({
|
||||||
|
url: 'http://localhost:8378/1/classes/NewClassForDelete',
|
||||||
|
headers: restKeyHeaders,
|
||||||
|
json: true
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(error).toEqual(null);
|
||||||
|
expect(typeof response.body.objectId).toEqual('string');
|
||||||
|
request.del({
|
||||||
|
url: 'http://localhost:8378/1/classes/NewClassForDelete/' + response.body.objectId,
|
||||||
|
headers: restKeyHeaders,
|
||||||
|
json: true,
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(error).toEqual(null);
|
||||||
|
request.del({
|
||||||
|
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
|
||||||
|
headers: masterKeyHeaders,
|
||||||
|
json: true,
|
||||||
|
}, (error, response, body) => {
|
||||||
|
expect(response.statusCode).toEqual(200);
|
||||||
|
expect(response.body).toEqual({});
|
||||||
|
config.database.loadSchema().then(schema => {
|
||||||
|
schema.hasClass('NewClassForDelete').then(exist => {
|
||||||
|
expect(exist).toEqual(false);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -151,14 +151,20 @@ function deleteSchema(req) {
|
|||||||
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, Schema.invalidClassNameMessage(req.params.className));
|
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, Schema.invalidClassNameMessage(req.params.className));
|
||||||
}
|
}
|
||||||
|
|
||||||
return req.config.database.adaptiveCollection(req.params.className)
|
return req.config.database.collectionExists(req.params.className)
|
||||||
.then(collection => {
|
.then(exist => {
|
||||||
return collection.count()
|
if (!exist) {
|
||||||
.then(count => {
|
return Promise.resolve();
|
||||||
if (count > 0) {
|
}
|
||||||
throw new Parse.Error(255, `Class ${req.params.className} is not empty, contains ${count} objects, cannot drop schema.`);
|
return req.config.database.adaptiveCollection(req.params.className)
|
||||||
}
|
.then(collection => {
|
||||||
return collection.drop();
|
return collection.count()
|
||||||
|
.then(count => {
|
||||||
|
if (count > 0) {
|
||||||
|
throw new Parse.Error(255, `Class ${req.params.className} is not empty, contains ${count} objects, cannot drop schema.`);
|
||||||
|
}
|
||||||
|
return collection.drop();
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user