1515import unittest2
1616
1717
18+ class Test_UDFResourcesProperty (unittest2 .TestCase ):
19+
20+ def _getTargetClass (self ):
21+ from gcloud .bigquery .job import UDFResourcesProperty
22+ return UDFResourcesProperty
23+
24+ def _makeOne (self , * args , ** kw ):
25+ return self ._getTargetClass ()(* args , ** kw )
26+
27+ def _descriptor_and_klass (self ):
28+ descriptor = self ._makeOne ()
29+
30+ class _Test (object ):
31+ _udf_resources = ()
32+ udf_resources = descriptor
33+
34+ return descriptor , _Test
35+
36+ def test_class_getter (self ):
37+ descriptor , klass = self ._descriptor_and_klass ()
38+ self .assertTrue (klass .udf_resources is descriptor )
39+
40+ def test_instance_getter_empty (self ):
41+ _ , klass = self ._descriptor_and_klass ()
42+ instance = klass ()
43+ self .assertEqual (instance .udf_resources , [])
44+
45+ def test_instance_getter_w_non_empty_list (self ):
46+ from gcloud .bigquery .job import UDFResource
47+ RESOURCE_URI = 'gs://some-bucket/js/lib.js'
48+ udf_resources = [UDFResource ("resourceUri" , RESOURCE_URI )]
49+ _ , klass = self ._descriptor_and_klass ()
50+ instance = klass ()
51+ instance ._udf_resources = tuple (udf_resources )
52+
53+ self .assertEqual (instance .udf_resources , udf_resources )
54+
55+ def test_instance_setter_w_empty_list (self ):
56+ from gcloud .bigquery .job import UDFResource
57+ RESOURCE_URI = 'gs://some-bucket/js/lib.js'
58+ udf_resources = [UDFResource ("resourceUri" , RESOURCE_URI )]
59+ _ , klass = self ._descriptor_and_klass ()
60+ instance = klass ()
61+ instance ._udf_resources = udf_resources
62+
63+ instance .udf_resources = []
64+
65+ self .assertEqual (instance .udf_resources , [])
66+
67+ def test_instance_setter_w_valid_udf (self ):
68+ from gcloud .bigquery .job import UDFResource
69+ RESOURCE_URI = 'gs://some-bucket/js/lib.js'
70+ udf_resources = [UDFResource ("resourceUri" , RESOURCE_URI )]
71+ _ , klass = self ._descriptor_and_klass ()
72+ instance = klass ()
73+
74+ instance .udf_resources = udf_resources
75+
76+ self .assertEqual (instance .udf_resources , udf_resources )
77+
78+ def test_instance_setter_w_bad_udfs (self ):
79+ _ , klass = self ._descriptor_and_klass ()
80+ instance = klass ()
81+
82+ with self .assertRaises (ValueError ):
83+ instance .udf_resources = ["foo" ]
84+
85+ self .assertEqual (instance .udf_resources , [])
86+
87+
1888class _Base (object ):
1989 PROJECT = 'project'
2090 SOURCE1 = 'http://example.com/source1.csv'
@@ -1384,7 +1454,7 @@ def test_begin_w_bound_client(self):
13841454 job = self ._makeOne (self .JOB_NAME , self .QUERY , client )
13851455
13861456 job .begin ()
1387-
1457+ self . assertEqual ( job . udf_resources , [])
13881458 self .assertEqual (len (conn ._requested ), 1 )
13891459 req = conn ._requested [0 ]
13901460 self .assertEqual (req ['method' ], 'POST' )
@@ -1396,7 +1466,7 @@ def test_begin_w_bound_client(self):
13961466 },
13971467 'configuration' : {
13981468 'query' : {
1399- 'query' : self .QUERY ,
1469+ 'query' : self .QUERY
14001470 },
14011471 },
14021472 }
@@ -1468,6 +1538,47 @@ def test_begin_w_alternate_client(self):
14681538 self .assertEqual (req ['data' ], SENT )
14691539 self ._verifyResourceProperties (job , RESOURCE )
14701540
1541+ def test_begin_w_bound_client_and_udf (self ):
1542+ from gcloud .bigquery .job import UDFResource
1543+ RESOURCE_URI = 'gs://some-bucket/js/lib.js'
1544+ PATH = 'projects/%s/jobs' % self .PROJECT
1545+ RESOURCE = self ._makeResource ()
1546+ # Ensure None for missing server-set props
1547+ del RESOURCE ['statistics' ]['creationTime' ]
1548+ del RESOURCE ['etag' ]
1549+ del RESOURCE ['selfLink' ]
1550+ del RESOURCE ['user_email' ]
1551+ conn = _Connection (RESOURCE )
1552+ client = _Client (project = self .PROJECT , connection = conn )
1553+ job = self ._makeOne (self .JOB_NAME , self .QUERY , client ,
1554+ udf_resources = [
1555+ UDFResource ("resourceUri" , RESOURCE_URI )
1556+ ])
1557+
1558+ job .begin ()
1559+
1560+ self .assertEqual (len (conn ._requested ), 1 )
1561+ req = conn ._requested [0 ]
1562+ self .assertEqual (req ['method' ], 'POST' )
1563+ self .assertEqual (req ['path' ], '/%s' % PATH )
1564+ self .assertEqual (job .udf_resources ,
1565+ [UDFResource ("resourceUri" , RESOURCE_URI )])
1566+ SENT = {
1567+ 'jobReference' : {
1568+ 'projectId' : self .PROJECT ,
1569+ 'jobId' : self .JOB_NAME ,
1570+ },
1571+ 'configuration' : {
1572+ 'query' : {
1573+ 'query' : self .QUERY ,
1574+ 'userDefinedFunctionResources' :
1575+ [{'resourceUri' : RESOURCE_URI }]
1576+ },
1577+ },
1578+ }
1579+ self .assertEqual (req ['data' ], SENT )
1580+ self ._verifyResourceProperties (job , RESOURCE )
1581+
14711582 def test_exists_miss_w_bound_client (self ):
14721583 PATH = 'projects/%s/jobs/%s' % (self .PROJECT , self .JOB_NAME )
14731584 conn = _Connection ()
0 commit comments