GetDictionariesTest.php 2.79 KB
<?php

namespace Tests\Unit;

use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Account;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Tokens;
use App\Models\User;
use App\Service\Contract\API;
use App\Service\Requests\APIRequest;
use Illuminate\Support\Facades\Queue;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;

class GetDictionariesTest extends TestCase
{
    use RefreshDatabase;

    private $request;

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

        $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
        ]);

        $this->request = APIRequest::getInstance(API::YANDEX)
            ->setToken($this->token)
            ->getRequest('Dictionaries', 'get');

    }

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

        Queue::assertNothingPushed();

        $this->request->call();
        Queue::assertPushed(ProcessCallLimitedAPI::class);
    }

    public function testHandleApi()
    {
        $this->request->handle([
            'result' => [
                'GeoRegions' => [
                    [
                        'GeoRegionId' => 1,
                        'GeoRegionName' => 'test',
                        'GeoRegionType' => 'World',
                        'ParentId' => 0
                    ], [
                        'GeoRegionId' => 2,
                        'GeoRegionName' => 'test2',
                        'GeoRegionType' => 'City',
                        'ParentId' => 1
                    ], [
                        'GeoRegionId' => 3,
                        'GeoRegionName' => 'test3',
                        'GeoRegionType' => 'Village',
                        'ParentId' => 2
                    ],
                ]
            ]
        ]);

        $this->assertEquals(3, Dictionary::count());

        $city = Dictionary::where('region_id', 1)->first();
        $this->assertEquals($city->name, 'test');
        $this->assertEquals($city->type, 'World');
        $this->assertEquals($city->type, 'World');

        $city = Dictionary::where('region_id', 2)->first();
        $this->assertEquals($city->name, 'test2');
        $this->assertEquals($city->type, 'City');
        $this->assertEquals($city->parent_id, 1);

        $city = Dictionary::where('region_id', 3)->first();
        $this->assertEquals($city->name, 'test3');
        $this->assertEquals($city->type, 'Village');
        $this->assertEquals($city->parent_id, 2);
    }
}