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

use strict;
use Test::More tests => 5;
use Net::CampaignMonitor;
use Params::Util qw{_STRING};

my $api_key = '';
my $cm;

if ( Params::Util::_STRING($ENV{'CAMPAIGN_MONITOR_API_KEY'}) ) {
	
	$api_key = $ENV{'CAMPAIGN_MONITOR_API_KEY'};
	
	$cm = Net::CampaignMonitor->new({
			secure  => 1, 
			api_key => $api_key,
		  });
}

SKIP: {
	skip 'Invalid API Key supplied', 5 if $api_key eq '';

	my $client_id = $cm->account_clients()->{response}->[0]->{ClientID};
	my $list_id   = $cm->client_lists($client_id)->{response}->[0]->{ListID};

	my %subscriber = (
		  'Resubscribe'  => 'true',
		  'CustomFields' => [
				      {
					'Value' => 'http://example.com',
					'Key'   => 'website'
				      },
				      {
					'Value' => 'magic',
					'Key'   => 'interests'
				      },
				      {
					'Value' => 'romantic walks',
					'Key'   => 'interests'
				      }
				    ],
		  'Name'         => 'New Subscriber',
		  'EmailAddress' => 'subscriber@example.com',
		  'listid'       => $list_id,
	);

	my %new_subscribers = (
	  'Subscribers' => [
			   {
			     'CustomFields' => [
				 {
				   'Value' => 'http://example.com',
				   'Key' => 'website'
				 },
				 {
				   'Value' => 'magic',
				   'Key' => 'interests'
				 },
				 {
				   'Value' => 'romantic walks',
				   'Key' => 'interests'
				 }
			       ],
			     'Name' => 'New Subscriber One',
			     'EmailAddress' => 'subscriber1@example.com'
			   },
			   {
			     'Name' => 'New Subscriber Two',
			     'EmailAddress' => 'subscriber2@example.com'
			   },
			   {
			     'Name' => 'New Subscriber Three',
			     'EmailAddress' => 'subscriber3@example.com'
			   }
			 ],
	  'Resubscribe' => 'true',
	  'listid'       => $list_id,
	);

	my %existing_subscriber = (
		'email'  => 'subscriber@example.com',
		'listid' => $list_id,
	);

	my %existing_subscriber2 = (
		'email'  => 'subscriber@example.com',
		'listid' => $list_id,
	);

	my %remove_subscriber = (
		'EmailAddress'  => 'subscriber@example.com',
		'listid'        => $list_id,
	);

	ok( $cm->subscribers(%subscriber)->{code} eq '201', 'Subscriber created' );
	ok( $cm->subscribers_import(%new_subscribers)->{code} eq '201', 'Subscribers created' );
	ok( $cm->subscribers(%existing_subscriber)->{code} eq '200', 'Got subscriber' );
	ok( $cm->subscribers_history(%existing_subscriber2)->{code} eq '200', 'Got subscriber history' );
	ok( $cm->subscribers_unsubscribe(%remove_subscriber)->{code} eq '200', 'Unsubscribed subscriber' );
}