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 'no_plan';
use utf8;

use lib 't/lib';
BEGIN { use_ok 'I18NTest' }

ok ( my $schema = I18NTest->new('I18NTest::SchemaAuto'), 'Create a schema object' );
isa_ok ( $schema, 'I18NTest::SchemaAuto');

ok ( my $item_rs = $schema->resultset('Item'), 'Get Item resultset' );
ok ( my $foo_rs = $schema->resultset('Foo'), 'Get Foo resultset' );

# has_many()
{
    diag('Testing has_many()');
    ok ( my $item = $item_rs->create({
            name  => 'Diego Maradona',
            string => 'futbol futbol futbol',
            text => 'santa maradona... la la la',
            language => 'es',
        }), 'Create an item' 
    );

    ok ( my $foo = $item->add_to_foos({
            string => 'mandanga!',
            text   => 'le gusta la mandanga...'
        }), 'Add to related has_many() using add_to_relation' 
    );

    is ( $foo->language, 'es', 'Related item has language propagated' );
    is ( $foo->string, 'mandanga!', 'text on related is ok' );
}
{
    ok ( my $item = $item_rs->search({ language => 'es' })->first(), 'Retrieve the item with language' );
    ok ( my $foo = $item->foos->first(), 'Retrieve the related item from the first one' );
    is ( $foo->language, 'es', 'Related item has language propagated' );
    is ( $foo->string, 'mandanga!', 'text on related is ok' );
}
{
    diag('Testing belongs_to()');

    ok ( my $foo = $foo_rs->search({ language => 'es' })->first(), 'Retrieve the first related item with language' );
    ok ( my $item = $foo->item, 'getting the belongs_to() item from related' );
    is ( $item->language, 'es', 'Language is propagated' )
}

# many_to_many
{
    diag('Testing many_to_many()');

    ok ( my $item = $item_rs->search({ language => 'es' })->first(), 'Retrieve the item with language' );

    ok ( my $bar = $item->add_to_bars({
            string   => 'pelota!',
            text     => 'le gusta la pelota...',
        }), 'Create new related using add_to_related'
    );
    is ( $bar->language, 'es', 'Related item has language propagated' );
    is ( $bar->string, 'pelota!', 'text on related is ok' );
    
    ok ( $bar->language('en'), "Set language to 'en'" ); 
    ok ( $bar->string('ball!'), 'set string' );
    ok ( $bar->update, 'Call update' );

    ok ( $bar = $schema->resultset('Bar')->create({
            string   => 'futbol!',
            text     => 'le gusta el futbol...',
            language => 'es'
        }), 'Create related to add to many_to_many later'
    );
    ok ( $item->add_to_bars($bar), 'Add the row using add_to_relation(obj)' );
}
{
    ok ( my $item = $item_rs->search({ language => 'es' })->first(), 'Retrieve the item with language' );
    ok ( my $bar = $item->bars->first(), 'Retrieve the related item from the first one' );
    is ( $bar->language, 'es', 'Related item has language propagated' );
    is ( $bar->string, 'pelota!', 'text on related is ok' );
}
{
    ok ( my $item = $item_rs->search({ language => 'es' })->first(), 'Retrieve the item with language' );
    my $count = 0;
    for my $bar ( $item->bars->all ) {
        $count++;
        is ( $bar->language, 'es', "Related item($count) has language propagated" );
    }
}

{
    ok ( my $item = $item_rs->find(1), 'Retrieve the item with find()' );
    is ( $item->id, 1, 'Item is ok' );
}