use Test::More tests => 34;
use_ok('YAWF::Object::MongoDB');
use_ok('t::lib::Car');
my $first = t::lib::Car->new; # Create a new car
is( ref($first), 't::lib::Car', 'Check first object type' );
is( $first->color('red'), 'red', 'Set first color' );
is( $first->brand('Ferrari'), 'Ferrari', 'Set first brand' );
is( $first->model('Enzo'), 'Enzo', 'Set first model' );
ok( $first->flush, 'Flush first object to database' );
my $second = t::lib::Car->new; # Create a new car
is( ref($second), 't::lib::Car', 'Check second object type' );
is( $second->color('blue'), 'blue', 'Set second color' );
is( $second->brand('Jaguar'), 'Jaguar', 'Set second brand' );
is( $second->model('XF'), 'XF', 'Set second model' );
ok( $second->flush, 'Flush second object to database' );
is( t::lib::Car->new( $first->id )->id, $first->id,
'Get first document by id' );
for ( 'color', 'brand', 'model' ) {
is( t::lib::Car->new( $_ => $first->$_ )->id,
$first->id, 'Get first document by ' . $_ );
}
is( t::lib::Car->new( $second->id )->id,
$second->id, 'Get second document by id' );
for ( 'color', 'brand', 'model' ) {
is( t::lib::Car->new( $_ => $second->$_ )->id,
$second->id, 'Get second document by ' . $_ );
}
my $third = t::lib::Car->new; # Create a new car
is( $third->color('red'), 'red', 'Set third color' );
is( $third->set_column( 'engine', '12V' ), '12V', 'Set third custom key' );
ok( $third->flush, 'Flush third object to database' );
is( t::lib::Car->new( engine => $third->get_column('engine') )->id,
$third->id, 'Get third document by custom key' );
my @list = t::lib::Car->list;
is( scalar(@list), 3, 'Check car list' );
is( t::lib::Car->count, 3, 'Check car count' );
@list = t::lib::Car->list( { color => 'red' } );
is( scalar(@list), 2, 'Check red car count' );
for (@list) {
ok( $_->delete, 'Remove a car' );
}
@list = t::lib::Car->list;
is( scalar(@list), 1, 'Check car list' );
is( t::lib::Car->count, 1, 'Check car count' );
for (@list) {
ok( $_->delete, 'Remove last car' );
}
@list = t::lib::Car->list;
is( scalar(@list), 0, 'Check car list' );
is( t::lib::Car->count, 0, 'Check car count' );
END {
t::lib::Car->_collection->drop;
}