L3TDE-IRC/t/00000001-model.t

93 lines
2.6 KiB
Perl

#!/usr/bin/env perl
use v5.34.1;
use strict;
use warnings;
use Data::Dumper;
use Test::Most tests => 9;
use JSON;
use L3TDE::Test::DB;
BEGIN {
use_ok 'L3TDE::Model';
}
package L3TDE::Test::1::Model {
use v5.34.1;
use strict;
use warnings;
use Moo;
with 'L3TDE::Model';
sub table { 'dummy_model' }
sub not_defaulted_fields { [qw/dummy1 dummy2 dummy3/] }
sub defaulted_fields { [qw/id/] }
sub jsonb_fields { [qw/data/] }
sub find_fields { [qw/dummy2 id/] }
sub id_fields { [qw/id/] }
has [qw/dummy1 dummy2 dummy3 id data/] => (
is => 'rw'
);
}
{
my $test_db = L3TDE::Test::DB->mock;
my $dbh = $test_db->dbh;
my $result = {
id => 1,
dummy1 => 'foo',
dummy2 => 'bar',
dummy3 => 'foobar',
data => encode_json( { foobar => 'json' } ),
};
my @keys = sort { $a cmp $b } keys %$result;
$dbh->{mock_add_resultset} = [ [@keys], [ $result->@{@keys} ] ];
my $dummy = L3TDE::Test::1::Model->create(
dummy1 => 'foo',
dummy2 => 'bar',
dummy3 => 'foobar',
data => { foobar => 'json' }
);
ok $dummy->isa('L3TDE::Test::1::Model'), 'This dummy is made of dummy';
my $history = $dbh->{mock_all_history};
is scalar @$history, 1, 'A create statement executed';
my $st = $history->[0];
is $st->statement,
'INSERT INTO dummy_model (dummy1,dummy2,dummy3,data) VALUES (?,?,?,?::jsonb) RETURNING dummy1,dummy2,dummy3,data,id;',
'Expected create query matches';
is_deeply [ 'foo', 'bar', 'foobar', '{"foobar":"json"}' ],
$st->bound_params, 'Bound create params match';
}
{
my $test_db = L3TDE::Test::DB->mock;
my $dbh = $test_db->dbh;
my $result = {
id => 1,
dummy1 => 'hola',
dummy2 => 'bar',
dummy3 => 'foobar',
data => encode_json( { foobar => 'json' } ),
};
my @keys = sort { $a cmp $b } keys %$result;
$dbh->{mock_add_resultset} = [ [@keys], [ $result->@{@keys} ] ];
my $dummy = L3TDE::Test::1::Model->new(%$result);
$dummy->dummy1('hola');
$dummy = $dummy->update([qw/dummy1/]);
ok $dummy->isa('L3TDE::Test::1::Model'), 'This dummy is made of dummy';
my $history = $dbh->{mock_all_history};
is scalar @$history, 1, 'A update statement executed';
my $st = $history->[0];
is $st->statement,
'UPDATE dummy_model SET dummy1=? WHERE id=? RETURNING dummy1,dummy2,dummy3,data,id;',
'Expected update query matches';
is_deeply [ 'hola', '1' ],
$st->bound_params, 'Bound update params match';
}