acion infrastructure
[scpubgit/DKit.git] / t / basic_rule.t
index 01a5e99..95d2666 100644 (file)
@@ -1,6 +1,7 @@
 use strictures 1;
 use Test::More;
 use DX::Solver;
+use DX::SetOver;
 
 my @servers = qw(
   kitty.scsys.co.uk
@@ -30,19 +31,29 @@ my %shells = (
 );
 
 my $solver = DX::Solver->new(
-  facts => { servers => \%servers, shells => \%shells }
+  facts => {
+    servers => DX::SetOver->new(
+      over => sub { $_[0]->{name} }, values => \%servers,
+    ),
+    shells => DX::SetOver->new(
+      over => sub { $_[0]->{name} }, values => \%shells,
+    ),
+  }
 );
 
-$solver->add_rule(server => [ 'S' ] => [ member_of => qw(S servers) ]);
+$solver->add_rule(
+  server => [ 'S' ] => [ member_of => S => [ value => 'servers' ] ]
+);
 
-my $s = $solver->query([ 'S' ], [ call => server => 'S' ]);
+my $s = $solver->query([ 'S' ], [ server => 'S' ]);
 
-is_deeply([ map $_->{S}{name}, $s->results ], [ sort @servers ]);
+is_deeply([ map $_->value_for('S')->{name}, $s->results ], [ sort @servers ]);
 
-$solver->add_rule(shell => [ 'S' ] => [ member_of => qw(S shells) ])
+$solver->add_rule(
+  shell => [ 'S' ] => [ member_of => S => [ value => 'shells' ] ])
        ->add_rule(name => [ qw(T N) ],
                     [ constrain => [ qw(T N) ],
-                      sub { ::Dwarn(\@_); $_[0]->{name} eq $_[1] } ]
+                      sub { $_[0]->{name} eq $_[1] } ]
                  )
        ->add_rule(shell_installed_on => [ qw(Shell Srv) ],
                     [ constrain => [ qw(Shell Srv) ],
@@ -51,12 +62,15 @@ $solver->add_rule(shell => [ 'S' ] => [ member_of => qw(S shells) ])
 
 $s = $solver->query(
        [ qw(Shell Srv) ],
-       [ call => shell => 'Shell' ],
-       [ call => name => 'Shell', [ value => 'bash' ] ],
-       [ call => server => 'Srv' ],
-       [ call => shell_installed_on => qw(Shell Srv) ],
+       [ shell => 'Shell' ],
+       [ name => 'Shell', [ value => 'bash' ] ],
+       [ server => 'Srv' ],
+       [ shell_installed_on => qw(Shell Srv) ],
      );
 
-::Dwarn($s->results);
+is_deeply(
+  [ sort map $_->value_for('Srv')->{name}, $s->results ],
+  [ qw(joe.example.com kitty.scsys.co.uk) ]
+);
 
 done_testing;