ReplaceByVariablesTest.php 3.33 KB
<?php

namespace Tests\Unit;

use App\Models\Account;
use App\Models\Campaigns;
use App\Models\Dictionary;
use App\Models\Pivots\DictionaryCampaignPivot;
use App\Models\Pivots\DictionaryCampaignVariablePivot;
use App\Models\Tokens;
use App\Models\User;
use App\Models\Variable;
use App\Service\StrReplaceByVariables;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ReplaceByVariablesTest extends TestCase
{
    use RefreshDatabase;

    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_main = factory(Tokens::class)->create([
            'type' => Tokens::MAIN,
            'created_by' => $this->user->getKey()
        ]);

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

        $this->campaign = factory(Campaigns::class)->create([
            'manage' => true,
            'token' => $this->token_main,
        ]);

        $this->dictionary = factory(Dictionary::class)->create([
            'token_id' => $this->token,
            'type' => Dictionary::CITY,
        ]);

        $this->dictionary->campaigns()->syncWithoutDetaching(
            $this->token_main->campaignsForManaged->keyBy($this->token_main->campaignsForManaged->first()->getKeyName())->transform(function (Campaigns $campaign) {
                return DictionaryCampaignPivot::copyPropertyInCampaign($campaign);
            })->all()
        );

        $this->variable = factory(Variable::class)->create([
            'name' => 'var',
            'default_value' => 'var value',
        ]);

        $this->variable_2 = factory(Variable::class)->create([
            'name' => 'vartwo',
            'default_value' => 'vartwo value',
        ]);

        $this->dictionaryCampaign = DictionaryCampaignPivot::first();

        $this->dictionaryCampaign->dictionaryCampaignVariables()->create([
            'variable_id' => $this->variable->getKey(),
            'value' => 'custom var value',
        ]);

    }

    public function testReplaceByVariables()
    {
        $this->assertEquals(2, Tokens::count());
        $this->assertEquals(1, Campaigns::count());
        $this->assertEquals(2, Variable::count());
        $this->assertEquals(1, $this->campaign->dictionaryCampaignVariables->count());


        $variable_list = [];

        foreach (Variable::all() as $variable) {
            $dictionaryCampaignVariable = $variable->values()
                ->where('dictionary_campaign_id', $this->dictionaryCampaign->getKey())
                ->first();

            $value = (
            $dictionaryCampaignVariable
                ? $dictionaryCampaignVariable->value
                : $variable->default_value
            );

            $variable_list[$variable->name] = $value;
        }

        $this->assertEquals('String "custom var value"', StrReplaceByVariables::getInstance('String "%var%"', $variable_list)->get());
        $this->assertEquals('String "vartwo value"', StrReplaceByVariables::getInstance('String "%vartwo%"', $variable_list)->get());

    }
}