@@ -4906,6 +4906,138 @@ describe('ParseGraphQLServer', () => {
4906
4906
expect ( Date . parse ( getResult . data . get . updatedAt ) ) . not . toEqual ( NaN ) ;
4907
4907
} ) ;
4908
4908
4909
+ it ( 'should support ACL' , async ( ) => {
4910
+ const someClass = new Parse . Object ( 'SomeClass' ) ;
4911
+ await someClass . save ( ) ;
4912
+
4913
+ const user = new Parse . User ( ) ;
4914
+ user . set ( 'username' , 'username' ) ;
4915
+ user . set ( 'password' , 'password' ) ;
4916
+ await user . signUp ( ) ;
4917
+
4918
+ const role = new Parse . Role ( ) ;
4919
+ role . set ( 'name' , 'aRole' ) ;
4920
+ await role . save ( ) ;
4921
+
4922
+ await parseGraphQLServer . parseGraphQLSchema . databaseController . schemaCache . clear ( ) ;
4923
+
4924
+ const {
4925
+ data : { createSomeClass } ,
4926
+ } = await apolloClient . mutate ( {
4927
+ mutation : gql `
4928
+ mutation Create($fields: CreateSomeClassFieldsInput) {
4929
+ createSomeClass(fields: $fields) {
4930
+ objectId
4931
+ ACL {
4932
+ users {
4933
+ userId
4934
+ read
4935
+ write
4936
+ }
4937
+ roles {
4938
+ roleName
4939
+ read
4940
+ write
4941
+ }
4942
+ public {
4943
+ read
4944
+ write
4945
+ }
4946
+ }
4947
+ }
4948
+ }
4949
+ ` ,
4950
+ variables : {
4951
+ fields : {
4952
+ ACL : {
4953
+ users : [ { userId : user . id , read : true , write : true } ] ,
4954
+ roles : [ { roleName : 'aRole' , read : true } ] ,
4955
+ public : { read : true } ,
4956
+ } ,
4957
+ } ,
4958
+ } ,
4959
+ } ) ;
4960
+
4961
+ const expectedCreateACL = {
4962
+ users : [ { userId : user . id , read : true , write : true } ] ,
4963
+ roles : [ { roleName : 'aRole' , read : true , write : null } ] ,
4964
+ public : { read : true , write : null } ,
4965
+ } ;
4966
+
4967
+ const query1 = new Parse . Query ( 'SomeClass' ) ;
4968
+ const obj1 = ( await query1 . get ( createSomeClass . objectId , {
4969
+ useMasterKey : true ,
4970
+ } ) ) . toJSON ( ) ;
4971
+
4972
+ expect ( obj1 . ACL [ 'role:aRole' ] ) . toBeDefined ( ) ;
4973
+ expect ( obj1 . ACL [ 'role:aRole' ] ) . toEqual ( { read : true } ) ;
4974
+ expect ( obj1 . ACL [ user . id ] ) . toBeDefined ( ) ;
4975
+ expect ( obj1 . ACL [ user . id ] ) . toEqual ( { read : true , write : true } ) ;
4976
+ expect ( obj1 . ACL [ '*' ] ) . toBeDefined ( ) ;
4977
+ expect ( obj1 . ACL [ '*' ] ) . toEqual ( { read : true } ) ;
4978
+
4979
+ expect ( createSomeClass . objectId ) . toBeDefined ( ) ;
4980
+ expect ( createSomeClass . ACL ) . toEqual ( expectedCreateACL ) ;
4981
+
4982
+ const {
4983
+ data : { updateSomeClass } ,
4984
+ } = await apolloClient . mutate ( {
4985
+ mutation : gql `
4986
+ mutation Update(
4987
+ $objectId: ID
4988
+ $fields: CreateSomeClassFieldsInput
4989
+ ) {
4990
+ updateSomeClass(objectId: $objectId, fields: $fields) {
4991
+ objectId
4992
+ ACL {
4993
+ users {
4994
+ userId
4995
+ read
4996
+ write
4997
+ }
4998
+ roles {
4999
+ roleName
5000
+ read
5001
+ write
5002
+ }
5003
+ public {
5004
+ read
5005
+ write
5006
+ }
5007
+ }
5008
+ }
5009
+ }
5010
+ ` ,
5011
+ variables : {
5012
+ objectId : createSomeClass . objectId ,
5013
+ fields : {
5014
+ ACL : {
5015
+ roles : [ { roleName : 'aRole' , read : true , write : true } ] ,
5016
+ } ,
5017
+ } ,
5018
+ } ,
5019
+ } ) ;
5020
+
5021
+ const expectedUpdateACL = {
5022
+ users : null ,
5023
+ roles : [ { roleName : 'aRole' , read : true , write : true } ] ,
5024
+ public : null ,
5025
+ } ;
5026
+
5027
+ const query2 = new Parse . Query ( 'SomeClass' ) ;
5028
+ const obj2 = ( await query2 . get ( createSomeClass . objectId , {
5029
+ useMasterKey : true ,
5030
+ } ) ) . toJSON ( ) ;
5031
+
5032
+ expect ( obj2 . ACL [ 'role:aRole' ] ) . toBeDefined ( ) ;
5033
+ expect ( obj2 . ACL [ 'role:aRole' ] ) . toEqual ( { read : true , write : true } ) ;
5034
+ expect ( obj2 . ACL [ user . id ] ) . toBeUndefined ( ) ;
5035
+ expect ( obj2 . ACL [ '*' ] ) . toBeUndefined ( ) ;
5036
+
5037
+ expect ( updateSomeClass . objectId ) . toBeDefined ( ) ;
5038
+ expect ( updateSomeClass . ACL ) . toEqual ( expectedUpdateACL ) ;
5039
+ } ) ;
5040
+
4909
5041
it ( 'should support pointer on create' , async ( ) => {
4910
5042
const company = new Parse . Object ( 'Company' ) ;
4911
5043
company . set ( 'name' , 'imACompany1' ) ;
0 commit comments