#! perl -w
use strict;
use lib 't/lib';

use Test::More;
use Test::Fatal;
use Dancer::Test;

use Dancer::RPCPlugin::DispatchFromConfig;
use Dancer::RPCPlugin::DispatchItem;

{
    my $dispatch = dispatch_table_from_config(
        key      => 'xmlrpc',
        endpoint => '/xmlrpc',
        config   => {
            '/xmlrpc' => {
                'TestProject::SystemCalls' => {
                    'system.ping'    => 'do_ping',
                    'system.version' => 'do_version',
                }
            }
        }
    );
    is_deeply(
        $dispatch,
        {
            'system.ping'    => dispatch_item(
                code => TestProject::SystemCalls->can('do_ping'),
                package => 'TestProject::SystemCalls',
            ),
            'system.version' => dispatch_item(
                code => TestProject::SystemCalls->can('do_version'),
                package => 'TestProject::SystemCalls',
            ),
        },
        "Dispatch from YAML-config"
    );

    like(
        exception {
            dispatch_table_from_config(
                key      => 'xmlrpc',
                endpoint => '/xmlrpc',
                config   => {
                    '/xmlrpc' => {
                        'TestProject::SystemCalls' => {
                            'system.nonexistent' => 'nonexistent',
                        }
                    }
                },
            );
        },
        qr/Handler not found for system.nonexistent: TestProject::SystemCalls::nonexistent doesn't seem to exist/,
        "Setting a non-existent dispatch target throws an exception"
    );
}

done_testing();