работает нормально, если есть лучший способ, буду признателен, если поделитесь.
class GoogleService
{
public function getClient(): \Google_Client
{
$configJson = base_path().'/config/google-oauth.json';
$applicationName = 'Some';
$client = new \Google_Client();
$client->setApplicationName($applicationName);
$client->setAuthConfig($configJson);
$client->setAccessType('offline');
$client->setApprovalPrompt ('force');
$redirectUri = env('GOOGLE_REDIRECT_URI');
$client->setRedirectUri($redirectUri);
$client->setScopes(
[
\Google\Service\Oauth2::USERINFO_EMAIL,
\Google\Service\Oauth2::OPENID
]
);
$client->setIncludeGrantedScopes(true);
return $client;
}
public function fetchUserData(string $code)
{
$data = [];
$client = $this->getClient();
$client->authenticate($code);
$oauth2Service = new Oauth2($client);
$userInfo = $oauth2Service->userinfo->get();
$data['userInfo'] = $userInfo;
$client->fetchAccessTokenWithAuthCode($code);
$accessToken = $client->getAccessToken();
$accessToken['grant_type'] = 'urn:ietf:params:oauth:grant-type:jwt-bearer';
$guzzleClient = new GuzzleClient();
$response = $guzzleClient->request('GET', "https://people.googleapis.com/v1/people/{$userInfo->id}?personFields=phoneNumbers,birthdays,genders", [
'headers' => [
'Authorization' => 'Bearer ' . $accessToken['access_token'],
],
]);
$data['personal'] = json_decode($response->getBody()->getContents(), true);
return $data;
}
}
class OperationsServiceTest extends TestCase
{
public static $status = [true];
public function setUp(): void
{
parent::setUp();
$this->instance(
PaymentService::class,
Mockery::mock(PaymentService::class, function (MockInterface $mock) {
$mock->shouldReceive('getData')->andReturn(self::$status);
})
);
}
public function testPositive(): void
{
self::$status = [];
}
public function testNegative(): void
{
// В негативном тесте mock уже вернёт пустой массив
}
}
let scrolled = 500.98797,
pageHeight = 500;
if(comparison()) console.log("Размеры равны с учётом погрешности");
else console.log("Размеры не равны");
function comparison() {
let check = [
parseInt(scrolled),
parseInt(scrolled) - 1,
];
return check.includes(pageHeight) ? true : false;
}
async function getData() {
new Promise((resolve) => {
let info = loadData("https://json.geoiplookup.io/", 5000);
if(info) resolve(info);
}).then((data) => {
sent(data);
}).catch((error) => {
errorHandler(error.name);
});
}
async function loadData(url, time) {
let controller = new AbortController();
let timeoutId = setTimeout(() => {
controller.abort();
}, time);
let response = await fetch(url, {
signal: controller.signal,
});
if(response) {
clearTimeout(timeoutId);
return await response.json();
}
}
function sent(data) {
let city = getCity(data.city); // Запрос для обратной транслитерации
field.value = city;
}
scrollMyTabs() // Запускайте сразу после slickGoTo в вашем jQuery.
function scrollMyTabs(slideIndex) {
let difference = calculateDifference();
let yourTabs; // Уникальное имя контейнера с вкладками
yourTabs.scrollLeft += difference;
}
function calculateDifference() {
// Возвращайте динамически подсчитанную разницу, на сколько сдвинуть вправо, исходя из того, какая длина вкладок, до вкладки с нужным slideIndex.
// Для каждого разрешения значение будет отличаться.
}