2021-12-19 15:57:24 +01:00
|
|
|
<?php
|
|
|
|
|
|
2022-03-22 11:47:58 +01:00
|
|
|
namespace Tests\StressTest;
|
2021-12-19 15:57:24 +01:00
|
|
|
|
|
|
|
|
use App\Models\Customer as ModelsCustomer;
|
|
|
|
|
use Illuminate\Support\Facades\Crypt;
|
|
|
|
|
use LDC\LDCCRM\Models\Customer;
|
|
|
|
|
use LDC\LDCCRM\Models\Question;
|
|
|
|
|
use LDC\LDCCRM\Models\SingleOptin;
|
|
|
|
|
use Tests\TestCase;
|
|
|
|
|
|
|
|
|
|
class RunMultipleRequestsTest extends TestCase
|
|
|
|
|
{
|
|
|
|
|
/** @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 you did not pass your endpoint url.
|
|
|
|
|
*/
|
|
|
|
|
public function setUp(): void
|
|
|
|
|
{
|
|
|
|
|
parent::setUp();
|
|
|
|
|
// Force app Env.
|
|
|
|
|
config(['app.env' => 'local']);
|
|
|
|
|
|
|
|
|
|
extract(self::getCustomer());
|
|
|
|
|
self::$customer = $customer;
|
|
|
|
|
self::$brand = $brand;
|
|
|
|
|
self::$service = $service;
|
|
|
|
|
self::$login = $login;
|
|
|
|
|
self::$info = $info;
|
|
|
|
|
|
|
|
|
|
config(['crm.token' => self::$service->bearer_token]);
|
|
|
|
|
config(['crm.password' => self::$service->bearer_pwd]);
|
|
|
|
|
config(['crm.endpoint' => "http://crm.local"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run in a loop customer get.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function testSpamSingleOptin()
|
|
|
|
|
{
|
|
|
|
|
for ($i = 35; $i >= 0; $i--) {
|
|
|
|
|
$this->assertTrue(SingleOptin::setStatus('singleoptinteststress@gmail.com', (bool)rand(0, 1)));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run in a loop customer get.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function testSpamCustomerGet()
|
|
|
|
|
{
|
|
|
|
|
for ($i = 35; $i >= 0; $i--) {
|
|
|
|
|
$this->assertIsObject(Customer::find(self::$info->hashcode));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run in a loop customer get.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function testSpamQuestionsGet()
|
|
|
|
|
{
|
|
|
|
|
for ($i = 35; $i >= 0; $i--) {
|
|
|
|
|
$this->assertIsArray(Question::all());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Run in a loop customer get.
|
|
|
|
|
*
|
|
|
|
|
* @return void
|
|
|
|
|
*/
|
|
|
|
|
public function testSpamCustomerGets()
|
|
|
|
|
{
|
|
|
|
|
for ($i = 35; $i >= 0; $i--) {
|
|
|
|
|
$this->assertIsObject(Customer::findWithEmail(self::$customer->email));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param boolean $status
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
protected static function getCustomer(bool $status = true)
|
|
|
|
|
{
|
|
|
|
|
/** @var \App\Models\Costumer $customer */
|
|
|
|
|
$customer = ModelsCustomer::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, ModelsCustomer::FIRST_OR_FAIL);
|
|
|
|
|
|
|
|
|
|
// Regen bearer token to get the pwd in clear.
|
|
|
|
|
$bearer_token = $service->bearer_token;
|
|
|
|
|
$service->saveOrFail();
|
|
|
|
|
$service->bearer_token = $bearer_token;
|
|
|
|
|
$service->bearer_pwd = Crypt::decryptString($service->bearer_pwd);
|
|
|
|
|
|
|
|
|
|
return compact('customer', 'service', 'brand', 'login', 'info');
|
|
|
|
|
}
|
|
|
|
|
}
|