@@ -115,6 +115,95 @@ describe('ParseLiveQuery', function () {
115115 } ) ;
116116 } ) ;
117117
118+ it ( 'can handle mutate beforeSubscribe query' , async done => {
119+ await reconfigureServer ( {
120+ liveQuery : {
121+ classNames : [ 'TestObject' ] ,
122+ } ,
123+ startLiveQueryServer : true ,
124+ verbose : false ,
125+ silent : true ,
126+ } ) ;
127+ Parse . Cloud . beforeSubscribe ( TestObject , request => {
128+ const query = request . query ;
129+ query . equalTo ( 'yolo' , 'abc' ) ;
130+ } ) ;
131+
132+ const object = new TestObject ( ) ;
133+ await object . save ( ) ;
134+
135+ const query = new Parse . Query ( TestObject ) ;
136+ query . equalTo ( 'objectId' , object . id ) ;
137+ const subscription = await query . subscribe ( ) ;
138+
139+ subscription . on ( 'update' , ( ) => {
140+ fail ( ) ;
141+ } ) ;
142+ object . set ( { foo : 'bar' } ) ;
143+ await object . save ( ) ;
144+ setTimeout ( async ( ) => {
145+ done ( ) ;
146+ } , 1000 ) ;
147+ } ) ;
148+
149+ it ( 'can return a new beforeSubscribe query' , async done => {
150+ await reconfigureServer ( {
151+ liveQuery : {
152+ classNames : [ 'TestObject' ] ,
153+ } ,
154+ startLiveQueryServer : true ,
155+ verbose : false ,
156+ silent : true ,
157+ } ) ;
158+ Parse . Cloud . beforeSubscribe ( TestObject , request => {
159+ const query = new Parse . Query ( TestObject ) ;
160+ query . equalTo ( 'foo' , 'yolo' ) ;
161+ request . query = query ;
162+ } ) ;
163+
164+ const query = new Parse . Query ( TestObject ) ;
165+ query . equalTo ( 'foo' , 'bar' ) ;
166+ const subscription = await query . subscribe ( ) ;
167+
168+ subscription . on ( 'create' , object => {
169+ expect ( object . get ( 'foo' ) ) . toBe ( 'yolo' ) ;
170+ done ( ) ;
171+ } ) ;
172+ const object = new TestObject ( ) ;
173+ object . set ( { foo : 'yolo' } ) ;
174+ await object . save ( ) ;
175+ } ) ;
176+
177+ it ( 'can handle select beforeSubscribe query' , async done => {
178+ await reconfigureServer ( {
179+ liveQuery : {
180+ classNames : [ 'TestObject' ] ,
181+ } ,
182+ startLiveQueryServer : true ,
183+ verbose : false ,
184+ silent : true ,
185+ } ) ;
186+ Parse . Cloud . beforeSubscribe ( TestObject , request => {
187+ const query = request . query ;
188+ query . select ( 'yolo' ) ;
189+ } ) ;
190+
191+ const object = new TestObject ( ) ;
192+ await object . save ( ) ;
193+
194+ const query = new Parse . Query ( TestObject ) ;
195+ query . equalTo ( 'objectId' , object . id ) ;
196+ const subscription = await query . subscribe ( ) ;
197+
198+ subscription . on ( 'update' , object => {
199+ expect ( object . get ( 'foo' ) ) . toBeUndefined ( ) ;
200+ expect ( object . get ( 'yolo' ) ) . toBe ( 'abc' ) ;
201+ done ( ) ;
202+ } ) ;
203+ object . set ( { foo : 'bar' , yolo : 'abc' } ) ;
204+ await object . save ( ) ;
205+ } ) ;
206+
118207 it ( 'handle invalid websocket payload length' , async done => {
119208 await reconfigureServer ( {
120209 liveQuery : {
0 commit comments