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

use strict;
use warnings;

use Test::FailWarnings -allow_deps => 1;
use Test::More;
use Test::Type;

use Email::ExactTarget;
use Email::ExactTarget::Subscriber;


eval 'use ExactTargetConfig';
$@
	? plan( skip_all => 'Local connection information for ExactTarget required to run tests.' )
	: plan( tests => 3 );


# Username and password are mandatory arguments for Email::ExactTarget->new().
subtest(
	'Verify arguments that will be passed to new().',
	sub
	{
		plan( tests => 4 );

		can_ok(
			'ExactTargetConfig',
			'new',
		);
		my $config = ExactTargetConfig->new();

		ok_hashref(
			$config,
			name => 'Arguments to pass to new()',
		);
		like(
			$config->{'username'},
			qr/\w/,
			'The username is defined.',
		);
		like(
			$config->{'password'},
			qr/\w/,
			'The password is defined.',
		);
	}
);

# Verify the 'All Subscribers' list ID.
subtest(
	'Verify the "All Subscribers" list ID.',
	sub
	{
		plan( tests => 2 );

		can_ok(
			'ExactTargetConfig',
			'get_all_subscribers_list_id',
		);
		my $all_subscribers_list_id = ExactTargetConfig->get_all_subscribers_list_id();

		like(
			$all_subscribers_list_id,
			qr/^\d+$/,
			'The "All Subscribers" list ID is an integer.',
		);
	}
);

# Verify the test list IDs.
subtest(
	'Verify the test list IDs that will be used to test adding/removing subscribers to lists.',
	sub
	{
		plan( tests => 4 );

		can_ok(
			'ExactTargetConfig',
			'get_test_list_ids',
		);
		my $list_ids = ExactTargetConfig->get_test_list_ids();

		ok_arrayref(
			$list_ids,
			 name => '$list_ids',
		);
		$list_ids ||= [];

		ok(
			scalar( @$list_ids ) >= 2,
			'At least 2 test lists are defined in the "test_lists" key of the config',
		);

		subtest(
			'Verify that all the test list IDs are integers.',
			sub
			{
				plan( tests => scalar( @$list_ids ) );

				foreach my $list_id ( @$list_ids )
				{
					like(
						$list_id,
						qr/^\d+$/,
						'The list ID is an integer.',
					);
				}
			}
		);
	}
);