The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# Unit tests for various things that have identifiers

use strict;
BEGIN {
	$|  = 1;
	$^W = 1;
}

use Test::More tests => 18;
use Data::UUID ();
use PITA::XML  ();

my $md5sum = '0123456789abcdef0123456789abcdef';

sub dies_like {
	my $code   = shift;
	my $regexp = shift;
	eval { &$code() };
	like( $@, $regexp, $_[0] || 'Code dies like expected' );
}

my $uuid = Data::UUID->new;
isa_ok( $uuid, 'Data::UUID' );





#####################################################################
# Basic tests

# Create a normal request
my $dist = PITA::XML::Request->new(
	scheme   => 'perl5',
	distname => 'Foo-Bar',
	file     => PITA::XML::File->new(
		filename => 'Foo-Bar-0.01.tar.gz',
		digest   => 'MD5.' . $md5sum,
	),
);
isa_ok( $dist, 'PITA::XML::Request' );
is( $dist->distname, 'Foo-Bar', '->distname matches expected'             );
is( $dist->file->filename, 'Foo-Bar-0.01.tar.gz', '->filename matches expected' );
is( $dist->file->digest->digest, lc($md5sum), '->md5sum is normalised as expected'   );
is( $dist->authority, '', '->authority returns "" as expected'            );
is( $dist->authpath,  '', '->authpath returns "" as expected'             );

# Create a request with an id
my $id = $uuid->to_string( $uuid->create );
my $distid = PITA::XML::Request->new(
	id       => $id,
	scheme   => 'perl5',
	distname => 'Foo-Bar',
	file     => PITA::XML::File->new(
		filename => 'Foo-Bar-0.01.tar.gz',
		digest   => 'MD5.' . $md5sum,
	),
);
isa_ok( $distid, 'PITA::XML::Request' );
is( $distid->id,       $id,       '->id returns as expected'                );
is( $distid->distname, 'Foo-Bar', '->distname matches expected'             );
is( $distid->file->filename, 'Foo-Bar-0.01.tar.gz', '->filename matches expected' );
is( $distid->file->digest->digest,    lc($md5sum), '->md5sum is normalised as expected'   );
is( $distid->authority, '', '->authority returns "" as expected'            );
is( $distid->authpath,  '', '->authpath returns "" as expected'             );

# Write out to XML
my $output = '';
ok( $distid->write( \$output ), '->write returns ok' );
my $expected = <<"END_XML";
<?xml version='1.0' encoding='UTF-8'?>
<request xmlns='http://ali.as/xml/schema/pita-xml/$PITA::XML::Request::VERSION' id='$id'>
<scheme>perl5</scheme>
<distname>Foo-Bar</distname>
<file>
<filename>Foo-Bar-0.01.tar.gz</filename>
<digest>MD5.0123456789abcdef0123456789abcdef</digest>
</file>
</request>
END_XML
chomp $expected;
$expected =~ s/\n//g;
is( $output, $expected, 'Wrote XML with id in it ok' );

# Parse it back in
my $distid2 = PITA::XML::Request->read( \$output );
isa_ok( $distid2, 'PITA::XML::Request' );
is_deeply( $distid2, $distid, 'Request with id roundtrips ok' );