getProviders(MailServiceProvider::class))->toHaveCount(1) ->and(app(MailConfigurator::class))->toBeInstanceOf(MailConfigurationService::class) ->and(app(EmailLogWriter::class))->toBeInstanceOf(EloquentEmailLogWriter::class) ->and(Gate::has('manage email config'))->toBeTrue(); expect(class_exists('App\\Services\\Mail\\MailConfigurationService'))->toBeFalse() ->and(class_exists('App\\Services\\Mail\\CompanyMailConfigService'))->toBeFalse() ->and(class_exists('App\\Mail\\TestMail'))->toBeFalse() ->and(class_exists('App\\Http\\Controllers\\Admin\\Settings\\MailConfigurationController'))->toBeFalse() ->and(class_exists('App\\Http\\Controllers\\Company\\Settings\\CompanyMailConfigurationController'))->toBeFalse(); }); test('the mail platform preserves its public configuration routes and middleware', function () { $routes = collect(Route::getRoutes()->getRoutes()) ->filter(fn ($route): bool => preg_match('#^api/v1/(?:company/)?mail/#', $route->uri()) === 1) ->keyBy(fn ($route): string => implode('|', $route->methods()).' '.$route->uri()); expect($routes->keys()->sort()->values()->all())->toBe(collect([ 'GET|HEAD api/v1/company/mail/company-config', 'GET|HEAD api/v1/company/mail/config', 'GET|HEAD api/v1/mail/config', 'GET|HEAD api/v1/mail/drivers', 'POST api/v1/company/mail/company-config', 'POST api/v1/company/mail/company-test', 'POST api/v1/mail/config', 'POST api/v1/mail/test', ])->sort()->values()->all()); foreach ($routes as $route) { expect($route->getActionName())->toStartWith('App\\Platform\\Mail\\Http\\') ->and($route->gatherMiddleware())->toContain('auth:sanctum', 'company', 'bouncer'); } expect($routes->get('GET|HEAD api/v1/mail/config')->getActionName()) ->toBe(MailConfigurationController::class.'@getMailEnvironment') ->and($routes->get('GET|HEAD api/v1/company/mail/config')->getActionName()) ->toBe(CompanyMailConfigurationController::class.'@getDefaultConfig'); });