DBIx-Class-BatchUpdate

 view release on metacpan or  search on metacpan

t/dbix-class-batchupdate-update.t  view on Meta::CPAN

use strict;
use warnings;
use Test::More;
use Test::Exception;
use Test::Differences;
use Test::MockObject;

use Storable qw/ thaw /;

use DBIx::Class::BatchUpdate::Update;



my $empty_batch = DBIx::Class::BatchUpdate::Update->new({ rows => [] });



subtest batch_key => sub {
    my $key_value = { id => 3, price => 42, author_id => undef };
    my $md5 = qr/[^,]+/;
    eq_or_diff(
        thaw( $empty_batch->batch_key($key_value) ),
        $key_value,
        "Correct batch_key (as far as we can tell)",
    );
};




subtest "Empty rows" => sub {
    is_deeply(
        $empty_batch->batches,
        [],
        "Empty rows, no batches",
    );
};

my $update_call_count = 0;
my $search_args = [];
my $resultset = Test::MockObject->new
    ->mock(
        search => sub {
            my $self = shift;
            my ($args) = @_;
            push(@$search_args, $args);
            Test::MockObject->new
                ->mock(update => sub { $update_call_count++ }),
            },
    );

sub get_row {
    my ($row_id, $key_value, $pk_columns) = @_;
    $pk_columns //= [ "pkid" ], # Non standard PK

        return Test::MockObject->new
        ->set_always(id => $row_id)
        ->mock(get_dirty_columns => sub { return %$key_value })
        ->mock(
            result_source => sub {
                Test::MockObject->new
                    ->set_always(resultset => $resultset)
                    ->mock(primary_columns => sub { @$pk_columns })
                },
        )



( run in 1.147 second using v1.01-cache-2.11-cpan-39bf76dae61 )