GetCampaignsTest.php 4.78 KB
<?php

namespace Tests\Unit;

use App\Jobs\ProcessCallLimitedAPI;
use App\Models\Account;
use App\Models\Campaigns;
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 GetCampaignsTest 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('campaigns', 'get');

    }

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

        Queue::assertNothingPushed();

        $this->request->call(['ids' => [1, 2, 3]]);
        Queue::assertPushed(ProcessCallLimitedAPI::class);
    }

    public function testHandleApi()
    {
        $data = [
            'result' => [
                'Campaigns' => [
                    [
                        'Id' => 1,
                        'Name' => 'test',
                        'TimeTargeting' => ['test time schedule'],
                        'NegativeKeywords' => ['Items' => [1, 2, 3]],
                        'BlockedIps' => ['Items' => [1, 2, 3]],
                        'ExcludedSites' => ['Items' => [1, 2, 3]],
                        'DailyBudget' => [
                            'Amount' => 123,
                            'Mode' => 'STANDARD',
                        ],
                        'TextCampaign' => [
                            'BiddingStrategy' => [
                                'Search' => [
                                    'BiddingStrategyType' => 12312
                                ],
                                'Network' => [
                                    'BiddingStrategyType' => 12312
                                ]
                            ],
                            'Settings' => [123, 123, 12],
                            'CounterIds' => ['Items' => [1, 2, 3]],
                            'RelevantKeywords' => [
                                'BudgetPercent' => 1,
                                'OptimizeGoalId' => 2,
                            ],
                            'AttributionModel' => 'AL',
                            'PriorityGoals' => [34234, 2435567, 23423]
                        ],
                    ]
                ]
            ]
        ];

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

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

        $data_campaign = $data['result']['Campaigns'][0];

        $campaign = Campaigns::first();

        $this->assertEquals($campaign->external_id, $data_campaign['Id']);
        $this->assertEquals($campaign->name, $data_campaign['Name']);
        $this->assertEquals($campaign->time_targeting, $data_campaign['TimeTargeting']);
        $this->assertEquals($campaign->negative_keywords, $data_campaign['NegativeKeywords']['Items']);
        $this->assertEquals($campaign->blocked_ips, $data_campaign['BlockedIps']['Items']);
        $this->assertEquals($campaign->excluded_sites, $data_campaign['ExcludedSites']['Items']);
        $this->assertEquals($campaign->daily_budget, $data_campaign['DailyBudget']);
        $this->assertEquals($campaign->text_campaign_strategy_search, $data_campaign['TextCampaign']['BiddingStrategy']['Search']['BiddingStrategyType']);
        $this->assertEquals($campaign->text_campaign_strategy_network, $data_campaign['TextCampaign']['BiddingStrategy']['Network']['BiddingStrategyType']);
        $this->assertEquals($campaign->settings, $data_campaign['TextCampaign']['Settings']);
        $this->assertEquals($campaign->counter_ids, $data_campaign['TextCampaign']['CounterIds']['Items']);
        $this->assertEquals($campaign->relevant_keywords_setting_budget_percent, $data_campaign['TextCampaign']['RelevantKeywords']['BudgetPercent']);
        $this->assertEquals($campaign->relevant_keywords_setting_optimize_goal_id, $data_campaign['TextCampaign']['RelevantKeywords']['OptimizeGoalId']);
        $this->assertEquals($campaign->attribution_model, $data_campaign['TextCampaign']['AttributionModel']);
        $this->assertEquals($campaign->priority_goals, $data_campaign['TextCampaign']['PriorityGoals']);
        $this->assertEquals($campaign->updated_self, null);
        $this->assertEquals($campaign->updated_children, null);
    }
}