The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;
use Test::More;
use Net::Whois::RIPE;
use Net::Whois::Object;

our $LWP;
BEGIN {
    $LWP = do {
        eval {
            require LWP::UserAgent;
        };
        ($@) ? 0 : 1;
    };
}

unless ( $ENV{TEST_MNTNER} && $ENV{TEST_MNTNER_PGPKEY} ) {
    warn(<<'WARNING');

Set TEST_MNTNER, TEST_MNTNER_PGPKEY environment vars for live testing
    TEST_MNTNER being a maintener's nic-hdl in the RIPE test database
    TEST_MNTNER_PGPKEY being the key ID of an key-cert associated with
    the maintainer object
WARNING
    plan skip_all => ' Set environment vars for server testing';
}

unless ($LWP) {
    plan skip_all => 'LWP::UserAgent installation required for update';
}

plan tests => 5;

my $MNTNER = $ENV{TEST_MNTNER};
my $PGPKEY = $ENV{TEST_MNTNER_PGPKEY};

my @lines = <DATA>;
map {s/MNTNER/$MNTNER/} @lines;

my @o      = Net::Whois::Object->new(@lines);
my $person = shift @o;
my $mntner = shift @o;

my $email_before = $person->e_mail()->[0];

my $person_id = $person->syncupdates_create( { pgpkey => $PGPKEY } );
ok($person_id);

my $whois = Net::Whois::RIPE->new( hostname => 'whois-test.ripe.net' );
my $iterator = $whois->query($person_id);

($person) = grep { ( $_->class() eq 'Person' ) and ( $_->nic_hdl eq $person_id ) } Net::Whois::Object->new($iterator);

is_deeply( $person->e_mail(), [$email_before], "Same name from previous" );
my $email_after = $person->e_mail('arhuman2@gmail.com');

$person->syncupdates_update( { pgpkey => $PGPKEY } );

$iterator = $whois->query($person_id);
($person) = grep { ( $_->class() eq 'Person' ) and ( $_->nic_hdl eq $person_id ) } Net::Whois::Object->new($iterator);

is_deeply( $person->e_mail(), $email_after, "Same as set name" );

isa_ok( $person, 'Net::Whois::Object::Person', 'Found a Person' );

$person->syncupdates_delete( { pgpkey => $PGPKEY } );

$whois = Net::Whois::RIPE->new( hostname => 'whois-test.ripe.net' );
$iterator = $whois->query($person_id);

($person) = grep { $_->class() eq 'Response' } Net::Whois::Object->new($iterator);

like( $person->response, qr/ERROR:101:/, 'Deleted Person not found' );

__DATA__
person: Joh Doe
address: 1 Avenue de la Gare
address: 75001 Paris
phone: +33 1 01 01 01 01
e-mail: arhuman@gmail.com
nic-hdl: AUTO-1
mnt-by: MNTNER
changed: arhuman@gmail.com 
source: TEST