#!/usr/bin/perl package KiokuDB::Test::Fixture::GIN::Class; use Moose; use Test::More; use Test::Moose; use Scalar::Util qw(refaddr); use Search::GIN::Query::Class; use namespace::clean -except => 'meta'; extends qw(KiokuDB::Test::Fixture::Small); use constant required_backend_roles => qw(Clear Scan Query::GIN); before populate => sub { my $self = shift; $self->backend->clear; }; sub verify { my $self = shift; my $q_person = Search::GIN::Query::Class->new( class => "KiokuDB::Test::Person" ); my $q_employee = Search::GIN::Query::Class->new( class => "KiokuDB::Test::Employee" ); $self->txn_lives(sub { my @objs = $self->root_set->all; my $people = $self->search($q_person); my $employees = $self->search($q_employee); does_ok($_, "Data::Stream::Bulk") for ( $people, $employees ); my @people = $people->all; my @employees = $employees->all; is_deeply( [ sort map { refaddr($_) } @employees ], [ refaddr($self->lookup_ok($self->joe)) ], "employees", ); is_deeply( [ sort map { refaddr($_) } @people ], [ sort map { refaddr($_) } @objs, @{ $self->lookup_ok($self->joe)->parents } ], "set of all people", ); }); $self->no_live_objects; $self->txn_lives(sub { my ( $joe, $mum, $oscar ) = sort { $a->name cmp $b->name } $self->search($q_person)->all; is( $joe->name, "joe", "loaded first object" ); is( $mum->name, "mum", "loaded second object" ); is( $oscar->name, "oscar", "loaded third object" ); is( $joe->parents->[0], $mum, "interrelated objects loaded in one graph" ); }); $self->no_live_objects; } __PACKAGE__->meta->make_immutable; __PACKAGE__ __END__