set('services.smsc.login', 'test-login'); config()->set('services.smsc.password', 'test-pass'); Http::fake(['smsc.ru/*' => Http::response(['balance' => '2245.26'], 200)]); $r = app(SmscBalanceProvider::class)->fetch(); expect($r->ok)->toBeTrue(); expect($r->balance)->toBe(2245.26); expect($r->serviceKey)->toBe('smsc'); Http::assertSent(fn ($req) => str_contains($req->url(), 'login=') && str_contains($req->url(), 'psw=')); }); it('ответ с ошибкой (нет balance) → fail', function () { config()->set('services.smsc.login', 'test-login'); config()->set('services.smsc.password', 'test-pass'); Http::fake(['smsc.ru/*' => Http::response(['error' => 'Неверный логин', 'error_code' => 2], 200)]); $r = app(SmscBalanceProvider::class)->fetch(); expect($r->ok)->toBeFalse(); expect($r->error)->not->toBeNull(); }); it('HTTP-ошибка → fail', function () { config()->set('services.smsc.login', 'test-login'); config()->set('services.smsc.password', 'test-pass'); Http::fake(['smsc.ru/*' => Http::response('', 500)]); $r = app(SmscBalanceProvider::class)->fetch(); expect($r->ok)->toBeFalse(); }); it('нет логина/пароля → fail без сетевого вызова', function () { config()->set('services.smsc.login', ''); config()->set('services.smsc.password', ''); Http::fake(); $r = app(SmscBalanceProvider::class)->fetch(); expect($r->ok)->toBeFalse(); Http::assertNothingSent(); });