@@ -30,63 +30,42 @@ var bigquery = require('../')(env);
3030var storage = require ( '@google-cloud/storage' ) ( env ) ;
3131
3232describe ( 'BigQuery' , function ( ) {
33- var DATASET_ID = ( 'gcloud_test_dataset_temp' + uuid . v1 ( ) ) . replace ( / - / g, '_' ) ;
34- var dataset = bigquery . dataset ( DATASET_ID ) ;
35- var TABLE_ID = 'myKittens' ;
36- var table = dataset . table ( TABLE_ID ) ;
37- var BUCKET_NAME = 'gcloud-test-bucket-temp-' + uuid . v1 ( ) ;
38- var bucket = storage . bucket ( BUCKET_NAME ) ;
33+ var GCLOUD_TESTS_PREFIX = 'gcloud_test_' ;
34+
35+ var dataset = bigquery . dataset ( generateName ( 'dataset' ) ) ;
36+ var table = dataset . table ( generateName ( 'table' ) ) ;
37+ var bucket = storage . bucket ( generateName ( 'bucket' ) ) ;
3938
4039 var query = 'SELECT url FROM [publicdata:samples.github_nested] LIMIT 100' ;
4140
4241 before ( function ( done ) {
4342 async . series ( [
43+ // Remove buckets created for the tests.
44+ deleteBuckets ,
45+
46+ // Remove datasets created for the tests.
47+ deleteDatasets ,
48+
4449 // Create the test dataset.
45- function ( next ) {
46- dataset . create ( next ) ;
47- } ,
50+ dataset . create . bind ( dataset ) ,
4851
4952 // Create the test table.
50- function ( next ) {
51- table . create ( {
52- schema : 'id:integer,breed,name,dob:timestamp,around:boolean'
53- } , next ) ;
54- } ,
53+ table . create . bind ( table , {
54+ schema : 'id:integer,breed,name,dob:timestamp,around:boolean'
55+ } ) ,
5556
5657 // Create a Bucket.
57- function ( next ) {
58- bucket . create ( next ) ;
59- }
58+ bucket . create . bind ( bucket )
6059 ] , done ) ;
6160 } ) ;
6261
6362 after ( function ( done ) {
6463 async . parallel ( [
65- // Delete the bucket we used.
66- function ( next ) {
67- bucket . getFiles ( function ( err , files ) {
68- if ( err ) {
69- next ( err ) ;
70- return ;
71- }
72-
73- async . map ( files , function ( file , onComplete ) {
74- file . delete ( onComplete ) ;
75- } , function ( err ) {
76- if ( err ) {
77- next ( err ) ;
78- return ;
79- }
80-
81- bucket . delete ( next ) ;
82- } ) ;
83- } ) ;
84- } ,
64+ // Remove buckets created for the tests.
65+ deleteBuckets ,
8566
86- // Delete the test dataset.
87- function ( next ) {
88- dataset . delete ( { force : true } , next ) ;
89- }
67+ // Remove datasets created for the tests.
68+ deleteDatasets
9069 ] , done ) ;
9170 } ) ;
9271
@@ -113,11 +92,6 @@ describe('BigQuery', function() {
11392
11493 bigquery . getDatasets ( { maxApiCalls : maxApiCalls } , function ( err ) {
11594 assert . ifError ( err ) ;
116-
117- // Even though the request interceptor is called, the request can still be
118- // prevented if the `maxApiCalls` limit was reached.
119- numRequestsMade -= 1 ;
120-
12195 assert . strictEqual ( numRequestsMade , 1 ) ;
12296 done ( ) ;
12397 } ) ;
@@ -281,6 +255,57 @@ describe('BigQuery', function() {
281255 done ( ) ;
282256 } ) ;
283257 } ) ;
258+
259+ it ( 'should create a Table with a nested schema' , function ( done ) {
260+ var table = dataset . table ( generateName ( 'table' ) ) ;
261+
262+ table . create ( {
263+ schema : {
264+ fields : [
265+ {
266+ name : 'id' ,
267+ type : 'INTEGER'
268+ } ,
269+ {
270+ name : 'details' ,
271+ fields : [
272+ {
273+ name : 'nested_id' ,
274+ type : 'INTEGER'
275+ }
276+ ]
277+ }
278+ ]
279+ }
280+ } , function ( err ) {
281+ assert . ifError ( err ) ;
282+
283+ table . getMetadata ( function ( err , metadata ) {
284+ assert . ifError ( err ) ;
285+
286+ assert . deepEqual ( metadata . schema , {
287+ fields : [
288+ {
289+ name : 'id' ,
290+ type : 'INTEGER'
291+ } ,
292+ {
293+ name : 'details' ,
294+ type : 'RECORD' ,
295+ fields : [
296+ {
297+ name : 'nested_id' ,
298+ type : 'INTEGER'
299+ }
300+ ]
301+ }
302+ ]
303+ } ) ;
304+
305+ done ( ) ;
306+ } ) ;
307+ } ) ;
308+ } ) ;
284309 } ) ;
285310
286311 describe ( 'BigQuery/Table' , function ( ) {
@@ -384,7 +409,7 @@ describe('BigQuery', function() {
384409 function query ( callback ) {
385410 var row ;
386411
387- table . query ( 'SELECT * FROM ' + TABLE_ID + ' WHERE id = ' + data . id )
412+ table . query ( 'SELECT * FROM ' + table . id + ' WHERE id = ' + data . id )
388413 . on ( 'error' , callback )
389414 . once ( 'data' , function ( row_ ) { row = row_ ; } )
390415 . on ( 'end' , function ( ) {
@@ -420,4 +445,57 @@ describe('BigQuery', function() {
420445 } ) ;
421446 } ) ;
422447 } ) ;
448+
449+ function generateName ( resourceType ) {
450+ return ( GCLOUD_TESTS_PREFIX + resourceType + '_' + uuid . v1 ( ) )
451+ . replace ( / - / g, '_' ) ;
452+ }
453+
454+ function deleteBuckets ( callback ) {
455+ function deleteBucket ( bucket , callback ) {
456+ bucket . getFiles ( function ( err , files ) {
457+ if ( err ) {
458+ callback ( err ) ;
459+ return ;
460+ }
461+
462+ async . each ( files , function ( file , next ) {
463+ file . delete ( next ) ;
464+ } , function ( err ) {
465+ if ( err ) {
466+ callback ( err ) ;
467+ return ;
468+ }
469+
470+ bucket . delete ( callback ) ;
471+ } ) ;
472+ } ) ;
473+ }
474+
475+ storage . getBuckets ( {
476+ prefix : GCLOUD_TESTS_PREFIX
477+ } , function ( err , buckets ) {
478+ if ( err ) {
479+ callback ( err ) ;
480+ return ;
481+ }
482+
483+ async . each ( buckets , deleteBucket , callback ) ;
484+ } ) ;
485+ }
486+
487+ function deleteDatasets ( callback ) {
488+ bigquery . getDatasets ( {
489+ prefix : GCLOUD_TESTS_PREFIX
490+ } , function ( err , datasets ) {
491+ if ( err ) {
492+ callback ( err ) ;
493+ return ;
494+ }
495+
496+ async . each ( datasets , function ( dataset , next ) {
497+ dataset . delete ( { force : true } , next ) ;
498+ } , callback ) ;
499+ } ) ;
500+ }
423501} ) ;
0 commit comments