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 tests => 10;

use VS::RuleEngine::Declare;

use lib 't/lib';

my $engine = engine {
    defaults "d1" => {
        foo => 1,
    };
    
    defaults "d2" => {
        bar => 2,
    };
    
    action "a1" => instanceof "Test::VS::RuleEngine::Action" => with_defaults "d1";
    action "a2" => instanceof "Test::VS::RuleEngine::Action" => with_defaults [qw(d1 d2)];
};

ok($engine->has_defaults("d1"));
my $defaults = $engine->get_defaults("d1");
ok(defined $defaults);
is_deeply($defaults, { foo => 1 });

ok($engine->has_defaults("d2"));
$defaults = $engine->get_defaults("d2");
ok(defined $defaults);
is_deeply($defaults, { bar => 2 });

ok($engine->has_action("a1"));
my $action = $engine->_get_action("a1")->instantiate($engine);
is_deeply($action, { foo => 1 });

ok($engine->has_action("a2"));
$action = $engine->_get_action("a2")->instantiate($engine);
is_deeply($action, { foo => 1, bar => 2 });