#!/usr/bin/perl -w package Local::SQL::Translator::Parser::XML::Xmldoom; use base qw(Test::Class); use SQL::Translator; use SQL::Translator::Schema::Constants; use SQL::Translator::Parser::XML::Xmldoom; use Test::More; use strict; use Data::Dumper; sub parse { my $translator = SQL::Translator->new(@_); SQL::Translator::Parser::XML::Xmldoom::parse($translator, ${$translator->data}); return $translator->schema; } sub testDatabaseTag : Test(2) { my $self = shift; my $xml = << "EOF"; EOF my $schema = parse(data => $xml); is( $schema->name, 'bookstore' ); is( $schema->extra('defaultIdMethod'), 'native'); } sub testTableTag : Test(2) { my $self = shift; my $xml = << "EOF";
EOF my $schema = parse(data => $xml); my $table = $schema->get_table('book'); is( $table->name, 'book' ); is( $table->extra('description'), 'Book Table'); } sub testColumnTag : Test(20) { my $self = shift; my $xml = << "EOF";
EOF my $schema = parse(data => $xml); my $table = $schema->get_table('book'); my $field1 = $table->get_field('book_id'); my $field2 = $table->get_field('title'); my $field3 = $table->get_field('active'); my $field4 = $table->get_field('last_changed'); # check first field is( $field1->name, 'book_id' ); is( $field1->data_type, 'INTEGER' ); is( $field1->is_primary_key, 1 ); is( $field1->is_nullable, 1 ); is( $field1->is_auto_increment, 1 ); is( $field1->extra('description'), 'Book Id' ); is( $field1->extra('idGenerator'), 'Some::Perl::Class' ); # check second field is( $field2->name, 'title' ); is( $field2->data_type, 'VARCHAR' ); is( $field2->is_primary_key, 0 ); is( $field2->is_nullable, 0 ); is( $field2->is_auto_increment, 0 ); is( $field2->extra('description'), 'Book Title' ); is( $field2->default_value, 'Unknown' ); # check enum field my $options = $field3->extra( 'list' ); is( scalar @$options, 2 ); is( $options->[0], 'Y' ); is( $options->[1], 'N' ); # check the timestamp attribute is( $field4->extra('timestamp'), 'current' ); my @primary_key; foreach my $constraint ( $table->get_constraints ) { if ( $constraint->type eq PRIMARY_KEY ) { @primary_key = $constraint->field_names; last; } } ok( scalar @primary_key == 1 ); is( $primary_key[0], 'book_id' ); } sub testForeignKeyTag : Test(6) { my $self = shift; my $xml = << "EOF";
EOF my $schema = parse(data => $xml); my $table = $schema->get_table('book'); my @foreign_keys; foreach my $constraint ( $table->get_constraints ) { if ( $constraint->type eq FOREIGN_KEY ) { push @foreign_keys, $constraint; } } ok( scalar @foreign_keys == 1 ); is( $foreign_keys[0]->reference_table, 'author' ); my @local_fields = $foreign_keys[0]->fields; my @foreign_fields = $foreign_keys[0]->reference_fields; ok( scalar @local_fields == 1 ); is( $local_fields[0], 'author_id' ); ok( scalar @foreign_fields == 1 ); is( $foreign_fields[0], 'author_id' ); } 1;