@@ -525,6 +525,71 @@ describe('Parse.User testing', () => {
525525 } ) ;
526526 } ) ;
527527
528+ it ( 'never locks himself up' , async ( ) => {
529+ const user = new Parse . User ( ) ;
530+ await user . signUp ( {
531+ username : 'username' ,
532+ password : 'password'
533+ } ) ;
534+ user . setACL ( new Parse . ACL ( ) ) ;
535+ await user . save ( ) ;
536+ await user . fetch ( ) ;
537+ expect ( user . getACL ( ) . getReadAccess ( user ) ) . toBe ( true ) ;
538+ expect ( user . getACL ( ) . getWriteAccess ( user ) ) . toBe ( true ) ;
539+ const publicReadACL = new Parse . ACL ( ) ;
540+ publicReadACL . setPublicReadAccess ( true ) ;
541+
542+ // Create an administrator role with a single admin user
543+ const role = new Parse . Role ( 'admin' , publicReadACL ) ;
544+ const admin = new Parse . User ( ) ;
545+ await admin . signUp ( {
546+ username : 'admin' ,
547+ password : 'admin' ,
548+ } ) ;
549+ role . getUsers ( ) . add ( admin ) ;
550+ await role . save ( null , { useMasterKey : true } ) ;
551+
552+ // Grant the admins write rights on the user
553+ const acl = user . getACL ( ) ;
554+ acl . setRoleWriteAccess ( role , true ) ;
555+ acl . setRoleReadAccess ( role , true ) ;
556+
557+ // Update with the masterKey just to be sure
558+ await user . save ( { ACL : acl } , { useMasterKey : true } ) ;
559+
560+ // Try to update from admin... should all work fine
561+ await user . save ( { key : 'fromAdmin' } , { sessionToken : admin . getSessionToken ( ) } ) ;
562+ await user . fetch ( ) ;
563+ expect ( user . toJSON ( ) . key ) . toEqual ( 'fromAdmin' ) ;
564+
565+ // Try to save when logged out (public)
566+ let failed = false ;
567+ try {
568+ // Ensure no session token is sent
569+ await Parse . User . logOut ( ) ;
570+ await user . save ( { key : 'fromPublic' } ) ;
571+ } catch ( e ) {
572+ failed = true ;
573+ expect ( e . code ) . toBe ( Parse . Error . SESSION_MISSING ) ;
574+ }
575+ expect ( { failed } ) . toEqual ( { failed : true } ) ;
576+
577+ // Try to save with a random user, should fail
578+ failed = false ;
579+ const anyUser = new Parse . User ( ) ;
580+ await anyUser . signUp ( {
581+ username : 'randomUser' ,
582+ password : 'password'
583+ } ) ;
584+ try {
585+ await user . save ( { key : 'fromAnyUser' } ) ;
586+ } catch ( e ) {
587+ failed = true ;
588+ expect ( e . code ) . toBe ( Parse . Error . SESSION_MISSING ) ;
589+ }
590+ expect ( { failed } ) . toEqual ( { failed : true } ) ;
591+ } ) ;
592+
528593 it ( "current user" , ( done ) => {
529594 const user = new Parse . User ( ) ;
530595 user . set ( "password" , "asdf" ) ;
@@ -2379,7 +2444,7 @@ describe('Parse.User testing', () => {
23792444 } , ( error , response , body ) => {
23802445 expect ( error ) . toBe ( null ) ;
23812446 const b = JSON . parse ( body ) ;
2382- expect ( b . error ) . toBe ( 'invalid session token' ) ;
2447+ expect ( b . error ) . toBe ( 'Invalid session token' ) ;
23832448 request . put ( {
23842449 headers : {
23852450 'X-Parse-Application-Id' : 'test' ,
@@ -2471,7 +2536,7 @@ describe('Parse.User testing', () => {
24712536 expect ( error ) . toBe ( null ) ;
24722537 const b = JSON . parse ( body ) ;
24732538 expect ( b . code ) . toEqual ( 209 ) ;
2474- expect ( b . error ) . toBe ( 'invalid session token' ) ;
2539+ expect ( b . error ) . toBe ( 'Invalid session token' ) ;
24752540 done ( ) ;
24762541 } ) ;
24772542 } ) ;
@@ -2513,7 +2578,7 @@ describe('Parse.User testing', () => {
25132578 } , ( error , response , body ) => {
25142579 const b = JSON . parse ( body ) ;
25152580 expect ( b . code ) . toEqual ( 209 ) ;
2516- expect ( b . error ) . toBe ( 'invalid session token' ) ;
2581+ expect ( b . error ) . toBe ( 'Invalid session token' ) ;
25172582 done ( ) ;
25182583 } ) ;
25192584 } ) ;
@@ -2550,7 +2615,7 @@ describe('Parse.User testing', () => {
25502615 done ( ) ;
25512616 } , function ( err ) {
25522617 expect ( err . code ) . toBe ( Parse . Error . INVALID_SESSION_TOKEN ) ;
2553- expect ( err . message ) . toBe ( 'invalid session token' ) ;
2618+ expect ( err . message ) . toBe ( 'Invalid session token' ) ;
25542619 done ( ) ;
25552620 } ) ;
25562621 } ) ;
@@ -2626,7 +2691,7 @@ describe('Parse.User testing', () => {
26262691 } ) ;
26272692 } ) ;
26282693
2629- it ( "invalid session tokens are rejected" , ( done ) => {
2694+ it ( "Invalid session tokens are rejected" , ( done ) => {
26302695 Parse . User . signUp ( "asdf" , "zxcv" , null , {
26312696 success : function ( ) {
26322697 request . get ( {
@@ -2639,7 +2704,7 @@ describe('Parse.User testing', () => {
26392704 } ,
26402705 } , ( error , response , body ) => {
26412706 expect ( body . code ) . toBe ( 209 ) ;
2642- expect ( body . error ) . toBe ( 'invalid session token' ) ;
2707+ expect ( body . error ) . toBe ( 'Invalid session token' ) ;
26432708 done ( ) ;
26442709 } )
26452710 }
0 commit comments