added tests for overwrite_modifications option
Robert Buels [Fri, 1 Jan 2010 02:32:12 +0000 (02:32 +0000)]
Makefile.PL
t/40overwrite_modifications.t [new file with mode: 0644]

index 1bb4cbf..9537779 100644 (file)
@@ -3,12 +3,14 @@ use inc::Module::Install 0.91;
 name           'DBIx-Class-Schema-Loader';
 all_from       'lib/DBIx/Class/Schema/Loader.pm';
 
+test_requires 'Test::Exception';
 test_requires 'Test::More'    => '0.94';
 test_requires 'DBI'           => '1.56';
 test_requires 'DBD::SQLite'   => '1.12';
+test_requires 'File::Copy';
+test_requires 'File::Temp'    => '0.16';
 test_requires 'File::Path'    => '2.07';
 test_requires 'IPC::Open3'    => 0;
-test_requires 'Test::Exception';
 
 requires 'File::Spec'                  => 0;
 requires 'Scalar::Util'                => 0;
diff --git a/t/40overwrite_modifications.t b/t/40overwrite_modifications.t
new file mode 100644 (file)
index 0000000..5863974
--- /dev/null
@@ -0,0 +1,55 @@
+use strict;
+use Test::More tests => 3;
+use Test::Exception;
+use lib qw(t/lib);
+use make_dbictest_db;
+
+use File::Copy;
+use File::Spec;
+use File::Temp qw/ tempdir tempfile /;
+
+use DBIx::Class::Schema::Loader;
+
+my $tempdir = tempdir( CLEANUP => 1 );
+my $foopm = File::Spec->catfile( $tempdir, qw| DBICTest Schema Overwrite_modifications Foo.pm |);
+dump_schema();
+
+# check that we dumped
+ok( -f $foopm, 'looks like it dumped' );
+
+# now modify one of the files
+{
+    open my $in, '<', $foopm or die "$! reading $foopm";
+    my ($tfh,$temp) = tempfile( UNLINK => 1);
+    while(<$in>) {
+       s/"bars"/"somethingelse"/;
+       print $tfh $_;
+    }
+    close $tfh;
+    copy( $temp, $foopm );
+}
+
+# and dump again without overwrites
+throws_ok {
+    dump_schema();
+} qr/mismatch/, 'throws error dumping without overwrite_modifications';
+
+# and then dump with overwrite
+lives_ok {
+    dump_schema( overwrite_modifications => 1 );
+} 'does not throw when dumping with overwrite_modifications';
+
+sub dump_schema {
+
+    # need to poke _loader_invoked in order to be able to rerun the
+    # loader multiple times.
+    DBICTest::Schema::Overwrite_modifications->_loader_invoked(0)
+         if @DBICTest::Schema::Overwrite_modifications::ISA;
+
+    DBIx::Class::Schema::Loader::make_schema_at( 'DBICTest::Schema::Overwrite_modifications',
+                                                { dump_directory => $tempdir,
+                                                  @_,
+                                                },
+                                                [ $make_dbictest_db::dsn ],
+                                              );
+}