The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

#####################################################################
# checks the reflection methods are loaded by the repository
#####################################################################

use strict;
use warnings;

use Test::More tests => 12;
use Test::Exception;

use Froody::Repository;
use Test::Differences;
use Froody::Response::Terse;

use lib 't/lib';

use_ok ('Other');
use Froody::Dispatch;

my $client = Froody::Dispatch->config({modules=>['Other']});
my $repo = $client->repository;

is scalar $repo->get_methods(), 6, 'One method plus the reflection methods';
is scalar $repo->get_methods(qr'^reflection'), 0, 'partial query';
is scalar $repo->get_methods(qr'^other'), 1, 'partial query';
is scalar @{
    $client->call('froody.reflection.getMethods')->{method}
}, 6, '1 method plus reflection ones';

my $method = $repo->get_method('other.object.method');

is $method->module, 'Other::Object', 'namespace transform worked';

isa_ok $repo->get_method('other.object.method'), 'Froody::Method';

throws_ok {
  $repo->get_method('Ack.Bar');
} qr/Method 'Ack.Bar' not found/;

isa_ok $method, 'Froody::Method';

ok my $ret = $client->call('froody.reflection.getMethodInfo', 
    method_name => 'froody.reflection.getSpecification');
ok $method = $repo->get_method('froody.reflection.getSpecification');

my $buggy = $method->example_response->as_terse->content;
eq_or_diff $buggy->{errortypes}, { 
                          'errortype' => [
                                         {
                                           '-text' => 'Internal structure of your error type goes here (including XML)',
                                           'code' => 'mycode'
                                         },
                                         {
                                            '-text' => 'Internal structure of your error type goes here (including XML)',
                                           'code' => 'mycode'
                                         }
                                       ]
}, "So... we were doing bad things with our examples.";