@@ -181,7 +181,7 @@ def test_run_w_bound_client(self):
181181 conn = _Connection (RESOURCE )
182182 client = _Client (project = self .PROJECT , connection = conn )
183183 query = self ._makeOne (self .QUERY , client )
184-
184+ self . assertEqual ( query . udf_resources , [])
185185 query .run ()
186186
187187 self .assertEqual (len (conn ._requested ), 1 )
@@ -233,6 +233,88 @@ def test_run_w_alternate_client(self):
233233 self .assertEqual (req ['data' ], SENT )
234234 self ._verifyResourceProperties (query , RESOURCE )
235235
236+ def test_run_w_inline_udf (self ):
237+ from gcloud .bigquery .query import UDFResource
238+ INLINE_UDF_CODE = 'var someCode = "here";'
239+ PATH = 'projects/%s/queries' % self .PROJECT
240+ RESOURCE = self ._makeResource (complete = False )
241+ conn = _Connection (RESOURCE )
242+ client = _Client (project = self .PROJECT , connection = conn )
243+ query = self ._makeOne (self .QUERY , client )
244+ query .udf_resources = [UDFResource ("inlineCode" , INLINE_UDF_CODE )]
245+
246+ query .run ()
247+
248+ self .assertEqual (len (conn ._requested ), 1 )
249+ req = conn ._requested [0 ]
250+ self .assertEqual (req ['method' ], 'POST' )
251+ self .assertEqual (req ['path' ], '/%s' % PATH )
252+ SENT = {'query' : self .QUERY ,
253+ 'userDefinedFunctionResources' :
254+ [{'inlineCode' : INLINE_UDF_CODE }]}
255+ self .assertEqual (req ['data' ], SENT )
256+ self ._verifyResourceProperties (query , RESOURCE )
257+
258+ def test_run_w_udf_resource_uri (self ):
259+ from gcloud .bigquery .job import UDFResource
260+ RESOURCE_URI = 'gs://some-bucket/js/lib.js'
261+ PATH = 'projects/%s/queries' % self .PROJECT
262+ RESOURCE = self ._makeResource (complete = False )
263+ conn = _Connection (RESOURCE )
264+ client = _Client (project = self .PROJECT , connection = conn )
265+ query = self ._makeOne (self .QUERY , client )
266+ query .udf_resources = [UDFResource ("resourceUri" , RESOURCE_URI )]
267+
268+ query .run ()
269+
270+ self .assertEqual (len (conn ._requested ), 1 )
271+ req = conn ._requested [0 ]
272+ self .assertEqual (req ['method' ], 'POST' )
273+ self .assertEqual (req ['path' ], '/%s' % PATH )
274+ SENT = {'query' : self .QUERY ,
275+ 'userDefinedFunctionResources' :
276+ [{'resourceUri' : RESOURCE_URI }]}
277+ self .assertEqual (req ['data' ], SENT )
278+ self ._verifyResourceProperties (query , RESOURCE )
279+
280+ def test_run_w_mixed_udfs (self ):
281+ from gcloud .bigquery .job import UDFResource
282+ RESOURCE_URI = 'gs://some-bucket/js/lib.js'
283+ INLINE_UDF_CODE = 'var someCode = "here";'
284+ PATH = 'projects/%s/queries' % self .PROJECT
285+ RESOURCE = self ._makeResource (complete = False )
286+ conn = _Connection (RESOURCE )
287+ client = _Client (project = self .PROJECT , connection = conn )
288+ query = self ._makeOne (self .QUERY , client )
289+ query .udf_resources = [UDFResource ("resourceUri" , RESOURCE_URI ),
290+ UDFResource ("inlineCode" , INLINE_UDF_CODE )]
291+
292+ query .run ()
293+
294+ self .assertEqual (len (conn ._requested ), 1 )
295+ req = conn ._requested [0 ]
296+ self .assertEqual (req ['method' ], 'POST' )
297+ self .assertEqual (req ['path' ], '/%s' % PATH )
298+ self .assertEqual (query .udf_resources ,
299+ [UDFResource ("resourceUri" , RESOURCE_URI ),
300+ UDFResource ("inlineCode" , INLINE_UDF_CODE )])
301+ SENT = {'query' : self .QUERY ,
302+ 'userDefinedFunctionResources' : [
303+ {'resourceUri' : RESOURCE_URI },
304+ {"inlineCode" : INLINE_UDF_CODE }]}
305+ self .assertEqual (req ['data' ], SENT )
306+ self ._verifyResourceProperties (query , RESOURCE )
307+
308+ def test_run_w_bad_udfs (self ):
309+ RESOURCE = self ._makeResource (complete = False )
310+ conn = _Connection (RESOURCE )
311+ client = _Client (project = self .PROJECT , connection = conn )
312+ query = self ._makeOne (self .QUERY , client )
313+
314+ with self .assertRaises (ValueError ):
315+ query .udf_resources = ["foo" ]
316+ self .assertEqual (query .udf_resources , [])
317+
236318 def test_fetch_data_query_not_yet_run (self ):
237319 conn = _Connection ()
238320 client = _Client (project = self .PROJECT , connection = conn )
0 commit comments