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

use Test::More 'no_plan';

my $class = 'Business::ISSN';

use_ok( $class, qw(is_valid_checksum) );

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Things that should work
{
my @valid_issns = qw( 0355-4325 1553-667X );

foreach my $issn ( @valid_issns )
	{
	my $obj = $class->new( $issn );
	isa_ok( $obj, $class );
	ok( $obj->is_valid, "ISSN $issn is valid" );
	is( $obj->checksum, substr( $issn, -1, 1 ), "checksum returns right value" );
	is( $obj->as_string, $issn, "as_string matches original" );
	ok( is_valid_checksum( $issn ), "is_valid_checksum returns true for good issn" );
	ok( ! $obj->fix_checksum, "fix_checksum returns false for good issn" );
	}
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Things that shouldn't work at all
{
my @invalid_issns = qw( 0355-4323 abcd pwer-1234 );

foreach my $issn ( @invalid_issns )
	{
	my $obj = $class->new( $issn );
	ok( ! eval { $obj->is_valid }, "ISSN $issn is not valid" );
	ok( ! is_valid_checksum( $issn ), "is_valid_checksum returns false for bad issn" );
	}
}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Things that we can fix
{
my @invalid_issns = (
	[ qw( 0355-4323 0355-4325 ) ],
	[ qw( 1553-6673 1553-667X ) ],	
	);

foreach my $pair ( @invalid_issns )
	{
	my $obj = $class->new( $pair->[0] );
	isa_ok( $obj, $class );
	ok( ! eval { $obj->is_valid }, "ISSN $pair->[0] is not valid" );
	ok( ! defined $obj->as_string, "as_string returns undef before we fix issn" );
	ok( ! is_valid_checksum( $pair->[0] ), "is_valid_checksum returns false for fixable issn" );

	ok( $obj->fix_checksum, "fix_checksum returns true" );
	ok( $obj->is_valid, "ISSN $pair->[1] is now valid" );
	is( $obj->as_string, $pair->[1], "as_string returns fixed issn" );
	}
}