The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*-perl-*-

# $Id: 60_export_object.t,v 1.2 2004/02/26 02:02:29 lachoy Exp $

use strict;
use lib qw( t/ );
use Test::More tests => 15;

do "t/config.pl";

my $ALL =
q|$item = [
  { spops_class => 'ExportObjectTest',
    field_order => [ qw/ myname / ] },
  [q{foo}],
  [q{bar}],
  [q{baz}],
];
|;

my $SOME =
q|$item = [
  { spops_class => 'ExportObjectTest',
    field_order => [ qw/ myname / ] },
  [q{bar}],
];
|;

my $ALL_ID =
q|$item = [
  { spops_class => 'ExportObjectTest',
    field_order => [ qw/ myid myname / ] },
  [q{1}, q{foo}],
  [q{2}, q{bar}],
  [q{3}, q{baz}],
];
|;

my $SOME_ID =
q|$item = [
  { spops_class => 'ExportObjectTest',
    field_order => [ qw/ myid myname / ] },
  [q{2}, q{bar}],
];
|;

{
    my %config = (
      test => {
         class               => 'ExportObjectTest',
         isa                 => [ 'SPOPS::Loopback' ],
         field               => [ qw( myid myname ) ],
         id_field            => 'myid',
      },
    );

    # Create our test class using the loopback

    require_ok( 'SPOPS::Initialize' );

    my $class_init_list = eval { SPOPS::Initialize->process({
                                             config => \%config }) };
    ok( ! $@, "Initialize process run $@" );
    is( $class_init_list->[0], 'ExportObjectTest', 'Object class initialized' );

    eval {
        ExportObjectTest->new({ myid => 1, myname => 'foo' })->save();
        ExportObjectTest->new({ myid => 2, myname => 'bar' })->save();
        ExportObjectTest->new({ myid => 3, myname => 'baz' })->save();
    };
    diag( "Error creating loopback objects: $@" ) if ( $@ );
    ok( ! $@, "Objects to export created" );

    require_ok( 'SPOPS::Export' );

    my ( $exporter, $export_all_data, $export_some_data );
    eval { $exporter = SPOPS::Export->new(
                         'object', { object_class => 'ExportObjectTest' } ) };
    ok( ! $@, "Exporter created" );

    $export_all_data  = eval { $exporter->run };
    ok( ! $@, "Export all data (no ID)" );
    is( $export_all_data, $ALL, "Export all data matches (no ID)" );

    $exporter->where( "myname = 'bar'" );
    $export_some_data = eval { $exporter->run };
    ok( ! $@, "Export some data (no ID)" );
    is( $export_some_data, $SOME, "Export some data matches (no ID)" );

    my ( $exporter_id, $export_all_id_data, $export_some_id_data );
    eval { $exporter_id = SPOPS::Export->new(
                              'object', { object_class => 'ExportObjectTest',
                                          include_id   => 1 } ) };
    ok( ! $@, "Exporter including ID created" );

    $export_all_id_data = eval { $exporter_id->run };
    ok( ! $@, "Export all data (with ID)" );
    is( $export_all_id_data, $ALL_ID, "Export all data matches (with ID)" );

    $exporter_id->where( "myname = 'bar'" );
    $export_some_id_data = eval { $exporter_id->run };
    ok( ! $@, "Export some data (with ID)" );
    is( $export_some_id_data, $SOME_ID, "Export some data matches (with ID)" );
}