{
has
bson_codec
=> (
is
=>
'ro'
,
required
=> 1
);
with
qw/
MongoDB::Role::_UpdatePreEncoder
/
;
}
my
$test_lib
= Test::Local::MongoDB->new(
bson_codec
=> BSON->new );
my
$orig_doc
=
$test_lib
->bson_codec->encode_one( Tie::IxHash->new(
_id
=> 12,
1234
=> 314159,
1235
=> 300
) );
my
$orig_doc_bson
= BSON::Raw->new(
bson
=>
$orig_doc
);
subtest
"pre-encode insert"
=>
sub
{
my
$insert_doc
=
$test_lib
->_pre_encode_insert(
MAX_BSON_WIRE_SIZE,
$orig_doc_bson
,
'.'
);
is(
$insert_doc
->bson,
$orig_doc_bson
->bson);
is(
$insert_doc
->metadata->{_id},12);
my
$orig_doc_no_key
=
$test_lib
->bson_codec->encode_one( Tie::IxHash->new(
"notakey"
=> 12,
1234
=> 314159,
1235
=> 300
) );
my
$orig_doc_bson_no_key
= BSON::Raw->new(
bson
=>
$orig_doc_no_key
);
my
$insert_doc_no_key
=
$test_lib
->_pre_encode_insert(
MAX_BSON_WIRE_SIZE,
$orig_doc_bson_no_key
,
'.'
);
ok(
exists
$insert_doc_no_key
->metadata->{_id});
isa_ok(
$insert_doc_no_key
->metadata->{_id},
"BSON::OID"
);
};
subtest
"pre-encode update"
=>
sub
{
my
$orig_doc_update
= {
'$set'
=> {
1235
=> 999
}
};
my
$update_doc
=
$test_lib
->_pre_encode_update(
MAX_BSON_WIRE_SIZE,
$orig_doc_update
,
0
);
is_deeply(
$orig_doc_update
,
$test_lib
->bson_codec->decode_one(
$update_doc
->bson));
};
done_testing;