The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;

use Test::More;
use JSON;

plan tests => 5;

my $conf = {
    'twitter' => {
        spec        => 't/specs/api.json',
        options     => { base_url => 'http://localhost/', },
        middlewares => [ { name => 'Format::JSON' } ],
    }
};

{

    package my::app;
    use Moose;
    with 'Net::HTTP::Spore::Role' => {
        spore_clients => [
            { name => 'twitter', config => 'twitter_config' }
        ]
    };
}

my $mock_server = {
    '/show' => sub {
        my $req = shift;
        $req->new_response(
            200,
            [ 'Content-Type' => 'application/json' ],
            JSON::encode_json({status => 'ok'})
        );
    },
};

ok my $app = my::app->new( twitter_config => $conf->{twitter} );
is_deeply $app->twitter_config, $conf->{twitter};

$app->twitter->enable('Mock', tests => $mock_server);
my $res = $app->twitter->get_info();
is $res->[0],        200;
is_deeply $res->[2], {status => 'ok'};
is $res->header('Content-Type'), 'application/json';