findSite('CarMoney', 'Красноярский край'))->toBeNull(); }); it('берёт домен первого результата (голый, без www/пути)', function () { Config::set('services.exa', ['key' => 'k', 'base_url' => 'https://api.exa.ai', 'timeout_sec' => 30]); $http = app(HttpFactory::class); $http->fake([ 'api.exa.ai/*' => $http->response([ 'results' => [['url' => 'https://www.carmoney.ru/about?utm=1'], ['url' => 'https://carmoney.ru']], ], 200), ]); $f = new ExaSiteFinder($http); expect($f->findSite('CarMoney', 'Красноярский край'))->toBe('carmoney.ru'); }); it('пропускает агрегаторы/каталоги и иностранные TLD, берёт первый «настоящий»', function () { Config::set('services.exa.key', 'k'); $http = app(HttpFactory::class); $http->fake([ 'api.exa.ai/*' => $http->response([ 'results' => [ ['url' => 'https://www.avito.ru/krasnoyarsk/zaim'], ['url' => 'https://banki.ru/products/cashmotor'], ['url' => 'https://cashmotor.kg/'], // иностранный TLD ['url' => 'https://cashmotor.ru/'], // настоящий ], ], 200), ]); $f = new ExaSiteFinder($http); expect($f->findSite('Cashmotor', 'Красноярский край'))->toBe('cashmotor.ru'); }); it('нет подходящих результатов или ошибка сети → null', function () { Config::set('services.exa.key', 'k'); $http = app(HttpFactory::class); $http->fake([ 'api.exa.ai/*' => $http->response(['results' => [['url' => 'https://zoon.ru/x']]], 200), ]); expect((new ExaSiteFinder($http))->findSite('X', 'Красноярский край'))->toBeNull(); $http2 = app(HttpFactory::class); $http2->fake(['api.exa.ai/*' => $http2->response('boom', 500)]); expect((new ExaSiteFinder($http2))->findSite('Y', 'Красноярский край'))->toBeNull(); });