This removes api authentification with token in favor of signature method. Refactorize code and clean up. It add more unit test plus code coverage in test/converage. - Added config.api.timestampTimeout - Added Helper::signRequest This calculates the request signature - Added more unit tests and extend code coverage. - Added rate limiter for web routes - Added RemoveSpaces Sanitizer on api requests - Added stress test suite - Changed AuthServiceProvider api-token to api-hmac - Changed CustomerSeeder to have at least of customer activated (for unit tests) - Changed used transation for saveing multiple models - Changed, in ServiceController generateApiToken to generateServicePassword - Changed, timestamp has to be send in request with a DateTime format, it also has to a UTC value - Composer added brianium/paratest - Composer update - Fixed case where removing single optin could be the wrong one (not for the good service) - Fixed customer delete - Fixed customer would not be resolved by brand. - Fixed Really check that request is json checking body content, preventing sending malformed requests - Remove ApiError::needAuth - Removed api_token - Removed ApiController::authenticate - Removed config.api.tokenTimeout - Removed Header check or usage because of HAProxy doing weird stuff - Removed lock files from gitignore - Removed memcached dependency - Removed unused questions resources api routes - Removed workspace file Migrations - Added unique index on services.bearer_token - Changed customer_id on customer_answer is nullable - Changed services.bearer_pwd length to 312 (the size of the token) - Dropped services.api_token and service.api_token_date
94 lines
2.5 KiB
PHP
94 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Client;
|
|
|
|
use App\Models\Customer;
|
|
use Illuminate\Support\Facades\Crypt;
|
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
|
use LDC\LDCCRM\CrmApiV2;
|
|
use LDCCRM\ApiV1;
|
|
use Tests\CreatesApplication;
|
|
|
|
abstract class CrmClientTester extends BaseTestCase
|
|
{
|
|
use CreatesApplication;
|
|
|
|
/** @var \LDCCRM\ApiV1 */
|
|
protected static $apiV1;
|
|
|
|
/** @var \App\Models\Customer */
|
|
protected static $customer;
|
|
|
|
/** @var \App\Models\Brand */
|
|
protected static $brand;
|
|
|
|
/** @var \App\Models\Service */
|
|
protected static $service;
|
|
|
|
/** @var \App\Models\Info */
|
|
protected static $info;
|
|
|
|
/** @var \App\Models\Login */
|
|
protected static $login;
|
|
|
|
/**
|
|
* Setup the test environment.
|
|
*
|
|
* @return void
|
|
* @throws \ErrorException If env is not testing.
|
|
*/
|
|
public function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
if (!self::$customer) {
|
|
extract(self::getCustomer());
|
|
self::$customer = $customer;
|
|
self::$brand = $brand;
|
|
self::$service = $service;
|
|
self::$login = $login;
|
|
self::$info = $info;
|
|
}
|
|
new CrmApiV2(
|
|
config('app.url'),
|
|
self::$service->bearer_token,
|
|
Crypt::decryptString(self::$service->bearer_pwd)
|
|
);
|
|
static::$apiV1 = new ApiV1(config('app.url'), self::$service->bearer_token);
|
|
}
|
|
|
|
/**
|
|
* Get customer
|
|
*
|
|
* @param boolean $status
|
|
* @return array
|
|
*/
|
|
protected static function getCustomer(bool $status = true): array
|
|
{
|
|
/** @var \App\Models\Costumer $customer */
|
|
$customer = Customer::whereHas('logins', function ($q) use ($status) {
|
|
$q->where('status', $status);
|
|
})->inRandomOrder()->firstOrFail();
|
|
/** @var \App\Models\Brand $brand */
|
|
$login = $customer->logins()->where('status', $status)->firstOrFail();
|
|
/** @var \App\Models\CustomerLogin $login */
|
|
$brand = $login->brand;
|
|
/** @var \App\Models\Service $service */
|
|
$service = $brand->services()->firstOrFail();
|
|
|
|
// Get customer info.
|
|
$info = $customer->info($brand, Customer::FIRST_OR_FAIL);
|
|
|
|
return compact('customer', 'service', 'brand', 'login', 'info');
|
|
}
|
|
|
|
/**
|
|
* Parse routes.json and return routes list
|
|
*
|
|
* @return array
|
|
*/
|
|
protected function getClientRoutes(): array
|
|
{
|
|
return \json_decode(\file_get_contents(__DIR__ . '/../../clients/V2/src/routes.json'), true);
|
|
}
|
|
}
|