The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use lib 't/lib';
use Test::Monitis tests => 20, live => 1;

note 'Action addContact (contacts->add)';

my $response = api->contacts->add(
    group       => 'test group',
    firstName   => 'Jon',
    lastName    => 'Doe',
    account     => '3153473',
    contactType => '3',            # ICQ
    timezone    => '-300'
);

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status}, 'ok', 'status ok';
like $response->{data}{contactId}, qr/^\d+$/, 'API returned contact id';
like $response->{data}{confirmationKey}, qr/^\d+$/,
  'API returned confirmation key';

my $contact_id       = $response->{data}{contactId};
my $confirmation_key = $response->{data}{confirmationKey};

note 'Action confirmContact (contacts->confirm)';

$response = api->contacts->edit(
    contactId => $contact_id,
    lastName  => 'Smith'
);

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status}, 'ok', 'status ok';

note 'Action editContact (contacts->edit)';

$response = api->contacts->edit(
    contactId => "$contact_id",
    firstName => 'John',
);

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status}, 'ok', 'status ok';

note 'Action activateContact (contacts->activate)';

$response = api->contacts->activate(contactId => $contact_id);

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status}, 'ok', 'status ok';

note 'Action deactivateContact (contacts->deactivate)';

$response = api->contacts->deactivate(contactId => $contact_id);

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status}, 'ok', 'status ok';

note 'Action contactsList';

$response = api->contacts->get;

isa_ok $response, 'ARRAY', 'JSON response ok';
my ($exists) = grep { $_->{contactId} == $contact_id } @{$response};
ok $exists, 'Contact exists';

$contact_id ||= $response->[0]->{contactId};

note 'Action contactGroupList';

$response = api->contacts->get_groups;

isa_ok $response, 'ARRAY', 'JSON response ok';

note 'Action recentAlerts';

$response = api->contacts->get_recent_alerts;

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status},   'ok',    'status ok';
isa_ok $response->{data}, 'ARRAY', 'response data ok';

note 'Action deleteContact (contact->delete)';

$response = api->contacts->delete(contactId => $contact_id);

isa_ok $response, 'HASH', 'JSON response ok';
is $response->{status}, 'ok', 'status ok';