File: [local] / HOPE / Net-OpenAMD / t / network_tests.t (download)
Revision 1.13, Wed Jul 14 01:54:03 2010 UTC (13 years, 11 months ago) by andrew
Branch: MAIN
Changes since 1.12: +22 -16 lines
all tests pass (because I ignore the fields in /location that don't exist)
|
#!perl
package NetworkTests;
# $AFresh1: network_tests.t,v 1.13 2010/07/14 01:54:03 andrew Exp $
use strict;
use warnings;
use Test::More;
use Test::Deep;
use Net::OpenAMD;
#use Data::Dumper;
if ( !caller() ) {
if ( $ENV{'NETWORK_TESTS'} ) {
plan tests => 31;
}
else {
plan skip_all =>
'Network test. Set $ENV{NETWORK_TESTS} to a true value to run.';
}
my $amd
= Net::OpenAMD->new( { base_uri => 'http://api.hope.net/api/', } );
run_tests($amd);
#done_testing();
}
1;
sub run_tests {
my ($amd) = @_;
my @interests = (
"new tech", "activism",
"radio", "lockpicking",
"crypto", "privacy",
"ethics", "telephones",
"social engineering", "hacker spaces",
"hardware hacking", "nostalgia",
"communities", "science",
"government", "network security",
"malicious software", "pen testing",
"web", "niche hacks",
"media"
);
my %cmp = (
single_line => re('^[^\n]+$'),
multi_line => re('(?xms:^.*$)'),
digits => re('^\d+$'),
track => any( 'Lovelace', 'Tesla', 'Bell', 'Hooper' ),
area => any('Engressia'),
interests => any(@interests),
all_interests => bag(@interests),
coordinate => re('^\d\d\.\d+$'),
boolean => any( 'True', 'False' ),
);
$cmp{user} = [
$cmp{single_line},
superhashof(
{ name => $cmp{single_line},
#interests => array_each( $cmp{interests} ),
#x => $cmp{coordinate},
#y => $cmp{coordinate},
}
),
];
$cmp{speaker} = [
$cmp{single_line},
{ name => $cmp{single_line},
bio => $cmp{multi_line},
}
];
$cmp{location} = superhashof(
{ area => $cmp{area},
user => $cmp{digits},
#button => $cmp{boolean},
x => $cmp{coordinate},
y => $cmp{coordinate},
#time => $cmp{single_line},
}
);
my %tests = (
location => [
{ args => undef,
expect => array_each( $cmp{location} ),
},
{ args => { user => 'user0' },
expect => array_each(),
},
{ args => { user => 'user0', limit => 5 },
expect => array_each(),
},
{ args => { area => 'Engressa' },
expect => array_each(),
},
],
speakers => [
{ args => undef,
expect => array_each( $cmp{speaker} ),
},
{ args => { name => 'The Cheshire Catalyst' },
expect => array_each( $cmp{speaker} ),
},
],
talks => [
{ args => undef,
expect => array_each(
{ abstract => $cmp{multi_line},
speakers => array_each( $cmp{single_line} ),
time => $cmp{single_line},
title => $cmp{single_line},
track => $cmp{track},
}
),
},
{ args => { interests => 'lockpicking' },
expect => array_each(
{ abstract => $cmp{multi_line},
speakers => array_each( $cmp{single_line} ),
time => $cmp{single_line},
title => $cmp{single_line},
track => $cmp{track},
# interests => 'lockpicking',
}
),
},
],
interests => [
{ args => undef,
expect => $cmp{all_interests},
},
],
users => [
{ args => undef,
expect => array_each( $cmp{user} ),
},
{ args => { user => 'user0' },
expect => array_each( $cmp{user} ),
},
{ args => { user => 'user0', limit => 20 },
expect => array_each( $cmp{user} ),
},
{ args => { interests => 'lockpicking' },
expect => array_each( $cmp{user} ),
},
],
stats => [
{ args => undef,
expect => qr/^Unused \s feature/xms,
},
],
);
foreach my $method ( keys %tests ) {
foreach my $test ( @{ $tests{$method} } ) {
no warnings 'uninitialized';
my $result;
eval { $result = $amd->$method( $test->{args} ) };
if ( ref $test->{expect} eq 'Regexp' ) {
like( $@, $test->{expect}, "AMD->$method($test->{args})" );
}
elsif ( ref $test->{expect} ) {
is( $@, '', "AMD->$method($test->{args})" );
cmp_deeply( $result, $test->{expect},
"AMD->$method($test->{args}) - "
. 'got expected result' );
}
else {
is( $@, $test->{expect}, "AMD->$method($test->{args})" );
}
}
}
}