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

use strict;
use warnings;

use Test::More 'no_plan';

our %default = (
    chef => "swedish",
);

{
    package MyApp;
    our @ISA = qw/Catalyst::Plugin::Session::Defaults Ancestor/;
    use NEXT;

    sub config { return { session => { defaults => \%::default } } };

    package Ancestor;
    sub initialize_session_data {
        return { moose => [ "elk" ] }
    }
}

use ok "Catalyst::Plugin::Session::Defaults";

can_ok("Catalyst::Plugin::Session::Defaults", "initialize_session_data");
can_ok("Catalyst::Plugin::Session::Defaults", "default_session_data");

is_deeply( MyApp->default_session_data, \%default, "default comes from config" );

is( MyApp->initialize_session_data->{chef}, "swedish", "default values" );
is( (my $prev = MyApp->initialize_session_data)->{moose}[0], "elk", "merged with existing ones" );

$default{moose}[0] = "cute";

is( MyApp->initialize_session_data->{moose}[0], "cute", "overrides work" );
is( $prev->{moose}[0], "elk", "The data is cloned, not shared" );