@@ -4,6 +4,22 @@ var dd = require('deep-diff');
44
55var config = new Config ( 'test' ) ;
66
7+ var hasAllPODobject = ( ) => {
8+ var obj = new Parse . Object ( 'HasAllPOD' ) ;
9+ obj . set ( 'aNumber' , 5 ) ;
10+ obj . set ( 'aString' , 'string' ) ;
11+ obj . set ( 'aBool' , true ) ;
12+ obj . set ( 'aDate' , new Date ( ) ) ;
13+ obj . set ( 'aObject' , { k1 : 'value' , k2 : true , k3 : 5 } ) ;
14+ obj . set ( 'aArray' , [ 'contents' , true , 5 ] ) ;
15+ obj . set ( 'aGeoPoint' , new Parse . GeoPoint ( { latitude : 0 , longitude : 0 } ) ) ;
16+ obj . set ( 'aFile' , new Parse . File ( 'f.txt' , { base64 : 'V29ya2luZyBhdCBQYXJzZSBpcyBncmVhdCE=' } ) ) ;
17+ var objACL = new Parse . ACL ( ) ;
18+ objACL . setPublicWriteAccess ( false ) ;
19+ obj . setACL ( objACL ) ;
20+ return obj ;
21+ } ;
22+
723describe ( 'Schema' , ( ) => {
824 it ( 'can validate one object' , ( done ) => {
925 config . database . loadSchema ( ) . then ( ( schema ) => {
@@ -411,7 +427,6 @@ describe('Schema', () => {
411427 . then ( schema => {
412428 return schema . addClassIfNotExists ( 'NewClass' , { } )
413429 . then ( ( ) => {
414- console . log ( Object . getPrototypeOf ( schema ) ) ;
415430 schema . hasClass ( 'NewClass' )
416431 . then ( hasClass => {
417432 expect ( hasClass ) . toEqual ( true ) ;
@@ -461,4 +476,48 @@ describe('Schema', () => {
461476 done ( ) ;
462477 } ) ;
463478 } ) ;
479+
480+ it ( 'refuses to delete fields from nonexistant classes' , done => {
481+ config . database . loadSchema ( )
482+ . then ( schema => schema . deleteField ( 'field' , 'NoClass' ) )
483+ . catch ( error => {
484+ expect ( error . code ) . toEqual ( Parse . Error . INVALID_CLASS_NAME ) ;
485+ expect ( error . error ) . toEqual ( 'class NoClass does not exist' ) ;
486+ done ( ) ;
487+ } ) ;
488+ } ) ;
489+
490+ it ( 'refuses to delete fields that dont exist' , done => {
491+ hasAllPODobject ( ) . save ( )
492+ . then ( ( ) => config . database . loadSchema ( ) )
493+ . then ( schema => schema . deleteField ( 'missingField' , 'HasAllPOD' ) )
494+ . fail ( error => {
495+ expect ( error . code ) . toEqual ( 255 ) ;
496+ expect ( error . error ) . toEqual ( 'field missingField does not exist, cannot delete' ) ;
497+ done ( ) ;
498+ } ) ;
499+ } ) ;
500+
501+ it ( 'drops related collection when deleting relation field' , done => {
502+ var obj1 = hasAllPODobject ( ) ;
503+ obj1 . save ( )
504+ . then ( savedObj1 => {
505+ var obj2 = new Parse . Object ( 'HasPointersAndRelations' ) ;
506+ obj2 . set ( 'aPointer' , savedObj1 ) ;
507+ var relation = obj2 . relation ( 'aRelation' ) ;
508+ relation . add ( obj1 ) ;
509+ return obj2 . save ( ) ;
510+ } )
511+ . then ( ( ) => {
512+ config . database . db . collection ( 'test__Join:aRelation:HasPointersAndRelations' , { strict : true } , ( err , coll ) => {
513+ expect ( err ) . toEqual ( null ) ;
514+ config . database . loadSchema ( )
515+ . then ( schema => schema . deleteField ( 'aRelation' , 'HasPointersAndRelations' , config . database . db , 'test_' ) )
516+ . then ( ( ) => config . database . db . collection ( 'test__Join:aRelation:HasPointersAndRelations' , { strict : true } , ( err , coll ) => {
517+ expect ( err ) . not . toEqual ( null ) ;
518+ done ( ) ;
519+ } ) )
520+ } ) ;
521+ } )
522+ } ) ;
464523} ) ;
0 commit comments