prepareDatabase([ 'groups' => [ $this->adminGroup(), ], 'users' => [ $this->adminUser(), ], ]); $bus = $this->app()->getContainer()->make(Dispatcher::class); return $bus->dispatch( new CreateGroup(User::find(1), ['attributes' => [ 'nameSingular' => 'test group', 'namePlural' => 'test groups', 'color' => '#000000', 'icon' => 'fas fa-crown', ]]) ); } /** * @test */ public function custom_listener_doesnt_work_by_default() { $group = $this->buildGroup(); $this->assertEquals('test group', $group->name_singular); } /** * @test */ public function custom_listener_works_with_closure() { $this->extend((new Extend\Event)->listen(Created::class, function (Created $event) { $event->group->name_singular = 'modified group'; })); $group = $this->buildGroup(); $this->assertEquals('modified group', $group->name_singular); } /** * @test */ public function custom_listener_works_with_class_with_handle_method_and_can_inject_stuff() { // Because it injects a translator, this also tests that stuff can be injected into this callback. $this->extend((new Extend\Event)->listen(Created::class, CustomListener::class)); $group = $this->buildGroup(); $this->assertEquals('core.group.admin', $group->name_singular); } } class CustomListener { protected $translator; public function __construct(TranslatorInterface $translator) { $this->translator = $translator; } public function handle(Created $event) { $event->group->name_singular = $this->translator->trans('core.group.admin'); } }