Skip to content

Commit b301ea9

Browse files
committed
Merge pull request #802 from Marco129/fix-delete-schemas
Fix delete schema when actual collection does not exist
2 parents a44e371 + f157538 commit b301ea9

File tree

2 files changed

+85
-8
lines changed

2 files changed

+85
-8
lines changed

spec/schemas.spec.js

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,4 +744,75 @@ describe('schemas', () => {
744744
done();
745745
});
746746
});
747+
748+
it('deletes schema when actual collection does not exist', done => {
749+
request.post({
750+
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
751+
headers: masterKeyHeaders,
752+
json: true,
753+
body: {
754+
className: 'NewClassForDelete'
755+
}
756+
}, (error, response, body) => {
757+
expect(error).toEqual(null);
758+
expect(response.body.className).toEqual('NewClassForDelete');
759+
request.del({
760+
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
761+
headers: masterKeyHeaders,
762+
json: true,
763+
}, (error, response, body) => {
764+
expect(response.statusCode).toEqual(200);
765+
expect(response.body).toEqual({});
766+
config.database.loadSchema().then(schema => {
767+
schema.hasClass('NewClassForDelete').then(exist => {
768+
expect(exist).toEqual(false);
769+
done();
770+
});
771+
})
772+
});
773+
});
774+
});
775+
776+
it('deletes schema when actual collection exists', done => {
777+
request.post({
778+
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
779+
headers: masterKeyHeaders,
780+
json: true,
781+
body: {
782+
className: 'NewClassForDelete'
783+
}
784+
}, (error, response, body) => {
785+
expect(error).toEqual(null);
786+
expect(response.body.className).toEqual('NewClassForDelete');
787+
request.post({
788+
url: 'http://localhost:8378/1/classes/NewClassForDelete',
789+
headers: restKeyHeaders,
790+
json: true
791+
}, (error, response, body) => {
792+
expect(error).toEqual(null);
793+
expect(typeof response.body.objectId).toEqual('string');
794+
request.del({
795+
url: 'http://localhost:8378/1/classes/NewClassForDelete/' + response.body.objectId,
796+
headers: restKeyHeaders,
797+
json: true,
798+
}, (error, response, body) => {
799+
expect(error).toEqual(null);
800+
request.del({
801+
url: 'http://localhost:8378/1/schemas/NewClassForDelete',
802+
headers: masterKeyHeaders,
803+
json: true,
804+
}, (error, response, body) => {
805+
expect(response.statusCode).toEqual(200);
806+
expect(response.body).toEqual({});
807+
config.database.loadSchema().then(schema => {
808+
schema.hasClass('NewClassForDelete').then(exist => {
809+
expect(exist).toEqual(false);
810+
done();
811+
});
812+
});
813+
});
814+
});
815+
});
816+
});
817+
});
747818
});

src/Routers/SchemasRouter.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,20 @@ function deleteSchema(req) {
151151
throw new Parse.Error(Parse.Error.INVALID_CLASS_NAME, Schema.invalidClassNameMessage(req.params.className));
152152
}
153153

154-
return req.config.database.adaptiveCollection(req.params.className)
155-
.then(collection => {
156-
return collection.count()
157-
.then(count => {
158-
if (count > 0) {
159-
throw new Parse.Error(255, `Class ${req.params.className} is not empty, contains ${count} objects, cannot drop schema.`);
160-
}
161-
return collection.drop();
154+
return req.config.database.collectionExists(req.params.className)
155+
.then(exist => {
156+
if (!exist) {
157+
return Promise.resolve();
158+
}
159+
return req.config.database.adaptiveCollection(req.params.className)
160+
.then(collection => {
161+
return collection.count()
162+
.then(count => {
163+
if (count > 0) {
164+
throw new Parse.Error(255, `Class ${req.params.className} is not empty, contains ${count} objects, cannot drop schema.`);
165+
}
166+
return collection.drop();
167+
})
162168
})
163169
})
164170
.then(() => {

0 commit comments

Comments
 (0)