The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More 'no_plan';

use Class::Workflow;

use ok "Class::Workflow::Util::Delta";

{
	package MyInstance;
	use Moose;

	extends qw/Class::Workflow::Instance::Simple/;

	has foo => (
		isa => "Str",
		is  => "ro",
		required => 1,
	);

	has bar => (
		isa => "ArrayRef",
		is  => "ro",
		required => 1,
	);
}

my $w = Class::Workflow->new;

$w->instance_class("MyInstance");

$w->state(
	name => "i",
	transitions => [qw/a/],
);

$w->initial_state("i");

my $t = $w->transition(
	name => "a",
	to_state => "j",
	set_fields => { foo => "oink" },
);

my $x = $w->new_instance(
	foo => "",
	bar => [ ],
);

my $y = $t->apply( $x );

my $d = Class::Workflow::Util::Delta->new(
	from => $x,
	to   => $y,
);

is_deeply( scalar($d->changes), { foo => { from => "", to => "oink" } }, "computed delta" );