@@ -9,7 +9,7 @@ describe('CloudCode ReadonlyTrigger tests', () => {
9
9
expect ( sessionObject . get ( 'sessionToken' ) ) . toBeDefined ( ) ;
10
10
expect ( sessionObject . get ( 'createdWith' ) ) . toBeDefined ( ) ;
11
11
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 ) ) ;
13
13
} ) ;
14
14
try {
15
15
// signup a user (internally creates a session)
@@ -18,7 +18,7 @@ describe('CloudCode ReadonlyTrigger tests', () => {
18
18
user . setPassword ( 'password' ) ;
19
19
await user . signUp ( ) ;
20
20
} catch ( error ) {
21
- throw 'Should not have failed' ;
21
+ throw error ;
22
22
}
23
23
} ) ;
24
24
it ( 'readonly-beforeSave should disregard any changes' , async ( ) => {
@@ -45,36 +45,45 @@ describe('CloudCode ReadonlyTrigger tests', () => {
45
45
expect ( sessionObject . get ( 'user' ) . id ) . toBe ( user . id ) ;
46
46
expect ( sessionObject . get ( 'sessionToken' ) ) . toBeDefined ( ) ;
47
47
} ) ;
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 ( ) => {
50
49
let user ;
51
50
Parse . Cloud . beforeSave ( '_Session' , async ( ) => {
51
+ // reject the session
52
52
throw new Parse . Error ( 12345678 , 'Sorry, we dont like this username' ) ;
53
53
} ) ;
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
+ } ) ;
54
66
try {
55
67
user = new Parse . User ( ) ;
56
- user . setUsername ( name ) ;
57
- user . setPassword ( 'password' ) ;
68
+ user . setUsername ( 'user- name' ) ;
69
+ user . setPassword ( 'user- password' ) ;
58
70
await user . signUp ( ) ;
59
71
} 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' ) ;
61
74
}
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' ) ;
69
80
// get the session
70
81
const query2 = new Parse . Query ( '_Session' ) ;
71
- query2 . equalTo ( 'user' , createdUser ) ;
82
+ query2 . equalTo ( 'user' , user ) ;
72
83
const sessionObject = await query2 . first ( {
73
84
useMasterKey : true ,
74
85
} ) ;
75
- expect ( sessionObject ) . toBeDefined ( ) ;
76
- expect ( sessionObject . get ( 'sessionToken' ) ) . toBeDefined ( ) ;
77
- expect ( sessionObject . get ( 'sessionToken' ) ) . toBe ( user . getSessionToken ( ) ) ;
86
+ expect ( sessionObject ) . toBeUndefined ( ) ;
78
87
} ) ;
79
88
it ( 'readonly-beforeSave should fail and prevent login on throw' , async ( ) => {
80
89
Parse . Cloud . beforeSave ( '_Session' , async req => {
0 commit comments