The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;

use Test::More tests => 8;
use Test::DBUnit connection_name => 'test';

my $class;

BEGIN {
    $class = 'Persistence::Entity';
    use_ok($class, ':all');
    use_ok('Persistence::Entity::Manager');
}

my $photo_entity = $class->new(
    name    => 'photo',
    alias   => 'ph',
    primary_key => ['id'],
    columns => [
        sql_column(name => 'id'),
        sql_column(name => 'name', unique => 1),
    ],
    lobs => [
        sql_lob(name => 'blob_content', size_column => 'doc_size'),
    ]
);

isa_ok($photo_entity, $class);
{
    my $entity_manager = Persistence::Entity::Manager->new(name => 'my_manager', connection_name => 'test');
    $entity_manager->add_entities($photo_entity);
}


SKIP: {
    
    ::skip('missing env varaibles DB_TEST_CONNECTION, DB_TEST_USERNAME DB_TEST_PASSWORD', 5)
      unless $ENV{DB_TEST_CONNECTION};

    my $connection = DBIx::Connection->new(
      name     => 'test',
      dsn      => $ENV{DB_TEST_CONNECTION},
      username => $ENV{DB_TEST_USERNAME},
      password => $ENV{DB_TEST_PASSWORD},
    ); 

    reset_schema_ok("t/sql/". $connection->dbms_name . "/create_schema.sql");
    {
        xml_dataset_ok('init');
        my $lob = _load_file('t/bin/data1.bin');
        $photo_entity->insert(id => "1", name => "photo1", blob_content => $lob);
        expected_xml_dataset_ok('insert');
    
        $photo_entity->update({name => "photo1", blob_content => undef}, {id => 1,});
        $photo_entity->update({name => "photo0", blob_content => $lob}, {id => 0});
        expected_xml_dataset_ok('update');
    }
    {
        my $lob = _load_file('t/bin/data2.bin');
        my $blob = $photo_entity->fetch_lob('blob_content', {id => 10});
        is($blob, $lob, 'should fetch lob');
    }
}

sub _load_file {
    my ($file) = @_;
    open my $fh, '<', $file
        or die "can't open file $file";
    local $/ = undef;
    my $result = <$fh>;
    close $fh;
    $result;
}