The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use DateTime;

use lib 't/lib';
use MongooseT; # this connects to the db for me
my $db = db;
$db->run_command({ drop=>'person' }); 
my $now = DateTime->now;

{
package Person;
use Moose;
with 'Mongoose::Document';

has 'name' => ( is=>'rw', isa=>'Str', required=>1, traits=>['Binary'], column=>'aaaa' );
has 'age' => ( is=>'rw', isa=>'Int', default=>40 );
has 'salary' => ( is=>'rw', isa=>'Int', traits=>['DoNotMongoSerialize'] );
has 'date' => ( is=>'rw', isa=>'DateTime', default=>sub{$now} );
has 'date_raw' => ( is=>'rw', isa=>'DateTime', traits=>['Raw'] , default=>sub{$now} );
}

package main;
{
	my $jay = Person->new( name => "Jay", salary=>300 );
	my $id = $jay->save;
	is( ref($id), 'MongoDB::OID', 'created, id defined' );
}
{
	my $jay = Person->find_one({ name=>'Jay' });
	ok defined( $jay->age ), 'found ok';
	ok !defined( $jay->salary ), 'donotserialize';
	is ref( $jay->date ), 'DateTime', 'dt inflated';
	is ref( $jay->date_raw ), 'DateTime', 'raw inflated';
	is $jay->date->hour, $jay->date_raw->hour, 'expanded dt hour equally';
}
{
	my $jay = Person->collection->find_one({ name=>'Jay' });
	ok !defined( $jay->{salary} ), 'donotserialize mongo ok';
}

done_testing;