@@ -9,7 +9,7 @@ describe('CloudCode ReadonlyTrigger tests', () => {
99 expect ( sessionObject . get ( 'sessionToken' ) ) . toBeDefined ( ) ;
1010 expect ( sessionObject . get ( 'createdWith' ) ) . toBeDefined ( ) ;
1111 expect ( sessionObject . get ( 'user' ) ) . toBeDefined ( ) ;
12- expect ( sessionObject . get ( 'user' ) . toEqual ( jasmine . any ( Parse . User ) ) ) ;
12+ expect ( sessionObject . get ( 'user' ) ) . toEqual ( jasmine . any ( Parse . User ) ) ;
1313 } ) ;
1414 try {
1515 // signup a user (internally creates a session)
@@ -18,7 +18,7 @@ describe('CloudCode ReadonlyTrigger tests', () => {
1818 user . setPassword ( 'password' ) ;
1919 await user . signUp ( ) ;
2020 } catch ( error ) {
21- throw 'Should not have failed' ;
21+ throw error ;
2222 }
2323 } ) ;
2424 it ( 'readonly-beforeSave should disregard any changes' , async ( ) => {
@@ -45,36 +45,45 @@ describe('CloudCode ReadonlyTrigger tests', () => {
4545 expect ( sessionObject . get ( 'user' ) . id ) . toBe ( user . id ) ;
4646 expect ( sessionObject . get ( 'sessionToken' ) ) . toBeDefined ( ) ;
4747 } ) ;
48- it ( 'readonly-beforeSave should ignore any thrown errors during signup' , async ( ) => {
49- const name = 'some username we dont like' ;
48+ it ( 'readonly-beforeSave should not affect user creation flow during signup' , async ( ) => {
5049 let user ;
5150 Parse . Cloud . beforeSave ( '_Session' , async ( ) => {
51+ // reject the session
5252 throw new Parse . Error ( 12345678 , 'Sorry, we dont like this username' ) ;
5353 } ) ;
54+ Parse . Cloud . beforeSave ( '_User' , async req => {
55+ // make sure this runs correctly
56+ req . object . set ( 'firstName' , 'abcd' ) ;
57+ } ) ;
58+ Parse . Cloud . afterSave ( '_User' , async req => {
59+ if ( req . object . has ( 'lastName' ) ) {
60+ return ;
61+ }
62+ // make sure this runs correctly
63+ req . object . set ( 'lastName' , '1234' ) ;
64+ await req . object . save ( { } , { useMasterKey : true } ) ;
65+ } ) ;
5466 try {
5567 user = new Parse . User ( ) ;
56- user . setUsername ( name ) ;
57- user . setPassword ( 'password' ) ;
68+ user . setUsername ( 'user- name' ) ;
69+ user . setPassword ( 'user- password' ) ;
5870 await user . signUp ( ) ;
5971 } catch ( error ) {
60- throw 'Should not have failed' ;
72+ expect ( error . code ) . toBe ( 12345678 ) ;
73+ expect ( error . message ) . toBe ( 'Sorry, we dont like this username' ) ;
6174 }
62- // get the user
63- const query = new Parse . Query ( '_User' ) ;
64- query . equalTo ( 'username' , name ) ;
65- const createdUser = await query . first ( {
66- useMasterKey : true ,
67- } ) ;
68- expect ( createdUser ) . toBeDefined ( ) ;
75+ await delay ( 200 ) ; // just so that afterSave has time to run
76+ await user . fetch ( { useMasterKey : true } ) ;
77+ expect ( user . get ( 'username' ) ) . toBe ( 'user-name' ) ;
78+ expect ( user . get ( 'firstName' ) ) . toBe ( 'abcd' ) ;
79+ expect ( user . get ( 'lastName' ) ) . toBe ( '1234' ) ;
6980 // get the session
7081 const query2 = new Parse . Query ( '_Session' ) ;
71- query2 . equalTo ( 'user' , createdUser ) ;
82+ query2 . equalTo ( 'user' , user ) ;
7283 const sessionObject = await query2 . first ( {
7384 useMasterKey : true ,
7485 } ) ;
75- expect ( sessionObject ) . toBeDefined ( ) ;
76- expect ( sessionObject . get ( 'sessionToken' ) ) . toBeDefined ( ) ;
77- expect ( sessionObject . get ( 'sessionToken' ) ) . toBe ( user . getSessionToken ( ) ) ;
86+ expect ( sessionObject ) . toBeUndefined ( ) ;
7887 } ) ;
7988 it ( 'readonly-beforeSave should fail and prevent login on throw' , async ( ) => {
8089 Parse . Cloud . beforeSave ( '_Session' , async req => {
0 commit comments