#!/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'; }