GetAdGroupTest.php 4.26 KB
<?php

namespace Tests\Unit;

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

class GetAdGroupTest extends TestCase
{
    use RefreshDatabase;

    private $request;
    private $token;
    private $user;
    private $data = [
        'result' => [
            'AdGroups' => [
                [
                    'Id' => 1,
                    'Name' => 'Группа №1',
                    'CampaignId' => 1,
                    'Status' => 'ACCEPTED',
                    'Type' => 'TEXT_AD_GROUP',
                    'Subtype' => 'NONE',
                    'ServingStatus' => 'ELIGIBLE',
                    'RestrictedRegionIds' => NULL,
                    'RegionIds' =>
                        [
                            0 => 1,
                        ],
                    'NegativeKeywords' =>
                        [
                            'Items' => [
                                'minusword1',
                                'minusword3',
                            ],
                        ],
                    'NegativeKeywordSharedSetIds' => NULL,
                    'TrackingParams' => '',
                ],
            ]
        ]
    ];

    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([
            'type' => 'main',
            'created_by' => $this->user->id
        ]);

        factory(Campaigns::class)->create([
            'external_id' => 1,
            'token' => $this->token->getKey(),
        ]);

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

    }

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

        Queue::assertNothingPushed();

        $this->request->call([
            'CampaignIds' => [1, 2],
        ]);

        Queue::assertPushed(ProcessCallLimitedAPI::class);
    }

    public function testHandleApi()
    {

        $this->assertEquals(1, Campaigns::count());
        $this->assertEquals(0, AdGroup::count());

        $this->request->handle($this->data);

        $this->assertEquals(1, AdGroup::count());

        $ad_group = AdGroup::first();

        $this->assertEquals($ad_group->name, $this->data['result']['AdGroups'][0]['Name']);
        $this->assertEquals($ad_group->campaign_id, $this->data['result']['AdGroups'][0]['CampaignId']);
        $this->assertEquals($ad_group->status, $this->data['result']['AdGroups'][0]['Status']);
        $this->assertEquals($ad_group->type, $this->data['result']['AdGroups'][0]['Type']);
        $this->assertEquals($ad_group->sub_type, $this->data['result']['AdGroups'][0]['Subtype']);
        $this->assertEquals($ad_group->serving_status, $this->data['result']['AdGroups'][0]['ServingStatus']);
        $this->assertEquals($ad_group->restricted_region_ids, $this->data['result']['AdGroups'][0]['RestrictedRegionIds']);
        $this->assertEquals($ad_group->region_ids, $this->data['result']['AdGroups'][0]['RegionIds']);
        $this->assertEquals($ad_group->negative_keywords, $this->data['result']['AdGroups'][0]['NegativeKeywords']);
        $this->assertEquals($ad_group->negative_keyword_shared_set_ids, $this->data['result']['AdGroups'][0]['NegativeKeywordSharedSetIds']);
        $this->assertEquals($ad_group->tracking_params, $this->data['result']['AdGroups'][0]['TrackingParams']);

        $ad_group->update([
            'updated_self' => Carbon::now(),
        ]);

        $ad_group = AdGroup::first();

        $this->assertNotNull($ad_group->updated_self);

        $this->request->handle($this->data);

        $ad_group = AdGroup::first();

        $this->assertNull($ad_group->updated_self);

    }
}