The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::Exception;
use Facebook::OpenGraph;

subtest 'parse' => sub {

    my $signed_request = "vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0";
    my $fb = Facebook::OpenGraph->new(+{
        secret => 'secret'
    });
    my $datum_ref = $fb->parse_signed_request($signed_request);
    my $expected_datum_ref = +{
        0           => 'payload',
        'algorithm' => 'HMAC-SHA256',
    };

    is_deeply $datum_ref, $expected_datum_ref, 'datum';

};

subtest 'w/o secret key' => sub {

    my $signed_request = "vlXgu64BQGFSQrY0ZcJBZASMvYvTHu9GQ0YM9rjPSso.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0";
    my $fb = Facebook::OpenGraph->new;

    throws_ok(
        sub {
            my $datum_ref = $fb->parse_signed_request($signed_request);
        },
        qr/secret key must be set/,
        'secret key is mandatory',
    );

};

done_testing;