=head1 NAME

Test::Mock::MongoDB - mock module for MongoDB class.

=head1 SYNOPSIS

Mock all constructors by default:

    use Test::Mock::MongoDB qw( any );

    my $mock         = Test::Mock::MongoDB->new;
    my $m_client     = $mock->get_client;
    my $m_database   = $mock->get_database;
    my $m_collection = $mock->get_collection;
    my $m_cursor     = $mock->get_cursor;

    my $db = $client->get_database('foo');
    my $collection = $db->get_collection('bar');

    $m_collection->method(insert => { name => any })->callback(
        sub { 42 }
    );
    print $collection->insert({ name => 'cono'}); # 42

Or you can leave default MongoDB behaviour by skipping init:

    my $mock = Test::Mock::MongoDB->new(skip_init => 'all');

    $mock->get_collection->method(find_one => { name => 'ivan'})->callback(
        sub {
            return { name => 'cono'};
        }
    );

    my $doc = $collection->find_one({ name => 'ivan'}); # { name => 'cono' }

=head1 DESCRIPTION

Current module mocks MongoDB class. Can be run in two modes:

=over 8

=item overrides constructors (does not need real connection)

=item do not override anything by default

=back

These modes controlled by: C<skip_init> parameter.

=head1 METHODS

=head2 init()

This method invoked from constructor C<new()> in base class: L<Test::Mock::Signature>. Current method implement logic of C<skip_init> parameter passed into constructor C<new()>.

C<skip_init> parameter can be:

=over 8

=item client - skip init of L<Test::Mock::MongoDB::MongoClient>

=item database - skip init of L<Test::Mock::MongoDB::Database>

=item collection - skip init of L<Test::Mock::MongoDB::Collection>

=item cursor - skip init of L<Test::Mock::MongoDB::Cursor>

=item all - skips all init

=back

e.g.:
    $mock = Test::Mock::MongoDB->new( skip_init => 'client' );

or

    $mock = Test::Mock::MongoDB->new( skip_init => 'all' );

or

    $mock = Test::Mock::MongoDB->new( skip_init => [ qw| client database | ] );

=head2 get_client() : L<Test::Mock::MongoDB::MongoClient>

Returns object of class L<Test::Mock::MongoDB::MongoClient>.

=head2 get_database() : L<Test::Mock::MongoDB::Database>

Returns object of class L<Test::Mock::MongoDB::Database>.

=head2 get_collection() : L<Test::Mock::MongoDB::Collection>

Returns object of class L<Test::Mock::MongoDB::Collection>.

=head2 get_cursor() : L<Test::Mock::MongoDB::Cursor>

Returns object of class L<Test::Mock::MongoDB::Cursor>.

=head1 AUTHOR

cono E<lt>cono@cpan.orgE<gt>

=head1 COPYRIGHT

Copyright 2014 - cono

=head1 LICENSE

Artistic v2.0

=head1 SEE ALSO

L<Test::Mock::Signature>, L<Data::Pattern::Compare>