add test (which fail) and update Changelog for prepopulate_journal
Oliver Gorwits [Wed, 28 Apr 2010 20:57:14 +0000 (20:57 +0000)]
Changes
t/03populate.t [new file with mode: 0644]

diff --git a/Changes b/Changes
index fa12cc7..5dedba0 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,7 @@
+0.900001_05 2010-04-28
+    - Added prepopulate_journal() to bootstrap insert logs, for retrofitting (oliver)
+    - Added bootstrap_journal() which calls deploy_journal() and then prepopulate_journal() (oliver)
+
 0.900001_04 2010-04-27
     - Lots of documentation tweaks (oliver)
     - Fix a bug caused by storing state of row BEFORE update instead of after (oliver)
diff --git a/t/03populate.t b/t/03populate.t
new file mode 100644 (file)
index 0000000..c6fa507
--- /dev/null
@@ -0,0 +1,99 @@
+use strict;
+use warnings;
+
+use Test::More;
+BEGIN {
+    eval "use DBD::SQLite; use SQL::Translator";
+    plan $@
+        ? ( skip_all => 'needs DBD::SQLite and SQL::Translator for testing' )
+        : ( tests => 21 );
+}
+
+use lib qw(t/lib);
+use DBICTest;
+
+# connect to db and deploy only the original db schema, not journal schema
+my $schema = DBICTest->init_schema(no_populate => 1, no_deploy => 1);
+$schema->deploy;
+
+ok($schema, 'Created a Schema');
+
+# check we have no journal
+my $count = eval {
+    $schema->_journal_schema->resultset('ChangeLog')->count;
+};
+my $e = $@;
+
+is( $count, undef, 'no count' );
+like( $e, qr/table.*changelog/, 'missing table error' );
+
+# insert two rows -not- in txn
+my ($artistA, $artistB);
+#$schema->txn_do(sub {
+    $artistA = $schema->resultset('Artist')->create({
+        name => 'Fred Bloggs A',
+    });
+
+    $artistB = $schema->resultset('Artist')->create({
+        name => 'Fred Bloggs B',
+    });
+#});
+
+# create the journal
+$schema->journal_schema_deploy();
+
+# check it is empty
+$count = eval { $schema->_journal_schema->resultset('ChangeLog')->count };
+
+is( $@, '', "no error" );
+is( $count, 0, "count is 0 (chagnelog)" );
+
+# run populate
+$schema->prepopulate_journal();
+
+# check there is only one changeset
+$count = eval { $schema->_journal_schema->resultset('ChangeSet')->count };
+
+is( $@, '', "no error" );
+is( $count, 1, "count is 1 (changeset)" );
+
+# check it contains two inserts
+$count = eval { $schema->_journal_schema->resultset('ChangeLog')->count };
+
+is( $@, '', "no error" );
+is( $count, 2, "count is 2 (changelog)" );
+
+# check audit log has two rows for two inserts
+$count = eval { $schema->_journal_schema->resultset('ArtistAuditLog')->count };
+
+is( $@, '', "no error" );
+is( $count, 2, "count is 2 (auditlog)" );
+
+# now delete a row
+eval {
+    my $deleted = $schema->txn_do(sub {
+        $artistA->delete;
+    });
+};
+
+is( $@, '', "no error from deletion journal (create_id not null)" );
+is( $artistA->in_storage, 0, "row was deleted" );
+
+# check journal log still has two rows
+$count = eval { $schema->_journal_schema->resultset('ArtistAuditLog')->count };
+
+is( $@, '', "no error" );
+is( $count, 2, "count is 2 (auditlog 2)" );
+
+# and that one of them has a delete_id
+$count = eval {
+    $schema->_journal_schema->resultset('ArtistAuditLog')
+        ->search({
+            artistid => $artistA->id,
+            delete_id => { '-not' => undef }
+        })->count;
+};
+    
+is( $@, '', "no error" );
+is( $count, 1, "count is 1 (delete_id)" );
+