#!/usr/bin/perl use strict; use warnings; use Test::More; BEGIN { plan skip_all => "This test requires DBIx::Class version 0.08009 or higher to be installed" unless eval { require DBIx::Class; die unless $DBIx::Class::VERSION >= 0.08009 }; plan skip_all => "This test requires DBICx::TestDatabase to be installed" unless eval { require DBICx::TestDatabase }; plan tests => 5; } use DBICx::TestDatabase; my $schema = DBICx::TestDatabase->new('Foo::DB'); my $states = $schema->resultset("Workflow::State"); my $init = $states->create({ id => 1 }); my $blah = $states->create({ id => 2 }); my $gorch = $states->create({ id => 3 }); my $tns = $schema->resultset("Workflow::Transition"); my $blah_called = 0; { package Foo::DB::Workflow::Transition::Blah; use Moose; extends qw(Foo::DB::Workflow::Transition); sub apply_body { $blah_called++; return {}, (); } } my $to_blah = $tns->create({ state => $init, to_state => $blah, class => "Blah", }); my $to_gorch = $tns->create({ state => $init, to_state => $gorch, class => "Null", }); my $instances = $schema->resultset("Workflow::Instance"); my $i = $instances->create({ state => $states->find({ id => 1 }) }); # $init my $items = $schema->resultset("Item"); my $item = $items->create({ id => 1, workflow_instance => $i }); is( $blah_called, 0, "blah not called" ); $item->apply_transition($to_blah); is( $blah_called, 1, "blah called" ); my $i2 = $item->workflow_instance; is( $i2->state->id, $blah->id, "workflow instance ID is correct" ); is( $i2->prev->state->id, $init->id, "workflow history" ); is_deeply( [ sort map { $_->id } $instances->all ], [ sort map { $_->id } $i, $i2 ], "instances in DB", );