1use strict;
2use warnings;
3use Test::More tests => 2;
4use Catalyst::Utils;
5
6# test that everything off with trait merge turned OFF
7
8{
9    package Catalyst::Controller::SomeController;
10    use Moose;
11    extends 'Catalyst::Controller';
12    with 'CatalystX::Component::Traits';
13
14    package Catalyst::TraitFor::Controller::SomeController::Foo;
15    use Moose::Role;
16    has 'foo' => (is => 'ro');
17
18    package MyApp::Controller::MyController;
19    use Moose;
20    extends 'Catalyst::Controller::SomeController';
21
22    __PACKAGE__->config(
23        traits => ['Quux'], # these should be overwritten by app config
24    );
25
26    sub find_app_class {
27        my $self = shift;
28        blessed($self->_application) || $self->_application;
29    }
30
31    package MyApp::TraitFor::Controller::SomeController::Bar;
32    use Moose::Role;
33    has 'bar' => (is => 'ro');
34
35    package MyApp::TraitFor::Controller::SomeController::Baz;
36    use Moose::Role;
37    has 'baz' => (is => 'ro');
38
39    package MyApp::TraitFor::Controller::SomeController::Quux;
40    use Moose::Role;
41    has 'quux' => (is => 'ro');
42
43    package MyApp;
44    use Moose;
45    extends 'Catalyst';
46
47    __PACKAGE__->config->{'Controller::MyController'} = {
48        traits => [qw/Foo Bar Baz/],
49        bar => 'baz',
50    };
51
52    $INC{'MyApp/Controller/MyController.pm'} = 1;
53    __PACKAGE__->setup;
54}
55
56is eval { MyApp->controller('MyController')->bar }, 'baz',
57    'trait initialized from app config works';
58
59is_deeply(
60    [MyApp->controller('MyController')->meta->calculate_all_roles]->[0]->name,
61    'Catalyst::TraitFor::Controller::SomeController::Foo|MyApp::TraitFor::Controller::SomeController::Bar|MyApp::TraitFor::Controller::SomeController::Baz',
62    'traits from app config override traits from component config'
63);
64