CallLimitedApiTest.php 1.75 KB
<?php

namespace Tests\Unit;

use App\Jobs\ProcessCallAPI;
use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Account;
use App\Models\Tokens;
use App\Models\User;
use App\Service\Contract\API;
use App\Service\HeaderLimits;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Queue;
use Tests\TestCase;

class CallLimitedApiTest extends TestCase
{
    use RefreshDatabase;

    private $request;
    private $token;

    protected function setUp(): void
    {
        parent::setUp();

        $this->request = \App\Service\Requests\APIRequest::getInstance(API::YANDEX);
        $account = Account::create(['name' => 'Acme Corporation']);

        $this->user = factory(User::class)->create([
            'account_id' => $account->id,
            'first_name' => 'John',
            'last_name' => 'Doe',
            'email' => 'johndoe@example.com',
            'owner' => true,
        ]);

        $this->token = factory(Tokens::class)->create([
            'created_by'    =>  $this->user->id
        ]);
    }

    public function testCall(){
        Queue::fake();

        Queue::assertNothingPushed();

        $this->request->setToken($this->token);


        $process = new ProcessCallLimitedAPI($this->request);
        dispatch($process)->onQueue('limits');
        Queue::assertPushed(ProcessCallLimitedAPI::class);

        $process = new ProcessCallLimitedAPI($this->request);
        dispatch($process)->onQueue('limits');
        Queue::assertPushed(ProcessCallLimitedAPI::class, 2);

        $this->token->limit=15;
        $this->request->setService('AdGroups');
        $this->request->setMethod('get');
        $process->handle();
        Queue::assertPushed(ProcessCallAPI::class);
        $this->assertEquals($this->token->limit, 0);
    }
}