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

# t/06_image.t - check module for inline image handling

use Test::Most tests => 22 + 1;
use Test::NoWarnings;

use Mail::Builder;
use Path::Class::File;

my $pc_file = Path::Class::File->new('t/testfile.gif');

my $image1 = Mail::Builder::Image->new('t/testfile.gif');
my $image2 = Mail::Builder::Image->new({ file => $pc_file });
my $image3 = Mail::Builder::Image->new({ file => $pc_file->openr });
my $image4 = Mail::Builder::Image->new('t/testfile.gif','test4','image/gif');

isa_ok ($image1, 'Mail::Builder::Image');
isa_ok ($image2, 'Mail::Builder::Image');
isa_ok ($image3, 'Mail::Builder::Image');
isa_ok ($image4, 'Mail::Builder::Image');

like($image1->filename,qr't[\\\/]testfile\.gif$','Filename ok');
like($image2->filename,qr't[\\\/]testfile\.gif$','Filename ok');
is($image3->filename,undef,'Filename missing ok');
like($image4->filename,qr't[\\\/]testfile\.gif$','Filename missing ok');

isa_ok($image1->filename,'Path::Class::File');
isa_ok($image2->filename,'Path::Class::File');

is($image1->mimetype,'image/gif','MIME type ok');
is($image2->mimetype,'image/gif','MIME type ok');
is($image3->mimetype,'image/gif','Auto MIME type ok');
is($image4->mimetype,'image/gif','Set MIME type ok');

$image3->mimetype('image/png');
is($image3->mimetype,'image/png','MIME type ok');
throws_ok { $image4->mimetype('text/plain') } qr/pass the type constraint because: 'text\/plain' is not a valid image MIME-type/, 'Broken mimetype not accepted';

throws_ok { $image3->serialize } qr/Could not determine the image id automatically/,'Id check works';
$image3->id('test3');
my $serialized_image3 = $image3->serialize;
isa_ok($serialized_image3,'MIME::Entity');
is($serialized_image3->mime_type,'image/png','MIME type set');
is($serialized_image3->head->get('Content-Disposition'),qq[inline\n],'Content-Disposition set');
is($serialized_image3->head->get('Content-Transfer-Encoding'),qq[base64\n],'Encoding set');
like($serialized_image3->stringify,qr/R0lGODlhEAAFAIAAAP\/\/\/wAAACwAAAAAEAAFAAACEoxhAXiJq/,'Content encoded');