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