The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Test::Plack::Handler::Stomp - testing library for Plack::Handler::Stomp

VERSION

version 1.15

SYNOPSIS

  my $t = Test::Plack::Handler::Stomp->new();
  $t->set_arg(
    subscriptions => [
      { destination => '/queue/input_queue',
        path_info => '/input_queue', },
    ],
  );
  $t->clear_frames_to_receive;

  $t->queue_frame_to_receive(Net::Stomp::Frame->new({
        command => 'MESSAGE',
        headers => {
            destination => '/queue/input_queue',
            subscription => 0,
            type => 'my_type',
            'message-id' => 356,
        },
        body => '{"foo":"bar"}',
    }));

    $t->handler->run($app);

    check($t->frames_sent);

DESCRIPTION

Testing a PSGI application that expects JMS/STOMP messages can be a pain. This library helps reduce that pain.

It wraps a Plack::Handler::Stomp, connecting it to a Test::Plack::Handler::Stomp::FakeStomp instead of a real STOMP connection, and allows you to inspect everything that happens to the connection.

ATTRIBUTES

handler_args

Hashref, arguments to pass to Plack::Handler::Stomp's constructor. You can add to this via the "set_arg" method. Defaults to { one_shot => 1 }, to avoid having Plack::Handler::Stomp loop forever.

handler

A Plack::Handler::Stomp instance. It's built on-demand via "setup_handler". You can clear it with "clear_handler" to have it rebuilt (for example, if you have changed "handler_args")

frames_sent

Arrayref of Net::Stomp::Frame objects that Plack::Handler::Stomp sent. Can be edited via "queue_sent_frame", "sent_frames_count", "clear_sent_frames". Defaults to the empty array.

frames_to_receive

Arrayref of Net::Stomp::Frame objects that Plack::Handler::Stomp will consume. Can be edited via "queue_frame_to_receive", "next_frame_to_receive", "frames_left_to_receive", "clear_frames_to_receive".

Defaults to an array with a single ERROR frame.

constructor_calls

Arrayref of whatever was passed to the Test::Plack::Handler::Stomp::FakeStomp constructor. Can be edited via "queue_constructor_call", "constructor_calls_count", "clear_constructor_calls".

connection_calls

Arrayref of whatever was passed to the Test::Plack::Handler::Stomp::FakeStomp connect method. Can be edited via "queue_connection_call", "connection_calls_count", "clear_connection_calls".

disconnection_calls

Arrayref of whatever was passed to the Test::Plack::Handler::Stomp::FakeStomp disconnect method. Can be edited via "queue_disconnection_call", "disconnection_calls_count", "clear_disconnection_calls".

subscription_calls

Arrayref of whatever was passed to the Test::Plack::Handler::Stomp::FakeStomp subscribe method. Can be edited via "queue_subscription_call", "subscription_calls_count", "clear_subscription_calls".

unsubscription_calls

Arrayref of whatever was passed to the Test::Plack::Handler::Stomp::FakeStomp unsubscribe method. Can be edited via "queue_unsubscription_call", "unsubscription_calls_count", "clear_unsubscription_calls".

log_messages

Arrayref of whatever Plack::Handler::Stomp logs. Each element is a pair [ $level, $message ]. Can be edited via "add_log_message", "log_messages_count", "clear_log_messages".

METHODS

set_arg

  $handler->set_arg(foo=>'bar',some=>'thing');

Sets arguments for Plack::Handler::Stomp's constructor, see /handler_args.

clear_handler

Destroys the "handler", forcing it to be rebuilt next time it's needed.

queue_sent_frame

Adds a frame to the end of "frames_sent".

sent_frames_count

Returns the number of elements in "frames_sent".

clear_sent_frames

Removes all elements from "frames_sent".

queue_frame_to_receive

Adds a frame to the end of "frames_to_receive".

next_frame_to_receive

Removes a frame from the beginning of "frames_to_receive" and returns it.

frames_left_to_receive

Returns the number of elements in "frames_to_receive".

clear_frames_to_receive

Removes all elements from "frames_to_receive".

queue_constructor_call

Adds a hashref to the end of "constructor_calls".

constructor_calls_count

Returns the number of elements in "constructor_calls".

clear_constructor_calls

Removes all elements from "constructor_calls".

queue_connection_call

Adds a hashref to the end of "connection_calls".

connection_calls_count

Returns the number of elements in "connection_calls".

clear_connection_calls

Removes all elements from "connection_calls".

queue_disconnection_call

Adds a hashref to the end of "disconnection_calls".

disconnection_calls_count

Returns the number of elements in "disconnection_calls".

clear_disconnection_calls

Removes all elements from "disconnection_calls".

queue_subscription_call

Adds a hashref to the end of "subscription_calls".

subscription_calls_count

Returns the number of elements in "subscription_calls".

clear_subscription_calls

Removes all elements from "subscription_calls".

queue_unsubscription_call

Adds a hashref to the end of "unsubscription_calls".

unsubscription_calls_count

Returns the number of elements in "unsubscription_calls".

clear_unsubscription_calls

Removes all elements from "unsubscription_calls".

add_log_message

Adds a pair to the end of "log_messages".

log_messages_count

Returns the number of elements in "log_messages".

clear_log_messages

Removes all elements from "log_messages".

setup_handler

Constructs a Plack::Handler::Stomp, setting it up to capture logging, passing "handler_args", and setting a connection_builder that returns a Test::Plack::Handler::Stomp::FakeStomp with all the callbacks set to accumulate calls in this object.

trace

debug

info

warn

error

Logger delegate methods, the handler returned by "setup_handler" uses these to log. These methods accumulate log messages by calling "add_log_message".

clear_calls_and_queues

Calls the clearer for all the queue / accumulator attributes ("frames_sent", "frames_to_receive", "constructor_calls", "connection_calls", "disconnection_calls", "subscription_calls", "unsubscription_calls", "log_messages")

AUTHOR

Gianni Ceccarelli <gianni.ceccarelli@net-a-porter.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2020 by Net-a-porter.com.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.