NAME
    Dist::Zilla::Util::Test::KENTNL - KENTNL's DZil plugin testing tool

VERSION
    version 1.000000

METHODS
  test_config
    This is pretty much why this module exists. Its a little perverse, but
    makes testing WAY easier.

      my $plugin = test_config({
        dist_root => 'corpus/dist/DZT',
        ini       => [
          'GatherDir',
          [ 'Prereqs' => { 'Test::Simple' => '0.88' } ],
        ],
        post_build_callback => sub {
            my $config = shift;
            # Handy place to put post-construction test code.
            die $config->{error} if $config->{error};
        },
        find_plugin => 'SomePluginName'
      });

    Additionally, you can add this section

      callback => {
        method => 'metadata',
        args   => [],
        code   => sub {
          my $data = shift;
          print "Errors ( if any ) $data->{error} ";
          dump  $data->{response}; # response from ->metadata
          $data->{instance}->doMorestuffbyhand();
          # ok( .... 'good place for a test!' )
        },
      }

    Generally, I find it easier to do 1-off function wrappers, i.e.:

      sub make_plugin {
        my @args = @_;
        return test_config({
            dist_root => 'corpus/dist/DZT',
            ini => [
              'GatherDir',
              [ 'Prereqs' => {'Test::Simple' => '0.88' } ],
              [ 'FakePlugin' => {@args } ],
            ],
            post_build_callback => sub {
              my $config = shift;
              die $config->{error} if $config->{error};
            },
            find_plugin => 'FakePlugin',
        });
      }

    Which lets us do

      ok( make_plugin( inherit_version => 1 )->inherit_version , 'inherit_verion = 1 propagates' );

   parameters
      my $foo = test_config({
          dist_root => 'Some/path'    # optional, strongly recommended.
          ini       => [              # optional, strongly recommended.
              'BasicPlugin',
              [ 'AdvancedPlugin' => { %pluginargs }],
          ],
          build    => 0/1              # works fine as 0, 1 tells it to call the ->build() method.
          post_build_callback => sub {
            my ( $conf )  = shift;
            $conf->{error}    # any errors that occured during construction/build
            $conf->{instance} # the constructed instance
            # this is called immediately after construction, do what you will with this.
            # mostly for convenience
          },
          find_plugin => 'Some::Plugin::Name', # makes test_config find and return the plugin that matched that name instead of
                                               # the config instance

          callback => {                        # overrides the return value of find_plugin if it is called
            method => 'method_to_call',
            args   => [qw( hello world )],
            code   => sub {
              my ($conf) = shift;
              $conf->{plugin}   # the constructed plugin instance
              $conf->{error}    # any errors discovered when calling ->method( args )
              $conf->{instance} # the zilla instance
              $conf->{response} # the return value of ->method( args )
              # mostly just another convenience of declarative nature.
              return someValueHere # this value will be returned by test_config
            }
          },
      });

AUTHOR
    Kent Fredric <kentnl@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2014 by Kent Fredric <kentnl@cpan.org>.

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

