@@ -335,6 +335,139 @@ module Squcumber::Postgres::Mock
335335 end
336336 end
337337
338+ describe '#_get_column_definitions' do
339+ let ( :column_definition_integer ) do
340+ {
341+ 'table_schema' => 'some_schema' ,
342+ 'table_name' => 'some_table' ,
343+ 'column_name' => 'some_column' ,
344+ 'udt_name' => 'int4' ,
345+ 'data_type' => 'integer' ,
346+ 'character_maximum_length' => nil ,
347+ 'numeric_precision' => 32 ,
348+ 'numeric_scale' => 0
349+ }
350+ end
351+ let ( :column_definition_varchar ) do
352+ {
353+ 'table_schema' => 'some_schema' ,
354+ 'table_name' => 'some_table' ,
355+ 'column_name' => 'some_column' ,
356+ 'udt_name' => 'varchar' ,
357+ 'data_type' => 'character varying' ,
358+ 'character_maximum_length' => 255 ,
359+ 'numeric_precision' => nil ,
360+ 'numeric_scale' => nil
361+ }
362+ end
363+ let ( :column_definition_varchar_array ) do
364+ {
365+ 'table_schema' => 'some_schema' ,
366+ 'table_name' => 'some_table' ,
367+ 'column_name' => 'some_column' ,
368+ 'udt_name' => '_varchar' ,
369+ 'data_type' => 'ARRAY' ,
370+ 'character_maximum_length' => nil ,
371+ 'numeric_precision' => nil ,
372+ 'numeric_scale' => nil
373+ }
374+ end
375+ let ( :column_definition_char ) do
376+ {
377+ 'table_schema' => 'some_schema' ,
378+ 'table_name' => 'some_table' ,
379+ 'column_name' => 'some_column' ,
380+ 'udt_name' => '_bpchar' ,
381+ 'data_type' => 'character' ,
382+ 'character_maximum_length' => 50 ,
383+ 'numeric_precision' => nil ,
384+ 'numeric_scale' => nil
385+ }
386+ end
387+ let ( :column_definition_jsonb ) do
388+ {
389+ 'table_schema' => 'some_schema' ,
390+ 'table_name' => 'some_table' ,
391+ 'column_name' => 'some_column' ,
392+ 'udt_name' => 'jsonb' ,
393+ 'data_type' => 'jsonb' ,
394+ 'character_maximum_length' => nil ,
395+ 'numeric_precision' => nil ,
396+ 'numeric_scale' => nil
397+ }
398+ end
399+ let ( :column_definition_timestamp ) do
400+ {
401+ 'table_schema' => 'some_schema' ,
402+ 'table_name' => 'some_table' ,
403+ 'column_name' => 'some_column' ,
404+ 'udt_name' => 'timestamp' ,
405+ 'data_type' => 'timestamp without time zone' ,
406+ 'character_maximum_length' => nil ,
407+ 'numeric_precision' => nil ,
408+ 'numeric_scale' => nil
409+ }
410+ end
411+ let ( :column_definition_numeric ) do
412+ {
413+ 'table_schema' => 'some_schema' ,
414+ 'table_name' => 'some_table' ,
415+ 'column_name' => 'some_column' ,
416+ 'udt_name' => 'numeric' ,
417+ 'data_type' => 'numeric' ,
418+ 'character_maximum_length' => nil ,
419+ 'numeric_precision' => 6 ,
420+ 'numeric_scale' => 2
421+ }
422+ end
423+
424+ before ( :each ) do
425+ @dummy = described_class . new ( production_database )
426+ end
427+
428+ it 'parses integer columns correctly' do
429+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_integer ] ) ) . to match ( [
430+ 'some_column integer default null'
431+ ] )
432+ end
433+
434+ it 'parses varchar columns correctly' do
435+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_varchar ] ) ) . to match ( [
436+ 'some_column character varying(255) default null'
437+ ] )
438+ end
439+
440+ it 'parses array varchar columns correctly' do
441+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_varchar_array ] ) ) . to match ( [
442+ 'some_column varchar[] default null'
443+ ] )
444+ end
445+
446+ it 'parses char columns correctly' do
447+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_char ] ) ) . to match ( [
448+ 'some_column character(50) default null'
449+ ] )
450+ end
451+
452+ it 'parses jsonb columns correctly' do
453+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_jsonb ] ) ) . to match ( [
454+ 'some_column jsonb default null'
455+ ] )
456+ end
457+
458+ it 'parses timestamp columns correctly' do
459+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_timestamp ] ) ) . to match ( [
460+ 'some_column timestamp without time zone default null'
461+ ] )
462+ end
463+
464+ it 'parses numeric columns correctly' do
465+ expect ( @dummy . send ( :_get_column_definitions , [ column_definition_numeric ] ) ) . to match ( [
466+ 'some_column numeric(6,2) default null'
467+ ] )
468+ end
469+ end
470+
338471 describe '#_get_create_table_statement' do
339472 let ( :schema ) { 'some_schema' }
340473 let ( :table ) { 'some_table' }
0 commit comments