Skip to content
Snippets Groups Projects
metadata.t 2.83 KiB
Newer Older
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
#!/usr/bin/perl

use strict;
use warnings;

use English qw(-no_match_vars);
use File::Temp;
use Test::More;
use Test::Exception;

use AccountManager::Metadata;
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed

plan tests => 21;
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed

my $metadata;

throws_ok {
    $metadata = AccountManager::Metadata->new();
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
} qr/^missing argument 'file'/,
'instanciation: no file argument';

throws_ok {
    $metadata = AccountManager::Metadata->new(
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        file => '/no/such/file',
    );
} qr/^non-existing file/,
'instanciation: non-existing file argument';

my $file1 = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1);

chmod 0000, $file1;

throws_ok {
    $metadata = AccountManager::Metadata->new(
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        file => $file1->filename()
    );
} qr/^non-readable file/,
'instanciation: non-readable file';

chmod 0644, $file1;

throws_ok {
    $metadata = AccountManager::Metadata->new(
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        file => $file1->filename()
    );
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
} qr/^Failed to parse file: \S+ parser error : Document is empty/,
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
'instanciation: empty file';

my $file2 = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1);

print $file2 <<EOF;
foo
EOF
close($file2);

throws_ok {
    $metadata = AccountManager::Metadata->new(
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        file => $file2->filename()
    );
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
} qr/^Failed to parse file: \S+ parser error : Start tag expected/,
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
'instanciation: non-xml file';

my $file3 = File::Temp->new(UNLINK => $ENV{TEST_DEBUG} ? 0 : 1);

print $file3 <<EOF;
<?xml version="1.0" encoding="UTF-8" ?>
<root/>
EOF
close($file3);

throws_ok {
    $metadata = AccountManager::Metadata->new(
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        file => $file3->filename()
    );
} qr/^incorrect root element type 'root'/,
'instanciation: incorrect xml file';
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed

lives_ok {
    $metadata = AccountManager::Metadata->new(
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
        file => 't/edugain.xml'
    );
} 'instanciation: edugain metadata';

my $all = $metadata->parse();
ok(defined $all, 'metadata extraction: defined result');
ok(ref $all eq 'ARRAY', 'metadata extraction: result type');
ok(scalar @$all == 4318, 'metadata extraction: result count');

my $sp = $metadata->parse(id => 'https://filesender.ipm.ir/');
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
ok(defined $sp, 'filtered metadata extraction: defined result');
ok(ref $sp eq 'ARRAY', 'filtered metadata extraction: result type');
ok(scalar @$sp == 1, 'filtered metadata extraction: result count');
is($sp->[0]->{entityid}, 'https://filesender.ipm.ir/', 'filtered entity has expected ID');
my $none = $metadata->parse(id => 'https://no.such.sp/');
Guillaume ROUSSE's avatar
Guillaume ROUSSE committed
ok(defined $none, 'filtered metadata extraction: defined result');
ok(ref $none eq 'ARRAY', 'filtered metadata extraction: result type');
ok(scalar @$none == 0, 'filtered metadata extraction: result count');
my $idp = $metadata->parse(type => 'idp');
ok(defined $idp, 'filtered metadata extraction: defined result');
ok(ref $idp eq 'ARRAY', 'filtered metadata extraction: result type');
ok(scalar @$idp == 2556, 'filtered metadata extraction: result count');
is($idp->[0]->{type}, 'idp', 'filtered entity has expected type');